

Este repositório documenta a engenharia reversa e exploração abrangente da CVE-2019-17147, uma vulnerabilidade crítica de execução remota de código (RCE) no roteador TP-Link TL-WR841N (arquitetura MIPSEL). A vulnerabilidade reside no daemon do servidor web httpd, onde a validação inadequada de entrada permite um Estouro de Buffer de Pilha através de uma função personalizada cstr_strncpy, levando à execução arbitrária de código sem autenticação.
| Vulnerabilidade | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (Alta) |
| Vetor | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Tipo | Estouro de Buffer Baseado em Pilha |
| Componente | /usr/bin/httpd |
O ambiente de análise foi estabelecido usando os seguintes componentes:
flashrom (Dump de memória), binwalk (Extração de firmware), IDA Pro (Análise estática), GDB-Multiarch (Depuração remota), QEMU (Emulação MIPSEL).TL-WR841N(US)_V14_180319.A vulnerabilidade foi identificada no binário /usr/bin/httpd. A análise estática via IDA Pro revelou uma função personalizada de cópia de string, cstr_strncpy, usada durante a análise de cabeçalhos HTTP (especificamente o cabeçalho Host).

A função cstr_strncpy aceita um parâmetro copy_len derivado do comprimento da string origem em vez do tamanho do buffer destino. Isso permite um clássico estouro de buffer de pilha quando um cabeçalho excessivamente longo é fornecido. Além disso, a função http_parser_argStrToList, que manipula uma estrutura de lista encadeada, é afetada por esse estouro, concedendo controle sobre os ponteiros next e prev.
A depuração em tempo de execução com gdbserver confirmou a falha e o controle sobre o fluxo de execução. A análise do mapa de memória (vmmap) revelou uma falta crítica de proteção:

Essa configuração permite a execução direta de shellcode colocado no Heap, evitando a necessidade de cadeias ROP complexas.
A cadeia de exploração utiliza uma primitiva Escreva-O-Quê-Onde derivada dos ponteiros corrompidos da lista encadeada para alcançar RCE.
strcpy, o payload é enviado em múltiplas requisições:
atol na Tabela de Deslocamento Global (GOT) é sobrescrita com o endereço do shellcode.atol (através de um cabeçalho Content-Length), redirecionando a execução para o shellcode injetado.
O script Python final automatiza o ataque com sucesso, gerando um shell root na porta 31337.

A vulnerabilidade decorre de práticas inseguras de codificação no gerenciamento de buffer.
cstr_strncpy por alternativas seguras que imponham estritamente os limites do buffer de destino (ex.: strncpy com verificação explícita de limites baseada em sizeof(dest)).Para um passo a passo detalhado de todo o processo, incluindo análise de código e configuração do ambiente, consulte os guias completos incluídos neste repositório:
Este projeto é apenas para fins educacionais e de pesquisa. As informações fornecidas destinam-se a melhorar a segurança de dispositivos IoT. Os autores não são responsáveis por qualquer uso indevido das informações ou código contidos neste documento.
Baseado em pesquisa e análise originais.