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 通过换行注入实现的远程代码执行
"]
}
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, 命令执行, 检测脚本, 注入漏洞, 漏洞分析, 漏洞披露, 编程工具, 网络安全, 补丁, 认证绕过, 路径探测, 远程代码执行, 逆向工具, 配置注入, 防御措施, 隐私保护