Injeção de CRLF
O que é Injeção de CRLF?
Injeção de CRLFAtaque que insere caracteres de retorno de carro e nova linha em cabeçalhos HTTP, ficheiros de log ou outros protocolos textuais para forjar novas linhas.
A injeção CRLF abusa do significado especial da sequência CR (0x0D) e LF (0x0A) que termina linhas em muitos protocolos baseados em texto. Quando uma aplicação reflete entrada não validada em cabeçalhos HTTP, entradas de log, comandos SMTP ou consultas LDAP, um atacante pode injetar um par CRLF seguido de conteúdo adicional para forjar cabeçalhos, dividir respostas, ocultar entradas em logs ou contrabandear comandos. A fraqueza está catalogada como CWE-93 (neutralização incorreta de sequências CRLF); a sua variante específica de cabeçalhos HTTP é a CWE-113, que cobre a divisão de pedidos/respostas HTTP.
No contexto web, a forma mais perigosa é o HTTP response splitting, descrito pela primeira vez por Amit Klein, da Sanctum, num artigo de 2004. Como o CRLF injetado fecha o bloco de cabeçalhos, o atacante pode anexar uma segunda resposta totalmente sob o seu controlo — envenenando caches partilhadas, definindo cookies arbitrários ou injetando XSS num corpo que o navegador trata como fidedigno. O bug ressurge em bibliotecas padrão: a CVE-2019-9740 permitia que sequências CRLF numa URL passada ao urllib.request.urlopen do Python injetassem cabeçalhos HTTP (e até comandos Redis através da query string); foi corrigida no Python 2.7.17 e 3.5.10/3.6.10/3.7.4. As defesas incluem rejeitar ou codificar em percentagem os CR/LF em qualquer entrada destinada a cabeçalhos, usar APIs de alto nível que recusem caracteres de controlo nos valores de cabeçalho, e codificadores de log estritos e estruturados em vez da concatenação de strings em bruto.
flowchart TD
A[Entrada do utilizador<br/>name=foo%0d%0aSet-Cookie: admin=true] --> B{Validar / remover CR LF?}
B -->|Não| C[Entrada escrita em bruto no cabeçalho]
C --> D[O CRLF termina o cabeçalho atual]
D --> E[Cabeçalho ou corpo controlado pelo atacante]
E --> F[Envenenamento de cache / injeção de cookie / XSS]
B -->|Sim, rejeitar CR LF| G[Resposta segura]● Exemplos
- 01
Set-Cookie: id=foo%0d%0aSet-Cookie: admin=true — adiciona um segundo cookie via CRLF.
- 02
Location: /redir%0d%0aContent-Length:0%0d%0a%0d%0a<html>... — divisão de resposta HTTP.
● Perguntas frequentes
O que é Injeção de CRLF?
Ataque que insere caracteres de retorno de carro e nova linha em cabeçalhos HTTP, ficheiros de log ou outros protocolos textuais para forjar novas linhas. Pertence à categoria Ataques e ameaças da cibersegurança.
O que significa Injeção de CRLF?
Ataque que insere caracteres de retorno de carro e nova linha em cabeçalhos HTTP, ficheiros de log ou outros protocolos textuais para forjar novas linhas.
Como se defender contra Injeção de CRLF?
As defesas contra Injeção de CRLF costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Injeção de CRLF?
Nomes alternativos comuns: Injeção de retorno e nova linha, Injeção em logs.