
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
オプション: