
Scripts de deteção para RCE no Pi-hole FTLDNS (CVE-2026-35517) via injeção de nova linha, incluindo scanner em Python e script Nmap NSE para avaliação de vulnerabilidade baseada em versão.
Uma vulnerabilidade de Execução Remota de Código no mecanismo FTLDNS do Pi-hole (versões 6.0 a 6.5) permite que um atacante autenticado injete diretivas arbitrárias de configuração do dnsmasq incorporando caracteres de nova linha (\n) no parâmetro dns.upstreams da API. Como o dnsmasq suporta diretivas que executam comandos de shell, essa injeção de nova linha se traduz diretamente em execução completa de comandos no sistema host.
Isso não é apenas um bug isolado, é uma classe de injeção que afeta cinco parâmetros de configuração diferentes, todos corrigidos juntos no FTL v6.6.
| Campo | Detalhe |
|---|---|
| ID CVE | CVE-2026-35517 |
| Fornecedor | Projeto Pi-hole |
| Produto | FTLDNS (pihole-FTL) |
| Versões Afetadas | 6.0 a < 6.6 |
| CVSS v3.1 | 8.8 (Alto) |
| CWE | CWE-93 — Neutralização Incorreta de Sequências CRLF |
| Vetor de Ataque | Rede |
| Autenticação | Necessária (acesso de administrador/API do Pi-hole) |
| Interação do Usuário | Nenhuma |
| Publicado | 7 de abril de 2026 |
| Corrigido Em | FTL v6.6 (lançado em 3 de abril de 2026) |
| Descoberto Por | T0X1Cx |
| Avisos Relacionados | GHSA-23w8-7333-p9fj, GHSA-wxhv-w77q-6qwp, GHSA-28g5-gg88-wh5m, GHSA-fqv2-qhfh-ghcj, GHSA-vfmq-jrx3-wv3c |
O Pi-hole é um dos sumidouros de DNS mais amplamente implantados do mundo. Ele fica na sua rede, lida com consultas DNS e bloqueia anúncios e rastreadores no nível de DNS antes que eles cheguem ao seu navegador. É usado em todos os lugares, desde configurações únicas de Raspberry Pi em apartamentos até implantações empresariais que protegem milhares de dispositivos.
FTLDNS (Faster Than Light DNS) é o mecanismo central do Pi-hole. É um fork/wrapper personalizado em torno do dnsmasq, o conhecido servidor DNS e DHCP. O FTLDNS lida com:
Aqui está o detalhe principal: o FTLDNS gera arquivos de configuração do dnsmasq a partir de configurações fornecidas pelo usuário através de sua API. Se você alterar o servidor DNS upstream no painel de administração do Pi-hole, o FTLDNS grava esse valor em um arquivo de configuração do dnsmasq e reinicia o serviço. Esse caminho de gravação é onde a vulnerabilidade reside.
+------------------+ +------------------+ +------------------+
| Painel Admin | API/Web | Mecanismo | Gravação de | dnsmasq |
| (Web UI) | ---------> | FTLDNS | Configuração | (DNS/DHCP) |
+------------------+ | (pihole-FTL) | ------------> | |
+------------------+ +------------------+
| |
Lê configurações, Lê configuração,
grava em arquivos atende DNS/DHCP
de configuração na rede
Quando um administrador altera os servidores DNS upstream através da interface web ou API do Pi-hole, o fluxo é:
O parâmetro dns.upstreams destina-se a aceitar endereços de servidores DNS como 8.8.8.8 ou 1.1.1.1. O FTLDNS os grava na configuração do dnsmasq como diretivas server=:
# Entrada normal: "8.8.8.8"
# Gera:
server=8.8.8.8
O problema: o FTLDNS não sanitiza caracteres de nova linha na entrada. Um atacante pode injetar \n para sair da diretiva server= pretendida e injetar linhas de configuração inteiramente novas:
# Entrada maliciosa: "8.8.8.8\ndhcp-option=6,evil.dns.server"
# Gera:
server=8.8.8.8
dhcp-option=6,evil.dns.server
Isso por si só já seria preocupante (sequestro de DNS via injeção de opção DHCP). Mas fica pior.
O dnsmasq suporta uma diretiva de configuração chamada dhcp-option que pode referenciar scripts externos e, mais criticamente, suporta várias diretivas que podem executar comandos em cenários específicos. A cadeia de exploração se parece com isto:
Passo 1: O atacante se autentica no Pi-hole
(credenciais padrão, senha fraca, CSRF, sessão comprometida)
Passo 2: O atacante envia uma solicitação de API para atualizar dns.upstreams:
POST /api/dns/upstream
{
"upstreams": ["8.8.8.8\n<diretiva maliciosa do dnsmasq>"]
}
Passo 3: O FTLDNS grava o valor no arquivo de configuração do dnsmasq
sem sanitizar a nova linha
Passo 4: A diretiva injetada do dnsmasq é interpretada como uma
opção de configuração legítima
Passo 5: Dependendo da diretiva injetada, o atacante alcança:
- Sequestro de DNS (redirecionar todas as consultas DNS)
- Envenenamento de DHCP (enviar configurações maliciosas aos clientes)
- Execução de comandos via capacidades de script do dnsmasq
- Gravação de arquivos em caminhos arbitrários
O ponto principal é que isso não se trata de explorar uma vulnerabilidade do dnsmasq — o dnsmasq está funcionando como projetado. A vulnerabilidade é que o FTLDNS permite que entrada não confiável vaze para o arquivo de configuração, transformando uma API de gerenciamento de configuração em um ponto de injeção de configuração arbitrária.
O pesquisador (T0X1Cx) descobriu que o mesmo padrão de injeção de nova linha afeta cinco parâmetros de configuração diferentes do FTLDNS. Isso é um problema sistêmico — o código carecia de sanitização de entrada em toda a extensão:
| Aviso | Parâmetro | O Que Controla |
|---|---|---|
| GHSA-23w8-7333-p9fj | dns.upstreams | Servidores DNS upstream |
| GHSA-wxhv-w77q-6qwp | dns.hostRecord | Registros de host DNS personalizados |
| GHSA-28g5-gg88-wh5m | dns.cnameRecords | Mapeamentos de registros CNAME |
| GHSA-fqv2-qhfh-ghcj | dhcp.leaseTime | Duração da concessão DHCP |
| GHSA-vfmq-jrx3-wv3c | dhcp.hosts | Atribuições estáticas de host DHCP |
Cada um desses parâmetros grava em arquivos de configuração do dnsmasq, e cada um falhou em sanitizar caracteres de nova linha. A correção no FTL v6.6 adicionou validação de entrada adequada que rejeita caracteres de nova linha (e outros caracteres de controle) em todos os parâmetros de configuração.
No host do Pi-hole:
Na rede (impacto a jusante):
Fatores de amplificação de risco:
| Versão | Status |
|---|---|
| FTLDNS 6.6+ | Corrigido |
| FTLDNS 6.0 – 6.5 | Vulnerável |
| FTLDNS 5.x e anteriores | Não afetado (arquitetura de API diferente) |
Para verificar sua versão:
pihole -v
# ou
pihole-FTL --version
Alto risco:
Risco moderado:
Risco menor (mas ainda assim corrija):
O script Python detecta instâncias vulneráveis do Pi-hole através de análise baseada em versão.
Como funciona:
Nenhum payload de injeção é enviado. O teste é inteiramente somente leitura e seguro.
Uso:
# Instalar dependências
pip install -r requirements.txt
# Alvo único (HTTP, porta padrão 80)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1
# Porta personalizada
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t pi.hole -p 8080
# Modo HTTPS (muda automaticamente para a porta 443)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 10.0.0.1 --https
# Varredura em massa a partir de arquivo
python CVE-2026-35517_PiHole_FTLDNS_detector.py -f targets.txt
# Saída JSON salva em arquivo
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --json -o results.json
# Timeout aumentado
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --timeout 20
Opções:
| Flag | Descrição | Padrão |
|---|---|---|
-t, --target | IP ou hostname do alvo | — |
-f, --file | Arquivo com alvos, um por linha (comentários # suportados) | — |
-p, --port | Porta do alvo | 80 |
--https | Usar HTTPS (muda automaticamente a porta para 443 se a porta for 80) | Desligado |
--timeout | Timeout de conexão em segundos | 10 |
--json | Saída em formato JSON | Desligado |
-o, --output | Salvar resultados em um arquivo | — |
Exemplo de saída:
╔══════════════════════════════════════════════════════════════╗
║ CVE-2026-35517 - Detector de RCE do Pi-hole FTLDNS ║
║ Injeção de Nova Linha em dns.upstreams → Execução de Comando ║
║ CVSS: 8.8 (Alto) | Afeta: FTLDNS 6.0 - 6.5 ║
╚══════════════════════════════════════════════════════════════╝
[*] Escaneando 192.168.1.1:80...
Alvo: 192.168.1.1:80
============================================================
[*] Pi-hole detectado
Interface de administração: Acessível
API acessível: Sim
Versão do FTL: v6.4
Versão do Core: v6.3
Versão da Web: v6.4
Avaliação CVE-2026-35517:
[VULNERÁVEL] FTLDNS 6.4 está dentro do intervalo vulnerável (6.0 - 6.5).
Atualize para FTL v6.6 ou posterior imediatamente.
Vulnerabilidades Relacionadas (também corrigidas no FTL v6.6):
[-] GHSA-wxhv-w77q-6qwp: RCE via Injeção de Nova Linha em dns.hostRecord
[-] GHSA-28g5-gg88-wh5m: RCE via Injeção de Nova Linha em dns.cnameRecords
[-] GHSA-fqv2-qhfh-ghcj: RCE via Injeção de Nova Linha em dhcp.leaseTime
[-] GHSA-vfmq-jrx3-wv3c: RCE via Injeção de Nova Linha em dhcp.hosts
Remediação:
1. Atualize o Pi-hole FTL para a versão 6.6 ou posterior
2. Execute: pihole -up
3. Verifique com: pihole -v
4. Revise os controles de acesso à API e as configurações de autenticação
5. Verifique os logs em busca de sinais de exploração (alterações incomuns na configuração DNS)
# Instalar o script NSE
sudo cp CVE-2026-35517_PiHole_FTLDNS.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb
# Varredura básica
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS <alvo>
# Escanear portas comuns do Pi-hole
nmap -p 80,443,8080,4711 --script CVE-2026-35517_PiHole_FTLDNS <alvo>
# Varredura de sub-rede — encontrar todas as instâncias do Pi-hole em uma rede
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS 192.168.1.0/24
# Combinado com detecção de versão
nmap -sV -p 80,443 --script CVE-2026-35517_PiHole_FTLDNS <alvo>
# Escanear alvos a partir de um arquivo
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS -iL targets.txt
Exemplo de saída do Nmap:
PORT STATE SERVICE
80/tcp open http
| CVE-2026-35517_PiHole_FTLDNS:
| VULNERÁVEL:
| RCE no Pi-hole FTLDNS via Configuração de DNS Upstream
| Estado: VULNERÁVEL
| IDs: CVE:CVE-2026-35517
| Fator de risco: Alto (CVSS: 8.8)
| Data de divulgação: 2026-04-07
| Informações extras:
| Versão do FTL: v6.4
| Versão do Core: v6.3
| Versão da Web: v6.4
| Avisos relacionados também corrigidos no FTL v6.6:
| GHSA-wxhv-w77q-6qwp (injeção em dns.hostRecord)
| GHSA-28g5-gg88-wh5m (injeção em dns.cnameRecords)
| GHSA-fqv2-qhfh-ghcj (injeção em dhcp.leaseTime)
| GHSA-vfmq-jrx3-wv3c (injeção em dhcp.hosts)
| Remediação: Atualize para Pi-hole FTL v6.6+ (pihole -up)
| Referências:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-35517
|_ https://github.com/pi-hole/FTL/security/advisories/GHSA-23w8-7333-p9fj
Se você tiver acesso SSH ao host do Pi-hole:
# Verificar versão do FTL
pihole-FTL --version
# Ou via CLI do Pi-hole
pihole -v
# Verificar via API (v6)
curl -s http://pi.hole/api/info/version | python3 -m json.tool
# Verificar via API (v5)
curl -s http://pi.hole/admin/api.php?versions | python3 -m json.tool
Se a versão do FTL estiver entre 6.0 e 6.5 (inclusive), você está vulnerável.
O que procurar:
/etc/dnsmasq.d/ e /etc/pihole/ em busca de diretivas inesperadasComandos para investigar:
# Verificar configurações do dnsmasq em busca de linhas injetadas
grep -r "dhcp-option\|addn-hosts\|conf-file\|log-facility" /etc/dnsmasq.d/
# Verificar modificações recentes de configuração
find /etc/pihole /etc/dnsmasq.d -mtime -7 -ls
# Revisar o log de depuração do Pi-hole
pihole -d
# Verificar processos em execução em busca de anomalias
ps aux | grep -E "dnsmasq|pihole"
# Revisar crontab em busca de persistência
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
Ação imediata — atualize agora:
# Atualizar o Pi-hole (inclui FTL, Web e Core)
pihole -up
# Verificar a atualização
pihole -v
# A versão do FTL deve ser >= 6.6
Se você não puder atualizar imediatamente:
pihole -a -pAções pós-correção:
Kerem Oruç - Engenheiro de Cibersegurança