Pular para o conteúdo
Todos os conceitos

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.

na URL %ADd 0xAD: hifen suave best-fit 0xAD -> 0x2D 0x2D: hifen de verdade argumento php-cgi -d lido como OPCAO
O byte 0xAD na URL passa pela conversão best-fit, vira o hífen 0x2D e a palavra %ADd chega ao php-cgi como a opção -d.

Aparece nestes desafios