CRLF (%0D%0A) Injection
Last updated
Last updated
Aprenda e pratique Hacking na AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking no GCP: HackTricks Training GCP Red Team Expert (GRTE)
Dica de bug bounty: inscreva-se no Intigriti, uma plataforma premium de bug bounty criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
Carriage Return (CR) e Line Feed (LF), coletivamente conhecidos como CRLF, são sequências de caracteres especiais usadas no protocolo HTTP para denotar o fim de uma linha ou o início de uma nova. Servidores web e navegadores usam CRLF para distinguir entre cabeçalhos HTTP e o corpo de uma resposta. Esses caracteres são universalmente empregados em comunicações HTTP/1.1 em vários tipos de servidores web, como Apache e Microsoft IIS.
A injeção CRLF envolve a inserção de caracteres CR e LF em entradas fornecidas pelo usuário. Essa ação engana o servidor, aplicativo ou usuário, fazendo com que interpretem a sequência injetada como o fim de uma resposta e o início de outra. Embora esses caracteres não sejam inerentemente prejudiciais, seu uso indevido pode levar à divisão de resposta HTTP e outras atividades maliciosas.
Considere um arquivo de log em um painel de administração que segue o formato: IP - Hora - Caminho Visitado
. Uma entrada típica pode parecer:
Um atacante pode explorar uma injeção CRLF para manipular este log. Ao injetar caracteres CRLF na solicitação HTTP, o atacante pode alterar o fluxo de saída e fabricar entradas de log. Por exemplo, uma sequência injetada pode transformar a entrada do log em:
Aqui, %0d
e %0a
representam as formas codificadas em URL de CR e LF. Após o ataque, o log exibiria de forma enganosa:
O atacante, assim, encobre suas atividades maliciosas fazendo parecer que o localhost (uma entidade tipicamente confiável dentro do ambiente do servidor) realizou as ações. O servidor interpreta a parte da consulta que começa com %0d%0a
como um único parâmetro, enquanto o parâmetro restrictedaction
é analisado como outra entrada separada. A consulta manipulada efetivamente imita um comando administrativo legítimo: /index.php?page=home&restrictedaction=edit
HTTP Response Splitting é uma vulnerabilidade de segurança que surge quando um atacante explora a estrutura das respostas HTTP. Essa estrutura separa os cabeçalhos do corpo usando uma sequência de caracteres específica, Carriage Return (CR) seguido por Line Feed (LF), coletivamente chamados de CRLF. Se um atacante conseguir inserir uma sequência CRLF em um cabeçalho de resposta, ele pode efetivamente manipular o conteúdo da resposta subsequente. Esse tipo de manipulação pode levar a sérios problemas de segurança, notavelmente Cross-site Scripting (XSS).
A aplicação define um cabeçalho personalizado assim: X-Custom-Header: UserInput
A aplicação busca o valor para UserInput
de um parâmetro de consulta, digamos "user_input". Em cenários que carecem de validação e codificação adequadas de entrada, um atacante pode criar um payload que inclui a sequência CRLF, seguida de conteúdo malicioso.
Um atacante cria uma URL com um 'user_input' especialmente elaborado: ?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
Nesta URL, %0d%0a%0d%0a
é a forma codificada em URL de CRLFCRLF. Isso engana o servidor para inserir uma sequência CRLF, fazendo com que o servidor trate a parte subsequente como o corpo da resposta.
O servidor reflete a entrada do atacante no cabeçalho da resposta, levando a uma estrutura de resposta não intencional onde o script malicioso é interpretado pelo navegador como parte do corpo da resposta.
Navegador para:
E o servidor responde com o cabeçalho:
Outro exemplo: (de https://www.acunetix.com/websitesecurity/crlf-injection/)
Você pode enviar o payload dentro do caminho da URL para controlar a resposta do servidor (exemplo de aqui):
Confira mais exemplos em:
A Injeção de Cabeçalho HTTP, frequentemente explorada através da injeção CRLF (Carriage Return e Line Feed), permite que atacantes insiram cabeçalhos HTTP. Isso pode comprometer mecanismos de segurança, como filtros XSS (Cross-Site Scripting) ou o SOP (Same-Origin Policy), potencialmente levando ao acesso não autorizado a dados sensíveis, como tokens CSRF, ou à manipulação de sessões de usuário através do plantio de cookies.
Um atacante pode injetar cabeçalhos HTTP para habilitar CORS (Cross-Origin Resource Sharing), contornando as restrições impostas pelo SOP. Essa violação permite que scripts de origens maliciosas interajam com recursos de uma origem diferente, potencialmente acessando dados protegidos.
A injeção CRLF pode ser utilizada para criar e injetar uma nova requisição HTTP. Um exemplo notável disso é a vulnerabilidade na classe SoapClient
do PHP, especificamente dentro do parâmetro user_agent
. Ao manipular esse parâmetro, um atacante pode inserir cabeçalhos adicionais e conteúdo do corpo, ou até mesmo injetar uma nova requisição HTTP completamente. Abaixo está um exemplo em PHP demonstrando essa exploração:
Para mais informações sobre esta técnica e problemas potenciais verifique a fonte original.
Você pode injetar cabeçalhos essenciais para garantir que o back-end mantenha a conexão aberta após responder à requisição inicial:
Depois, uma segunda solicitação pode ser especificada. Este cenário geralmente envolve HTTP request smuggling, uma técnica onde cabeçalhos ou elementos de corpo extras adicionados pelo servidor após a injeção podem levar a várias explorações de segurança.
Exploração:
Injeção de Prefixo Malicioso: Este método envolve envenenar a solicitação do próximo usuário ou um cache da web especificando um prefixo malicioso. Um exemplo disso é:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1
Criando um Prefixo para Envenenamento da Fila de Respostas: Esta abordagem envolve criar um prefixo que, quando combinado com lixo no final, forma uma segunda solicitação completa. Isso pode acionar o envenenamento da fila de respostas. Um exemplo é:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1
Memcache é um armazenamento de chave-valor que usa um protocolo de texto claro. Mais informações em:
11211 - Pentesting MemcachePara informações completas, leia o artigo original
Se uma plataforma estiver pegando dados de uma solicitação HTTP e usando-os sem sanitização para realizar solicitações a um servidor memcache, um atacante poderia abusar desse comportamento para injetar novos comandos memcache.
Por exemplo, na vulnerabilidade descoberta originalmente, chaves de cache foram usadas para retornar o IP e a porta que um usuário deveria conectar, e os atacantes conseguiram injetar comandos memcache que envenenariam o cache para enviar os detalhes das vítimas (nomes de usuário e senhas incluídos) para os servidores do atacante:
Além disso, os pesquisadores também descobriram que poderiam desincronizar as respostas do memcache para enviar o IP e as portas dos atacantes para usuários cujo e-mail o atacante não conhecia:
Para mitigar os riscos de injeções CRLF (Carriage Return e Line Feed) ou injeções de cabeçalho HTTP em aplicações web, as seguintes estratégias são recomendadas:
Evitar Entrada Direta do Usuário em Cabeçalhos de Resposta: A abordagem mais segura é evitar incorporar a entrada fornecida pelo usuário diretamente nos cabeçalhos de resposta.
Codificar Caracteres Especiais: Se evitar a entrada direta do usuário não for viável, certifique-se de empregar uma função dedicada à codificação de caracteres especiais como CR (Carriage Return) e LF (Line Feed). Esta prática previne a possibilidade de injeção CRLF.
Atualizar Linguagem de Programação: Atualize regularmente a linguagem de programação usada em suas aplicações web para a versão mais recente. Opte por uma versão que inherentemente não permita a injeção de caracteres CR e LF dentro das funções encarregadas de definir cabeçalhos HTTP.
Dica de bug bounty: inscreva-se no Intigriti, uma plataforma de bug bounty premium criada por hackers, para hackers! Junte-se a nós em https://go.intigriti.com/hacktricks hoje e comece a ganhar recompensas de até $100,000!
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)