Desync Impulsionado por CRLF: Quando a Injeção de Cabeçalho se Transforma em Contrabando de Solicitação

Desync Impulsionado por CRLF: Quando a Injeção de Cabeçalho se Transforma em Contrabando de Solicitação
Os pesquisadores Tom Stacey (PortSwigger) e Tobia Righi (TurtleSec) apresentaram sua pesquisa, Ataques de Desync Impulsionados por CRLF. A principal conclusão: a Injeção de Cabeçalho HTTP é frequentemente subestimada — a capacidade de injetar CRLF pode escalar para desync HTTP completo / contrabando de solicitação, afetando outros usuários.
Uma fonte comum do problema é usar $uri dentro de proxy_pass no Nginx. O servidor normaliza o caminho da solicitação e decodifica caracteres codificados, incluindo sequências CRLF (%0d%0a), permitindo que sejam injetados na solicitação encaminhada upstream e dando ao atacante controle sobre sua estrutura.
De CRLF a desync Se dois CRLFs consecutivos puderem ser injetados, a solicitação original pode ser dividida em duas, permitindo o Envenenamento de Fila de Respostas (RQP): o servidor perde o controle de qual resposta pertence a qual solicitação, potencialmente fazendo com que respostas destinadas a outros usuários sejam enviadas ao atacante. Em um CDN, os pesquisadores acionaram RQP dentro da infraestrutura do próprio provedor, capturando eventualmente solicitações de outros usuários, incluindo cookies de sessão e tokens de autenticação para milhares de aplicativos hospedados no CDN. Em um grande provedor de telecomunicações, uma Injeção de Cabeçalho semelhante permitiu roubar tokens de acesso da infraestrutura interna e rendeu uma recompensa de $2.200. Mas mesmo que duas sequências CRLF consecutivas sejam bloqueadas, injetar um único cabeçalho pode ser suficiente. Ao adicionar Transfer-Encoding: chunked a uma solicitação com Content-Length, os pesquisadores alcançaram um desync CL.TE clássico. Em uma loja de roupas popular, a técnica permitiu substituir os endereços de e-mail de usuários ativos e assumir suas contas. No domínio de um grande fabricante de smartphones, o desync foi escalado para XSS e depois para assumir contas.
Desync a partir do navegador Uma descoberta chave é que a grande maioria dos ataques de desync impulsionados por CRLF pode ser acionada através de fetch() ou até mesmo navegação básica no navegador. Isso desloca a execução para o navegador da vítima e abre oportunidades de exploração para desyncs bloqueados por conexão e por IP, que normalmente impedem ataques entre usuários. Os pesquisadores também mostraram como o desync impulsionado por CRLF pode tornar prático o worm de desync anteriormente teorizado por James Kettle: XSS no navegador de uma vítima pode usar fetch() para acionar o mesmo desync contra outros usuários, criando um ataque auto-replicante. Em outros cenários, combinar divisão de solicitação com HEAD e Range tornou possível alcançar XSS, extrair tokens de autenticação e até tornar um cookie de sessão HttpOnly acessível ao JavaScript.
A Injeção de Cabeçalho HTTP não deve ser automaticamente considerada uma vulnerabilidade de baixo impacto. Uma injeção de CRLF pode servir como base para divisão de solicitação, desync CL.TE/0.CL, RQP, XSS e comprometimento de contas de usuário.
Fornecedor
Portswigger
Turtlesec
Produto
Crlf Injection
Fetch()
Http Header Injection
Nginx