Best-fit, o caractere que troca de pele
Ao converter entre codificações, um caractere sem par vira um ASCII parecido, e isso muda o sentido.
Texto é guardado em bytes segundo uma codificação. Ao converter de uma para outra, um caractere que não existe no destino pode ser trocado por um parecido: é o mapeamento best-fit do Windows. É útil para exibir texto, mas perigoso quando o resultado é interpretado.
Na CVE-2024-4577, o PHP-CGI no Windows recebia a string de consulta como argumentos de linha de comando. O hífen suave (byte 0xAD) não tem par exato em certas páginas de código e vira o hífen comum 0x2D por best-fit. Um argumento que começa com - é lido como OPÇÃO: assim %ADd na URL virava -d, que liga diretivas do PHP e leva a execução de código. É uma injeção de argumento nascida de uma conversão de texto.
O conserto corrigiu como os argumentos são separados, para a string de consulta não virar opções. A regra: entrada do usuário não deve chegar à linha de comando, e conversões de codificação não devem acontecer onde o texto será interpretado.