Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-35517 — Pi-hole FTLDNS RCE(CVE-2026-35517)的检测脚本,通过换行注入实现漏洞利用,包含用于基于版本漏洞评估的 Python 扫描器和 Nmap NSE 脚本。 | Kitploit
工具/GitHubGitHub/keraattin/cve-2026-35517
漏洞扫描器漏洞利用信息收集Web安全网络安全渗透测试
GitHubkeraattin/cve-2026-35517

CVE-2026-35517

Pi-hole FTLDNS RCE(CVE-2026-35517)的检测脚本,通过换行注入实现漏洞利用,包含用于基于版本漏洞评估的 Python 扫描器和 Nmap NSE 脚本。

查看仓库
45个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

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

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

摘要

Pi-hole 的 FTLDNS 引擎(6.0 至 6.5 版本)中存在一个远程代码执行漏洞,允许已认证的攻击者通过向 dns.upstreams API 参数中嵌入换行符(\n)来注入任意的 dnsmasq 配置指令。由于 dnsmasq 支持可执行 shell 命令的指令,这种换行符注入可直接转化为在主机系统上执行任意命令。

这不仅仅是一个单一漏洞,而是一类影响五个不同配置参数的注入问题,全部已在 FTL v6.6 中一并修复。


目录

  • 快速概览
  • 什么是 Pi-hole FTLDNS?
  • 漏洞深入分析
    • 理解架构
    • 注入点
    • 从换行符到 Shell — 攻击链
    • 完整家族 — 五个注入向量
  • 影响分析
  • 受影响版本
  • 谁面临风险?
  • 检测
    • Python 扫描器
    • Nmap NSE 脚本
    • 手动版本检查
  • 入侵指标
  • 修复措施
  • 参考资料
  • 作者

快速概览


什么是 Pi-hole FTLDNS?

Pi-hole 是全球部署最广泛的 DNS 黑洞之一。它位于你的网络中,处理 DNS 查询,并在广告和追踪器到达浏览器之前就在 DNS 层面将其拦截。从公寓中的单个 Raspberry Pi 到保护数千台设备的企业级部署,Pi-hole 无处不在。

FTLDNS(超光速 DNS)是 Pi-hole 的核心引擎。它是围绕 dnsmasq(著名的 DNS 和 DHCP 服务器)构建的自定义分支/封装。FTLDNS 负责:

  • DNS 查询解析和缓存
  • DNS 层面拦截(Pi-hole 的核心功能)
  • DHCP 服务器功能
  • 查询日志和统计
  • Web 界面所交互的 API

关键细节在于:FTLDNS 通过其 API 根据用户提供的设置生成 dnsmasq 配置文件。如果你在 Pi-hole 管理面板中更改上游 DNS 服务器,FTLDNS 会将该值写入 dnsmasq 配置文件并重启服务。漏洞就存在于这个写入路径中。


漏洞深入分析

理解架构

root@kitploit:~
+------------------+            +------------------+               +------------------+
|   管理面板       |  API/Web   |  FTLDNS 引擎     | 配置写入      |    dnsmasq       |
|    (Web UI)      | ---------> |  (pihole-FTL)    | ------------> |   (DNS/DHCP)     |
+------------------+            +------------------+               +------------------+
                                        |                                   |
                                  读取设置,                        读取配置,
                                  写入配置文件                      向网络提供
                                  到磁盘                             DNS/DHCP 服务

当管理员通过 Pi-hole Web UI 或 API 更改上游 DNS 服务器时,流程如下:

  1. Web UI 向 FTLDNS API 发送包含新上游 DNS 值的请求
  2. FTLDNS 验证输入(或者说,未能正确验证输入)
  3. FTLDNS 将该值写入 dnsmasq 配置指令中
  4. dnsmasq 重启并读取新配置

注入点

dns.upstreams 参数旨在接受 DNS 服务器地址,如 8.8.8.8 或 1.1.1.1。FTLDNS 将这些地址以 server= 指令的形式写入 dnsmasq 配置:

root@kitploit:~
# 正常输入:"8.8.8.8"
# 生成:
server=8.8.8.8

问题在于:FTLDNS 未对输入中的换行符进行过滤。攻击者可以注入 \n 来跳出预期的 server= 指令,并注入全新的配置行:

root@kitploit:~
# 恶意输入:"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 的配置指令,该指令可以引用外部脚本;更重要的是,它还支持多个可在特定场景下执行命令的指令。利用链如下:

root@kitploit:~
步骤 1:攻击者认证到 Pi-hole
        (默认凭据、弱密码、CSRF、会话被劫持)

步骤 2:攻击者发送 API 请求更新 dns.upstreams:

        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)发现,相同的换行符注入模式影响了五个不同的 FTLDNS 配置参数。这是一个系统性问题——代码在各个方面都缺乏输入过滤:

这些参数中的每一个都会写入 dnsmasq 配置文件,且都未能过滤换行符。FTL v6.6 中的修复添加了适当的输入验证,在所有配置参数中拒绝换行符(及其他控制字符)。


影响分析

对 Pi-hole 主机的影响:

  • 以 FTLDNS 进程的权限(通常为 root 或 pihole 用户)执行任意命令
  • 由于 Pi-hole 通常运行在专用设备(Raspberry Pi)或特权容器上,这通常意味着 root 权限
  • 对主机文件系统的读写访问权限
  • 通过 cron 任务、SSH 密钥或修改系统文件实现持久化

对网络的影响(下游影响):

  • DNS 劫持 — 将所有 DNS 查询重定向到攻击者控制的服务器
  • DHCP 投毒 — 向所有 DHCP 客户端推送恶意 DNS、网关或 NTP 设置
  • 中间人定位 — 通过控制 DNS,攻击者可以重定向任何域名的流量
  • 凭据窃取 — 将认证端点重定向到钓鱼服务器
  • 恶意软件分发 — 重定向软件更新域名以提供恶意负载

风险放大因素:

  • Pi-hole 通常是网络上唯一的 DNS 服务器——攻陷它,你就控制了所有设备的名解析
  • 许多 Pi-hole 安装使用默认或弱管理员密码
  • Pi-hole 实例经常暴露给整个本地网络,而不仅仅是管理员
  • 针对 Pi-hole Web 界面的 CSRF 攻击可在无需直接认证的情况下触发利用

受影响版本

版本状态
FTLDNS 6.6+已修复
FTLDNS 6.0 – 6.5存在漏洞
FTLDNS 5.x 及更早版本不受影响(API 架构不同)

检查你的版本:

root@kitploit:~
pihole -v
# 或
pihole-FTL --version

谁面临风险?

高风险:

  • 可从不受信任的网络段访问的 Pi-hole 实例
  • 使用默认或弱管理员密码的部署
  • 暴露在互联网上的 Pi-hole(在 Shodan 上出奇地常见)
  • 多个用户访问同一网络的共享托管环境

中风险:

  • 位于网络分段良好、使用强密码的家庭网络中的 Pi-hole 实例
  • 部署在带有多因素认证的 VPN 之后

较低风险(但仍应修补):

  • 物理隔离或完全隔离的 Pi-hole 实例
  • 只读或禁用 API 的部署

检测

Python 扫描器

Python 脚本通过基于版本的分析来检测存在漏洞的 Pi-hole 实例。

工作原理:

  1. 指纹识别 — 通过管理界面指标(页面内容、响应头)识别 Pi-hole
  2. API 版本查询 — 查询 Pi-hole v5 和 v6 API 端点以获取 FTL 版本信息
  3. 版本比较 — 解析 FTL 版本字符串并检查是否在漏洞范围内(6.0 ≤ v < 6.6)
  4. 相关 CVE — 如果存在漏洞,标记所有五个相关的换行符注入公告

不会发送任何注入负载。该测试完全是只读且安全的。

用法:

root@kitploit:~
# 安装依赖
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

选项:

示例输出:

root@kitploit:~
╔══════════════════════════════════════════════════════════════╗
║  CVE-2026-35517 - Pi-hole FTLDNS RCE 检测器                  ║
║  dns.upstreams 中的换行符注入 → 命令执行                     ║
║  CVSS: 8.8(高危)| 影响版本:FTLDNS 6.0 - 6.5               ║
╚══════════════════════════════════════════════════════════════╝

[*] 正在扫描 192.168.1.1:80...

目标:192.168.1.1:80
============================================================
  [*] 检测到 Pi-hole
      管理界面:可访问
      API 可访问:是
      FTL 版本:     v6.4
      Core 版本:    v6.3
      Web 版本:     v6.4

  CVE-2026-35517 评估:
    [存在漏洞] FTLDNS 6.4 在漏洞范围内(6.0 - 6.5)。
    请立即升级到 FTL v6.6 或更高版本。

  相关漏洞(同样在 FTL v6.6 中修复):
    [-] GHSA-wxhv-w77q-6qwp:通过 dns.hostRecord 换行符注入实现 RCE
    [-] GHSA-28g5-gg88-wh5m:通过 dns.cnameRecords 换行符注入实现 RCE
    [-] GHSA-fqv2-qhfh-ghcj:通过 dhcp.leaseTime 换行符注入实现 RCE
    [-] GHSA-vfmq-jrx3-wv3c:通过 dhcp.hosts 换行符注入实现 RCE

  修复措施:
    1. 将 Pi-hole FTL 升级到 6.6 或更高版本
    2. 运行:pihole -up
    3. 使用以下命令验证:pihole -v
    4. 审查 API 访问控制和认证设置
    5. 检查日志中是否有利用迹象(异常的 DNS 配置更改)

Nmap NSE 脚本

root@kitploit:~
# 安装 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 输出:

root@kitploit:~
PORT   STATE SERVICE
80/tcp open  http
| CVE-2026-35517_PiHole_FTLDNS:
|   存在漏洞:
|   Pi-hole FTLDNS 通过上游 DNS 配置实现 RCE
|     状态:存在漏洞
|     ID:  CVE:CVE-2026-35517
|     风险因素:高(CVSS:8.8)
|     披露日期:2026-04-07
|     附加信息:
|       FTL 版本:v6.4
|       Core 版本:v6.3
|       Web 版本:v6.4
|       同样在 FTL v6.6 中修复的相关公告:
|         GHSA-wxhv-w77q-6qwp(dns.hostRecord 注入)
|         GHSA-28g5-gg88-wh5m(dns.cnameRecords 注入)
|         GHSA-fqv2-qhfh-ghcj(dhcp.leaseTime 注入)
|         GHSA-vfmq-jrx3-wv3c(dhcp.hosts 注入)
|       修复措施:升级到 Pi-hole FTL v6.6+(pihole -up)
|     参考:
|       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 访问权限:

root@kitploit:~
# 检查 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(含)之间,则存在漏洞。


入侵指标

需要关注的内容:

  • 异常的 dnsmasq 配置条目 — 检查 /etc/dnsmasq.d/ 和 /etc/pihole/ 中是否有意外指令
  • 上游 DNS 设置被修改 — 验证你配置的上游服务器是否未被更改
  • 意外的 API 调用 — 审查 Pi-hole 的查询日志和 API 访问日志中是否有配置更改请求
  • 异常的 DNS 行为 — 客户端将域名解析到意外 IP 地址
  • 新增的 cron 任务或 SSH 密钥 — 如果主机已通过命令执行被攻陷
  • 进程异常 — dnsmasq 或 pihole-FTL 派生了意外的子进程

调查命令:

root@kitploit:~
# 检查 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/

修复措施

立即行动 — 立即升级:

root@kitploit:~
# 更新 Pi-hole(包括 FTL、Web 和 Core)
pihole -up

# 验证更新
pihole -v
# FTL 版本应 >= 6.6

如果无法立即升级:

  1. 限制 API 访问 — 配置 Pi-hole 仅接受来自受信任 IP 的 API 连接
  2. 更改管理员密码 — 使用强且唯一的密码:pihole -a -p
  3. 网络隔离 — 确保 Pi-hole 管理界面只能从管理 VLAN 访问
  4. 禁用远程 API — 如果只使用本地 Web UI,将 API 限制为仅限 localhost

修补后操作:

  1. 审计 DNS 配置 — 检查所有 dnsmasq 配置文件中是否有注入指令
  2. 验证上游服务器 — 确认 DNS 上游设置正确
  3. 检查持久化 — 查找未经授权的 cron 任务、SSH 密钥或修改的系统文件
  4. 审查 DHCP 租约 — 如果 DHCP 由 Pi-hole 管理,验证租约配置
  5. 监控 DNS 行为 — 在接下来几天内关注异常的解析模式

参考资料

  • GitHub 安全公告 — GHSA-23w8-7333-p9fj (dns.upstreams)
  • GitHub 安全公告 — GHSA-wxhv-w77q-6qwp (dns.hostRecord)
  • GitHub 安全公告 — GHSA-28g5-gg88-wh5m (dns.cnameRecords)
  • GitHub 安全公告 — GHSA-fqv2-qhfh-ghcj (dhcp.leaseTime)
  • GitHub 安全公告 — GHSA-vfmq-jrx3-wv3c (dhcp.hosts)
  • Pi-hole FTL v6.6 发布说明

作者

Kerem Oruç - 网络安全工程师

  • GitHub:@keraattin
  • Twitter:@keraattin
下载工具
字段详情
CVE IDCVE-2026-35517
厂商Pi-hole 项目
产品FTLDNS (pihole-FTL)
受影响版本6.0 至 < 6.6
CVSS v3.18.8(高危)
CWECWE-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
公告参数控制内容
GHSA-23w8-7333-p9fjdns.upstreams上游 DNS 服务器
GHSA-wxhv-w77q-6qwpdns.hostRecord自定义 DNS 主机记录
GHSA-28g5-gg88-wh5mdns.cnameRecordsCNAME 记录映射
GHSA-fqv2-qhfh-ghcjdhcp.leaseTimeDHCP 租约时长
GHSA-vfmq-jrx3-wv3cdhcp.hosts静态 DHCP 主机分配
标志描述默认值
-t, --target目标 IP 或主机名—
-f, --file包含目标的文件,每行一个(支持 # 注释)—
-p, --port目标端口80
--https使用 HTTPS(如果端口为 80 则自动切换到 443)关闭
--timeout连接超时时间(秒)10
--json以 JSON 格式输出关闭
-o, --output将结果保存到文件—