
Erkennungsskripte für Pi-hole FTLDNS RCE (CVE-2026-35517) über Newline-Injection, einschließlich Python-Scanner und Nmap-NSE-Skript für die versionsbasierte Schwachstellenbewertung.
Eine Remote Code Execution-Schwachstelle in der FTLDNS-Engine von Pi-hole (Versionen 6.0 bis 6.5) ermöglicht es einem authentifizierten Angreifer, beliebige dnsmasq-Konfigurationsdirektiven zu injizieren, indem Zeilenvorschubzeichen (\n) in den API-Parameter dns.upstreams eingebettet werden. Da dnsmasq Direktiven unterstützt, die Shell-Befehle ausführen, führt diese Newline-Injection direkt zu vollständiger Befehlsausführung auf dem Host-System.
Dies ist nicht nur ein einzelner Bug, sondern eine Klasse von Injection-Schwachstellen, die fünf verschiedene Konfigurationsparameter betrifft, die alle zusammen in FTL v6.6 gepatcht wurden.
| Feld | Detail |
|---|---|
| CVE-ID | CVE-2026-35517 |
| Anbieter | Pi-hole-Projekt |
| Produkt | FTLDNS (pihole-FTL) |
| Betroffene Versionen | 6.0 bis < 6.6 |
| CVSS v3.1 | 8.8 (Hoch) |
| CWE | CWE-93 — Unzureichende Neutralisierung von CRLF-Sequenzen |
| Angriffsvektor | Netzwerk |
| Authentifizierung | Erforderlich (Pi-hole-Admin/API-Zugriff) |
| Benutzerinteraktion | Keine |
| Veröffentlicht | 7. April 2026 |
| Gepatcht in | FTL v6.6 (veröffentlicht am 3. April 2026) |
| Entdeckt von | T0X1Cx |
| Zugehörige Advisories | GHSA-23w8-7333-p9fj, GHSA-wxhv-w77q-6qwp, GHSA-28g5-gg88-wh5m, GHSA-fqv2-qhfh-ghcj, GHSA-vfmq-jrx3-wv3c |
Pi-hole ist einer der am weitesten verbreiteten DNS-Sinkholes der Welt. Es sitzt in Ihrem Netzwerk, verarbeitet DNS-Anfragen und blockiert Werbung und Tracker auf DNS-Ebene, bevor sie Ihren Browser erreichen. Es wird überall eingesetzt, von einzelnen Raspberry-Pi-Setups in Wohnungen bis hin zu Unternehmensbereitstellungen, die Tausende von Geräten schützen.
FTLDNS (Faster Than Light DNS) ist die Kern-Engine von Pi-hole. Es ist ein eigener Fork/Wrapper um dnsmasq, den bekannten DNS- und DHCP-Server. FTLDNS übernimmt:
Hier ist das entscheidende Detail: FTLDNS generiert dnsmasq-Konfigurationsdateien aus benutzerdefinierten Einstellungen über seine API. Wenn Sie den Upstream-DNS-Server im Pi-hole-Admin-Panel ändern, schreibt FTLDNS diesen Wert in eine dnsmasq-Konfigurationsdatei und startet den Dienst neu. In diesem Schreibpfad liegt die Schwachstelle.
+------------------+ +------------------+ +------------------+
| Admin-Panel | API/Web | FTLDNS-Engine | Config Write | dnsmasq |
| (Web-UI) | ---------> | (pihole-FTL) | ------------> | (DNS/DHCP) |
+------------------+ +------------------+ +------------------+
| |
Liest Einstellungen, Liest Konfiguration,
schreibt Konfigurations- bedient DNS/DHCP
dateien auf die Festplatte im Netzwerk
Wenn ein Admin die Upstream-DNS-Server über die Pi-hole-Web-UI oder API ändert, ist der Ablauf wie folgt:
Der Parameter dns.upstreams soll DNS-Serveradressen wie 8.8.8.8 oder 1.1.1.1 akzeptieren. FTLDNS schreibt diese in die dnsmasq-Konfiguration als server=-Direktiven:
# Normale Eingabe: "8.8.8.8"
# Generiert:
server=8.8.8.8
Das Problem: FTLDNS bereinigt keine Zeilenvorschubzeichen in der Eingabe. Ein Angreifer kann \n injizieren, um aus der beabsichtigten server=-Direktive auszubrechen und vollständig neue Konfigurationszeilen zu injizieren:
# Bösartige Eingabe: "8.8.8.8\ndhcp-option=6,evil.dns.server"
# Generiert:
server=8.8.8.8
dhcp-option=6,evil.dns.server
Das allein wäre schon besorgniserregend (DNS-Hijacking durch DHCP-Options-Injection). Aber es wird noch schlimmer.
dnsmasq unterstützt eine Konfigurationsdirektive namens dhcp-option, die auf externe Skripte verweisen kann, und was noch kritischer ist: Es unterstützt mehrere Direktiven, die in bestimmten Szenarien Befehle ausführen können. Die Ausbeutungskette sieht wie folgt aus:
Schritt 1: Angreifer authentifiziert sich bei Pi-hole
(Standard-Anmeldedaten, schwaches Passwort, CSRF, kompromittierte Sitzung)
Schritt 2: Angreifer sendet API-Anfrage zum Aktualisieren von dns.upstreams:
POST /api/dns/upstream
{
"upstreams": ["8.8.8.8\n<bösartige dnsmasq-Direktive>"]
}
Schritt 3: FTLDNS schreibt den Wert in die dnsmasq-Konfigurationsdatei,
ohne den Zeilenvorschub zu bereinigen
Schritt 4: Die injizierte dnsmasq-Direktive wird als
legitime Konfigurationsoption geparst
Schritt 5: Je nach injizierter Direktive erreicht der Angreifer:
- DNS-Hijacking (Umleitung aller DNS-Anfragen)
- DHCP-Poisoning (Auslieferung bösartiger Konfigurationen an Clients)
- Befehlsausführung über die Skriptfähigkeiten von dnsmasq
- Dateischreiben auf beliebige Pfade
Die entscheidende Erkenntnis ist, dass es hier nicht um die Ausnutzung einer dnsmasq-Schwachstelle geht — dnsmasq funktioniert wie vorgesehen. Die Schwachstelle besteht darin, dass FTLDNS nicht vertrauenswürdige Eingaben in die Konfigurationsdatei einfließen lässt und so aus einer Konfigurationsverwaltungs-API einen beliebigen Konfigurations-Injektionspunkt macht.
Der Forscher (T0X1Cx) entdeckte, dass dasselbe Newline-Injection-Muster fünf verschiedene FTLDNS-Konfigurationsparameter betrifft. Dies ist ein systemisches Problem — dem Code fehlte durchgängig die Eingabebereinigung:
| Advisory | Parameter | Was es steuert |
|---|---|---|
| GHSA-23w8-7333-p9fj | dns.upstreams | Upstream-DNS-Server |
| GHSA-wxhv-w77q-6qwp | dns.hostRecord | Benutzerdefinierte DNS-Host-Einträge |
| GHSA-28g5-gg88-wh5m | dns.cnameRecords | CNAME-Record-Zuordnungen |
| GHSA-fqv2-qhfh-ghcj | dhcp.leaseTime | DHCP-Leasedauer |
| GHSA-vfmq-jrx3-wv3c | dhcp.hosts | Statische DHCP-Host-Zuweisungen |
Jeder dieser Parameter schreibt in dnsmasq-Konfigurationsdateien, und jeder versäumte es, Zeilenvorschubzeichen zu bereinigen. Der Fix in FTL v6.6 fügte eine ordnungsgemäße Eingabevalidierung hinzu, die Zeilenvorschubzeichen (und andere Steuerzeichen) in allen Konfigurationsparametern ablehnt.
Auf dem Pi-hole-Host:
Im Netzwerk (nachgelagerte Auswirkungen):
Risikoverstärkende Faktoren:
| Version | Status |
|---|---|
| FTLDNS 6.6+ | Gepatcht |
| FTLDNS 6.0 – 6.5 | Verwundbar |
| FTLDNS 5.x und älter | Nicht betroffen (andere API-Architektur) |
So überprüfen Sie Ihre Version:
pihole -v
# oder
pihole-FTL --version
Hohes Risiko:
Mäßiges Risiko:
Geringeres Risiko (aber trotzdem patchen):
Das Python-Skript erkennt verwundbare Pi-hole-Instanzen durch versionsbasierte Analyse.
So funktioniert es:
Es werden keine Injektions-Payloads gesendet. Der Test ist vollständig schreibgeschützt und sicher.
Verwendung:
# Abhängigkeiten installieren
pip install -r requirements.txt
# Einzelnes Ziel (HTTP, Standardport 80)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1
# Benutzerdefinierter Port
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t pi.hole -p 8080
# HTTPS-Modus (wechselt automatisch zu Port 443)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 10.0.0.1 --https
# Massenscan aus Datei
python CVE-2026-35517_PiHole_FTLDNS_detector.py -f targets.txt
# JSON-Ausgabe in Datei gespeichert
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --json -o results.json
# Erhöhtes Timeout
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --timeout 20
Optionen:
| Flag | Beschreibung | Standard |
|---|---|---|
-t, --target | Ziel-IP oder Hostname | — |
-f, --file | Datei mit Zielen, eines pro Zeile (#-Kommentare unterstützt) | — |
-p, --port | Zielport | 80 |
--https | HTTPS verwenden (wechselt Port automatisch auf 443, wenn Port 80 ist) | Aus |
--timeout | Verbindungs-Timeout in Sekunden | 10 |
--json | Ausgabe im JSON-Format | Aus |
-o, --output | Ergebnisse in einer Datei speichern | — |
Beispielausgabe:
╔══════════════════════════════════════════════════════════════╗
║ CVE-2026-35517 - Pi-hole FTLDNS RCE Detector ║
║ Newline Injection in dns.upstreams → Command Execution ║
║ CVSS: 8.8 (High) | Affects: FTLDNS 6.0 - 6.5 ║
╚══════════════════════════════════════════════════════════════╝
[*] Scanning 192.168.1.1:80...
Target: 192.168.1.1:80
============================================================
[*] Pi-hole detected
Admin interface: Accessible
API accessible: Yes
FTL version: v6.4
Core version: v6.3
Web version: v6.4
CVE-2026-35517 Assessment:
[VULNERABLE] FTLDNS 6.4 is within the vulnerable range (6.0 - 6.5).
Upgrade to FTL v6.6 or later immediately.
Related Vulnerabilities (also patched in FTL v6.6):
[-] GHSA-wxhv-w77q-6qwp: RCE via dns.hostRecord Newline Injection
[-] GHSA-28g5-gg88-wh5m: RCE via dns.cnameRecords Newline Injection
[-] GHSA-fqv2-qhfh-ghcj: RCE via dhcp.leaseTime Newline Injection
[-] GHSA-vfmq-jrx3-wv3c: RCE via dhcp.hosts Newline Injection
Remediation:
1. Upgrade Pi-hole FTL to version 6.6 or later
2. Run: pihole -up
3. Verify with: pihole -v
4. Review API access controls and authentication settings
5. Check logs for signs of exploitation (unusual DNS config changes)
# NSE-Skript installieren
sudo cp CVE-2026-35517_PiHole_FTLDNS.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb
# Basisscan
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS <Ziel>
# Häufige Pi-hole-Ports scannen
nmap -p 80,443,8080,4711 --script CVE-2026-35517_PiHole_FTLDNS <Ziel>
# Subnetz-Scan — alle Pi-hole-Instanzen in einem Netzwerk finden
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS 192.168.1.0/24
# Kombiniert mit Versionserkennung
nmap -sV -p 80,443 --script CVE-2026-35517_PiHole_FTLDNS <Ziel>
# Ziele aus einer Datei scannen
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS -iL targets.txt
Beispiel-Nmap-Ausgabe:
PORT STATE SERVICE
80/tcp open http
| CVE-2026-35517_PiHole_FTLDNS:
| VULNERABLE:
| Pi-hole FTLDNS RCE via Upstream DNS Configuration
| State: VULNERABLE
| IDs: CVE:CVE-2026-35517
| Risk factor: High (CVSS: 8.8)
| Disclosure date: 2026-04-07
| Extra information:
| FTL Version: v6.4
| Core Version: v6.3
| Web Version: v6.4
| Related advisories also fixed in FTL v6.6:
| GHSA-wxhv-w77q-6qwp (dns.hostRecord injection)
| GHSA-28g5-gg88-wh5m (dns.cnameRecords injection)
| GHSA-fqv2-qhfh-ghcj (dhcp.leaseTime injection)
| GHSA-vfmq-jrx3-wv3c (dhcp.hosts injection)
| Remediation: Upgrade to Pi-hole FTL v6.6+ (pihole -up)
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-35517
|_ https://github.com/pi-hole/FTL/security/advisories/GHSA-23w8-7333-p9fj
Wenn Sie SSH-Zugriff auf den Pi-hole-Host haben:
# FTL-Version prüfen
pihole-FTL --version
# Oder über die Pi-hole-CLI
pihole -v
# Über API prüfen (v6)
curl -s http://pi.hole/api/info/version | python3 -m json.tool
# Über API prüfen (v5)
curl -s http://pi.hole/admin/api.php?versions | python3 -m json.tool
Wenn die FTL-Version zwischen 6.0 und 6.5 (einschließlich) liegt, sind Sie verwundbar.
Worauf Sie achten sollten:
/etc/dnsmasq.d/ und /etc/pihole/ auf unerwartete DirektivenBefehle zur Untersuchung:
# dnsmasq-Konfigurationen auf injizierte Zeilen prüfen
grep -r "dhcp-option\|addn-hosts\|conf-file\|log-facility" /etc/dnsmasq.d/
# Auf kürzliche Konfigurationsänderungen prüfen
find /etc/pihole /etc/dnsmasq.d -mtime -7 -ls
# Pi-hole-Debug-Protokoll überprüfen
pihole -d
# Laufende Prozesse auf Anomalien prüfen
ps aux | grep -E "dnsmasq|pihole"
# Crontab auf Persistenz prüfen
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
Sofortmaßnahme — jetzt aktualisieren:
# Pi-hole aktualisieren (enthält FTL, Web und Core)
pihole -up
# Update verifizieren
pihole -v
# FTL-Version sollte >= 6.6 sein
Wenn Sie nicht sofort aktualisieren können:
pihole -a -pMaßnahmen nach dem Patch:
Kerem Oruç - Cybersicherheitsingenieur