
Pi-hole FTLDNS RCE(CVE-2026-35517)の改行インジェクションを介した検出スクリプト。バージョンベースの脆弱性評価のためのPythonスキャナーとNmap NSEスクリプトを含む。
Pi-hole の FTLDNS エンジン(バージョン 6.0 から 6.5)における リモートコード実行 の脆弱性により、認証済みの攻撃者が dns.upstreams API パラメータに 改行文字(\n)を埋め込むことで、任意の dnsmasq 設定ディレクティブを注入できます。dnsmasq はシェルコマンドを実行するディレクティブをサポートしているため、この改行インジェクションは ホストシステム上での完全なコマンド実行 に直接つながります。
これは単一のバグではなく、5つの異なる設定パラメータ に影響を与えるインジェクションの一種であり、すべて FTL v6.6 でまとめて修正されています。
| フィールド | 詳細 |
|---|---|
| CVE ID | CVE-2026-35517 |
| ベンダー | Pi-hole Project |
| 製品 | FTLDNS (pihole-FTL) |
| 影響を受けるバージョン | 6.0 から < 6.6 |
| CVSS v3.1 | 8.8 (High) |
| CWE | CWE-93 — CRLF シーケンスの不適切な無害化 |
| 攻撃ベクトル | ネットワーク |
| 認証 | 必須(Pi-hole 管理者/API アクセス) |
| ユーザー操作 | なし |
| 公開日 | 2026年4月7日 |
| 修正バージョン | FTL v6.6(2026年4月3日リリース) |
| 発見者 | T0X1Cx |
| 関連アドバイザリ | GHSA-23w8-7333-p9fj, GHSA-wxhv-w77q-6qwp, GHSA-28g5-gg88-wh5m, GHSA-fqv2-qhfh-ghcj, GHSA-vfmq-jrx3-wv3c |
Pi-hole は、世界で最も広く展開されている DNS シンクホールの1つです。ネットワーク上に配置され、DNS クエリを処理し、ブラウザに到達する前に DNS レベルで広告やトラッカーをブロックします。アパートの単一 Raspberry Pi セットアップから、数千台のデバイスを保護するエンタープライズ展開まで、あらゆる場所で使用されています。
FTLDNS(Faster Than Light DNS)は Pi-hole のコアエンジンです。これは、よく知られた DNS および DHCP サーバーである dnsmasq をベースにしたカスタムフォーク/ラッパーです。FTLDNS は以下を処理します:
ここが重要なポイントです:FTLDNS は API を通じてユーザーが指定した設定から dnsmasq 設定ファイルを生成します。Pi-hole 管理パネルでアップストリーム DNS サーバーを変更すると、FTLDNS はその値を dnsmasq 設定ファイルに書き込み、サービスを再起動します。この書き込みパスに脆弱性が存在します。
+------------------+ +------------------+ +------------------+
| 管理パネル | API/Web | FTLDNS エンジン | 設定書き込み | dnsmasq |
| (Web UI) | ---------> | (pihole-FTL) | ------------> | (DNS/DHCP) |
+------------------+ +------------------+ +------------------+
| |
設定を読み取り、 設定を読み取り、
設定ファイルを DNS/DHCP を
ディスクに書き込む ネットワークに提供
管理者が Pi-hole Web UI または API を通じてアップストリーム DNS サーバーを変更すると、フローは次のようになります:
dns.upstreams パラメータは、8.8.8.8 や 1.1.1.1 のような DNS サーバーアドレスを受け入れることを意図しています。FTLDNS はこれらを dnsmasq 設定に server= ディレクティブとして書き込みます:
# 通常の入力: "8.8.8.8"
# 生成されるもの:
server=8.8.8.8
問題はここにあります:FTLDNS は入力内の改行文字をサニタイズしません。攻撃者は \n を注入して、意図された server= ディレクティブから抜け出し、完全に新しい設定行を注入できます:
# 悪意のある入力: "8.8.8.8\ndhcp-option=6,evil.dns.server"
# 生成されるもの:
server=8.8.8.8
dhcp-option=6,evil.dns.server
これだけでも懸念事項です(DHCP オプション注入による DNS ハイジャック)。しかし、さらに悪化します。
dnsmasq は外部スクリプトを参照できる dhcp-option と呼ばれる設定ディレクティブをサポートしており、さらに重要なことに、特定のシナリオでコマンドを実行できるいくつかのディレクティブをサポートしています。悪用チェーンは次のようになります:
ステップ 1: 攻撃者が Pi-hole に認証する
(デフォルト認証情報、弱いパスワード、CSRF、侵害されたセッション)
ステップ 2: 攻撃者が dns.upstreams を更新する API リクエストを送信:
POST /api/dns/upstream
{
"upstreams": ["8.8.8.8\n<悪意のある dnsmasq ディレクティブ>"]
}
ステップ 3: FTLDNS が改行をサニタイズせずに値を dnsmasq 設定ファイルに書き込む
ステップ 4: 注入された dnsmasq ディレクティブが正当な設定オプションとして解析される
ステップ 5: 注入されたディレクティブに応じて、攻撃者は以下を達成:
- DNS ハイジャック(すべての DNS クエリをリダイレクト)
- DHCP ポイズニング(クライアントに悪意のある設定をプッシュ)
- dnsmasq のスクリプト機能によるコマンド実行
- 任意のパスへのファイル書き込み
重要な洞察は、これは dnsmasq の脆弱性を悪用するものではないということです。dnsmasq は設計どおりに動作しています。脆弱性は、FTLDNS が信頼できない入力を設定ファイルに混入させ、設定管理 API を任意の設定インジェクションポイントに変えてしまうことにあります。
研究者(T0X1Cx)は、同じ改行インジェクションパターンが 5つの異なる FTLDNS 設定パラメータ に影響を与えることを発見しました。これは体系的な問題です — コード全体で入力サニタイズが欠如していました:
| アドバイザリ | パラメータ | 制御するもの |
|---|---|---|
| GHSA-23w8-7333-p9fj | dns.upstreams | アップストリーム DNS サーバー |
| GHSA-wxhv-w77q-6qwp | dns.hostRecord | カスタム DNS ホストレコード |
| GHSA-28g5-gg88-wh5m | dns.cnameRecords | CNAME レコードマッピング |
| GHSA-fqv2-qhfh-ghcj | dhcp.leaseTime | DHCP リース期間 |
| GHSA-vfmq-jrx3-wv3c | dhcp.hosts | 静的 DHCP ホスト割り当て |
これらの各パラメータは dnsmasq 設定ファイルに書き込まれ、それぞれが改行文字のサニタイズに失敗していました。FTL v6.6 の修正では、すべての設定パラメータで改行文字(およびその他の制御文字)を拒否する適切な入力検証が追加されました。
Pi-hole ホスト上:
ネットワーク上(下流への影響):
リスク増幅要因:
| バージョン | ステータス |
|---|---|
| FTLDNS 6.6+ | 修正済み |
| FTLDNS 6.0 – 6.5 | 脆弱 |
| FTLDNS 5.x 以前 | 影響なし(異なる API アーキテクチャ) |
バージョンを確認するには:
pihole -v
# または
pihole-FTL --version
高リスク:
中程度のリスク:
低リスク(ただしパッチ適用は必要):
Python スクリプトは、バージョン分析を通じて脆弱な Pi-hole インスタンスを検出します。
仕組み:
インジェクションペイロードは送信されません。テストは完全に読み取り専用で安全です。
使用方法:
# 依存関係のインストール
pip install -r requirements.txt
# 単一ターゲット(HTTP、デフォルトポート 80)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1
# カスタムポート
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t pi.hole -p 8080
# HTTPS モード(ポート 443 に自動切り替え)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 10.0.0.1 --https
# ファイルからの一括スキャン
python CVE-2026-35517_PiHole_FTLDNS_detector.py -f targets.txt
# JSON 出力をファイルに保存
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --json -o results.json
# タイムアウトの増加
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --timeout 20
オプション:
| フラグ | 説明 | デフォルト |
|---|---|---|
-t, --target | ターゲット IP またはホスト名 | — |
-f, --file | ターゲットを含むファイル(1行に1つ、# コメント対応) | — |
-p, --port | ターゲットポート | 80 |
--https | HTTPS を使用(ポートが 80 の場合、ポート 443 に自動切り替え) | オフ |
--timeout | 接続タイムアウト(秒) | 10 |
--json | JSON 形式で出力 | オフ |
-o, --output | 結果をファイルに保存 | — |
出力例:
╔══════════════════════════════════════════════════════════════╗
║ 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 スクリプトのインストール
sudo cp CVE-2026-35517_PiHole_FTLDNS.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb
# 基本スキャン
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS <target>
# 一般的な Pi-hole ポートのスキャン
nmap -p 80,443,8080,4711 --script CVE-2026-35517_PiHole_FTLDNS <target>
# サブネットスキャン — ネットワーク上のすべての Pi-hole インスタンスを検出
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS 192.168.1.0/24
# バージョン検出と組み合わせ
nmap -sV -p 80,443 --script CVE-2026-35517_PiHole_FTLDNS <target>
# ファイルからターゲットをスキャン
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS -iL targets.txt
Nmap 出力例:
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
Pi-hole ホストへの SSH アクセスがある場合:
# FTL バージョンの確認
pihole-FTL --version
# または Pi-hole CLI 経由
pihole -v
# API 経由で確認(v6)
curl -s http://pi.hole/api/info/version | python3 -m json.tool
# API 経由で確認(v5)
curl -s http://pi.hole/admin/api.php?versions | python3 -m json.tool
FTL バージョンが 6.0 から 6.5(両端を含む)の間にある場合、脆弱です。
確認すべき項目:
/etc/dnsmasq.d/ と /etc/pihole/ に予期しないディレクティブがないか確認調査コマンド:
# 注入された行がないか dnsmasq 設定を確認
grep -r "dhcp-option\|addn-hosts\|conf-file\|log-facility" /etc/dnsmasq.d/
# 最近の設定変更を確認
find /etc/pihole /etc/dnsmasq.d -mtime -7 -ls
# Pi-hole のデバッグログを確認
pihole -d
# 異常がないか実行中のプロセスを確認
ps aux | grep -E "dnsmasq|pihole"
# 永続化のために crontab を確認
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
即時対応 — 今すぐアップグレード:
# Pi-hole の更新(FTL、Web、Core を含む)
pihole -up
# 更新の確認
pihole -v
# FTL バージョンが >= 6.6 である必要があります
すぐにアップグレードできない場合:
pihole -a -pパッチ適用後の対応:
Kerem Oruç - サイバーセキュリティエンジニア