Injeção de comando
Quando o programa monta uma linha de shell com o que você digita, o seu texto vira um comando do sistema.
Muitos programas chamam uma ferramenta do sistema para o trabalho pesado: dar um ping, compactar com tar, converter uma imagem com convert. O jeito mais curto (e mais perigoso) de fazer isso é montar uma linha de texto e entregá-la ao shell, com os.system(...) em Python ou exec(...) em Node.
O problema aparece quando parte dessa linha é texto que você escolheu. O shell não sabe o que é dado e o que é comando: ele lê a linha inteira. Então, se o programa faz os.system("ping -c1 " + host) e você manda host = 192.0.2.5; id, o shell recebe:
ping -c1 192.0.2.5; id
e executa dois comandos: o ping e o seu id. O seu texto deixou de ser um argumento e virou um comando novo. É a injeção de comando: a mesma falha da injeção de SQL, só que o interpretador agora é o shell do sistema, não o banco.
Repare que o 192.0.2.5 nem precisa funcionar. Ele só ocupa o lugar do host; o que importa é o ; e o que vem depois.