keraattin/CVE-2026-35517

GitHub: keraattin/CVE-2026-35517

披露 Pi-hole FTLDNS 换行注入漏洞(CVE-2026-35517)并提供对应的检测与修复方案。

Stars: 0 | Forks: 0

# CVE-2026-35517 - Pi-hole FTLDNS 通过换行注入实现的远程代码执行

CVE-2026-35517 CVSS 8.8 CWE-93 FTLDNS 6.0-6.5

## TL;DR Pi-hole 的 FTLDNS 引擎(版本 6.0 至 6.5)中存在**远程代码执行**漏洞。攻击者可通过在 `dns.upstreams` API 参数中嵌入**换行字符**(`\n`)注入任意 dnsmasq 配置指令。由于 dnsmasq 支持执行 shell 命令的指令,因此此类换行注入可直接导致**在目标主机上完全执行命令**。 这不仅是一个单一漏洞,而是一类注入问题,影响**五个不同的配置参数**,已在 FTL v6.6 中统一修复。 ## 目录 - [快速要点](#quick-facts) - [什么是 Pi-hole FTLDNS?](#what-is-pi-hole-ftldns) - [漏洞深度分析](#vulnerability-deep-dive) - [理解架构](#understanding-the-architecture) - [注入点](#the-injection-point) - [从换行到 Shell — 攻击链](#from-newline-to-shell--the-kill-chain) - [完整的家族 — 五个注入向量](#the-full-family--five-injection-vectors) - [影响分析](#impact-analysis) - [受影响版本](#affected-versions) - [谁处于风险中?](#who-is-at-risk) - [检测](#detection) - [Python 扫描器](#python-scanner) - [Nmap NSE 脚本](#nmap-nse-script) - [手动版本检查](#manual-version-check) - [入侵指标](#indicators-of-compromise) - [缓解措施](#remediation) - [参考](#references) - [作者](#author) ## 快速要点 | 字段 | 说明 | |------|------| | **CVE ID** | CVE-2026-35517 | | **厂商** | Pi-hole 项目 | | **产品** | FTLDNS(pihole-FTL) | | **受影响版本** | 6.0 到 < 6.6 | | **CVSS v3.1** | 8.8(高危) | | **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 FTLDNS? Pi-hole 是全球部署最广泛的 DNS 缓存服务器之一。它在网络中拦截 DNS 查询,并在流量到达浏览器之前在 DNS 层屏蔽广告与追踪器。它被用于从树莓派到企业级设备的各种场景。 **FTLDNS**(比光还快的 DNS)是 Pi-hole 的核心引擎。它是一个基于 `dnsmasq` 的定制分支/封装。FTLDNS 负责: - DNS 查询解析与缓存 - DNS 层屏蔽(Pi-hole 的核心功能) - DHCP 服务器功能 - 查询日志与统计 - 与 Web 界面通信的 API 关键细节是:**FTLDNS 从用户提供的设置生成 dnsmasq 配置文件**。当你在 Pi-hole 管理面板中修改上游 DNS 服务器时,FTLDNS 会将该值写入 dnsmasq 配置并重启服务。该写入路径正是漏洞所在。 ## 漏洞深度分析 ### 理解架构 ``` +------------------+ +------------------+ +------------------+ | Admin Panel | API/Web | FTLDNS Engine | Config Write | dnsmasq | | (Web UI) | ---------> | (pihole-FTL) | ------------> | (DNS/DHCP) | +------------------+ +------------------+ +------------------+ | | Reads settings, Reads config, writes to config serves DNS/DHCP files on disk to network ``` 当管理员通过 Pi-hole 网页界面或 API 更改上游 DNS 服务器时,流程如下: 1. 网页界面向 FTLDNS API 发送包含新上游 DNS 值的请求 2. FTLDNS 对输入进行验证(或未能正确验证) 3. FTLDNS 将值写入 dnsmasq 配置指令 4. 重启 dnsmasq 并读取新配置 ### 注入点 `dns.upstreams` 参数本应接受 DNS 服务器地址,如 `8.8.8.8` 或 `1.1.1.1`。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 劫持)。但情况更糟。 ### 从换行到 Shell — 攻击链 dnsmasq 支持名为 `dhcp-option` 的配置指令,该指令可引用外部脚本,更重要的是,它支持在特定场景下执行命令的多种指令。攻击链如下: ``` Step 1: Attacker authenticates to Pi-hole (default creds, weak password, CSRF, compromised session) Step 2: Attacker sends API request to update dns.upstreams: POST /api/dns/upstream { "upstreams": ["8.8.8.8\n"] } Step 3: FTLDNS writes the value to the dnsmasq config file without sanitizing the newline Step 4: The injected dnsmasq directive is parsed as a legitimate configuration option Step 5: Depending on the directive injected, the attacker achieves: - DNS hijacking (redirect all DNS queries) - DHCP poisoning (push malicious configs to clients) - Command execution via dnsmasq's scripting capabilities - File write to arbitrary paths ``` 关键在于:**这不是利用 dnsmasq 漏洞,而是 dnsmasq 按设计工作**。漏洞在于 FTLDNS 允许不受信任的输入渗入配置文件,将配置管理 API 变成了任意配置注入点。 ### 完整的家族 — 五个注入向量 同一换行注入模式影响**五个不同的 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 进程权限(通常为 root 或 pihole 用户)执行完整命令 - 由于 Pi-hole 常运行在专用设备(树莓派)或特权容器中,这通常意味着 root 权限 - 对主机文件系统的读写访问 - 通过 cron 作业、SSH 密钥或修改系统文件实现持久化 **对网络(下游影响):** - DNS 劫持 — 将所有 DNS 查询重定向至攻击者控制的服务器 - DHCP 中毒 — 向所有 DHCP 客户端推送恶意 DNS、网关或 NTP 设置 - 中间人定位 — 通过控制 DNS,攻击者可重定向任意域名的流量 - 凭证窃取 — 将认证端点重定向至钓鱼服务器 - 恶意软件分发 — 将软件更新域名重定向至恶意载荷 **风险放大因素:** - Pi-hole 往往是**网络中唯一的 DNS 服务器**,一旦被控制,所有设备的名称解析都将由攻击者掌控 - 许多 Pi-hole 使用**默认或弱管理员密码** - Pi-hole 实例常**直接暴露于整个局域网**,而非仅限管理员访问 - 针对 Pi-hole 网页界面的 CSRF 攻击可在无需直接认证的情况下触发利用 ## 受影响版本 | 版本 | 状态 | |------|------| | FTLDNS 6.6+ | **已修复** | | FTLDNS 6.0 – 6.5 | **易受攻击** | | FTLDNS 5.x 及更早版本 | 未受影响(API 架构不同) | 版本的方法: ``` pihole -v # 或 pihole-FTL --version ``` ## 谁处于风险中? **高风险:** - 可从不受信任网络段访问的 Pi-hole 实例 - 使用默认或弱管理员密码的部署 - 暴露于互联网的 Pi-hole(在 Shodan 上并不少见) - 多用户共享的网络托管环境 **中等风险:** - 隔离良好、密码强健的家庭网络中的 Pi-hole 实例 - 通过 VPN 部署并启用多因素认证 **较低风险(但仍需修复):** - 物理隔离或完全禁用了 API 的 Pi-hole 实例 - 只读或禁用 API 的部署 ## 检测 ### Python 扫描器 该 Python 脚本通过基于版本的分析检测易受攻击的 Pi-hole 实例。 **工作原理:** 1. **指纹识别** — 通过管理界面标识(页面内容、HTTP 头)识别 Pi-hole 2. **API 版本查询** — 同时查询 Pi-hole v5 与 v6 API 端点获取 FTL 版本信息 3. **版本比对** — 解析 FTL 版本字符串并检查是否在易受攻击范围(6.0 ≤ v < 6.6)内 4. **相关 CVE** — 若易受攻击,则标记全部五个换行注入相关通告 不发送任何注入载荷。测试完全只读且安全。 **用法:** ``` # 安装依赖 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` | 目标列表文件,每行一个(支持 `#` 注释) | — | | `-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) ``` ### Nmap NSE 脚本 ``` # 安装 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 # 扫描常见 Pi-hole 端口 nmap -p 80,443,8080,4711 --script CVE-2026-35517_PiHole_FTLDNS # 子网扫描 — 在网络中查找所有 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 # 从文件扫描目标 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 ``` ### 手动版本检查 若可通过 SSH 访问 Pi-hole 主机: ``` # 检查 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(含)之间,则表示易受攻击。 ## 入侵指标(IOCs) **需要观察的内容:** - **异常的 dnsmasq 配置条目** — 检查 `/etc/dnsmasq.d/` 和 `/etc/pihole/` 是否存在意外指令 - **修改过的上游 DNS 设置** — 确认配置的 DNS 上游服务器未被更改 - **异常的 API 调用** — 检查 Pi-hole 查询日志与 API 访问日志中是否存在配置变更请求 - **异常的 DNS 行为** — 客户端解析域名得到意外 IP 地址 - **新的 cron 作业或 SSH 密钥** — 若主机已被命令执行渗透 - **进程异常** — dnsmasq 或 pihole-FTL 生成的意外子进程 **排查命令:** ``` # 检查 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 和核心) pihole -up # 验证更新 pihole -v # FTL 版本应 >= 6.6 ``` **若无法立即升级:** 1. **限制 API 访问** — 配置 Pi-hole 仅接受来自可信 IP 的 API 连接 2. **修改管理员密码** — 使用强且唯一的密码:`pihole -a -p` 3. **网络隔离** — 确保 Pi-hole 管理界面仅可从管理 VLAN 访问 4. **禁用远程 API** — 若仅使用本地 Web 界面,请限制 API 仅监听本地主机 **修复后操作:** 5. **审计 DNS 配置** — 检查所有 dnsmasq 配置文件是否存在注入指令 6. **验证上游服务器** — 确认 DNS 上游设置正确 7. **检查持久化** — 查找未经授权的 cron 作业、SSH 密钥或修改的系统文件 8. **审核 DHCP 租约** — 若 Pi-hole 管理 DHCP,验证租约配置 9. **监控 DNS 行为** — 观察接下来几天是否存在异常解析行为 ## 参考 - [GitHub 安全通告 — GHSA-23w8-7333-p9fj(dns.upstreams)](https://github.com/pi-hole/FTL/security/advisories/GHSA-23w8-7333-p9fj) - [GitHub 安全通告 — GHSA-wxhv-w77q-6qwp(dns.hostRecord)](https://github.com/pi-hole/FTL/security/advisories/GHSA-wxhv-w77q-6qwp) - [GitHub 安全通告 — GHSA-28g5-gg88-wh5m(dns.cnameRecords)](https://github.com/pi-hole/FTL/security/advisories/GHSA-28g5-gg88-wh5m) - [GitHub 安全通告 — GHSA-fqv2-qhfh-ghcj(dhcp.leaseTime)](https://github.com/pi-hole/FTL/security/advisories/GHSA-fqv2-qhfh-ghcj) - [GitHub 安全通告 — GHSA-vfmq-jrx3-wv3c(dhcp.hosts)](https://github.com/pi-hole/FTL/security/advisories/GHSA-vfmq-jrx3-wv3c) - [Pi-hole FTL v6.6 发行说明](https://pi-hole.net/blog/2026/04/03/pi-hole-ftl-v6-6-web-v6-5-and-core-v6-4-1-released/) ## 作者 **Kerem Oruç** — 网络安全工程师 - GitHub:[@keraattin](https://github.com/keraattin) - Twitter:[@keraattin](https://twitter.com/keraattin)
标签:API参数注入, CVE-2026-35517, CVSS 8.8, CWE-93, dnsmasq, dns.upstreams, FTLDNS, FTL v6.6, Newline Injection, Nmap NSE, Pi-hole, Python扫描器, RCE, 命令执行, 检测脚本, 注入漏洞, 漏洞分析, 漏洞披露, 编程工具, 网络安全, 补丁, 认证绕过, 路径探测, 远程代码执行, 逆向工具, 配置注入, 防御措施, 隐私保护