CVE-2026-93741 (TOTOLINK A3002MU 버퍼 오버플로우) 분석
분류: CVE · 임베디드·네트워크장비 · 버퍼 오버플로우 · CVE-2026-93741 · [표준]
무인증 원격 요청 하나가 TOTOLINK A3002MU 라우터의 웹 관리 인터페이스(Boa 서비스)를 응답 불능으로 만듭니다. 무선 WDS 설정 핸들러가 사용자 입력 길이를 확인하지 않고 고정 크기 버퍼로 복사하면서 생긴 고전적 경계 위반입니다. CVSS는 v3.1 기준 최고 등급 10.0으로 매겨졌지만 연구자 원 PoC에서 실증된 것은 서비스 마비(DoS)까지이며, 그 간극이 이 글의 논점입니다.
무인증 원격 요청 하나가 소형 라우터의 웹 관리 인터페이스를 응답 불능으로 만듭니다. TOTOLINK A3002MU 펌웨어의 무선 설정 처리 함수가 사용자 입력 길이를 확인하지 않고 고정 크기 버퍼로 복사하면서 생긴 고전적인 경계 위반입니다. 점수는 CVSS v3.1 기준 최고 등급(10.0)으로 매겨졌지만, 연구자 원 PoC에서 실제로 실증된 것은 웹 관리 서비스 마비(DoS)까지입니다. 이 간극 자체가 이 글의 논점입니다.
소형 라우터·NAS·IP 카메라 같은 소비자용 임베디드 장비에서는 같은 종류의 버그가 되풀이되는 것이 드물지 않습니다. 원인은 대개 하나입니다. HTTP 폼 파라미터를 신뢰할 수 없는 입력으로 다루지 않고, 크기를 재지 않은 채 고정 크기 버퍼에 그대로 밀어 넣는 것입니다. CVE-2026-93741은 그 교과서 같은 사례입니다. 특정 장비의 한 함수를 넘어, “왜 이 부류가 사라지지 않는가”를 짚어 두는 편이 오래 남습니다.
01 · 개요 (30초)
- 대상: TOTOLINK A3002MU 라우터, 펌웨어 버전
Hh-B20211125.1046. - 위치: 웹 관리 서버 바이너리(
/bin/boa)의formWlWds함수, HTTP 엔드포인트POST /boafrm/formWlWds. - 원인:
submit-url파라미터의 사용자 입력을 길이 검증 없이 고정 크기 버퍼로 복사하면서 발생하는 버퍼 오버플로우. - 선행조건: CVE/VulDB 레코드 기준 인증 불필요(pre-auth,
PR:N), 원격에서 공격 가능. 다만 연구자 PoC 요청에는sessionCheck값이 포함돼 있어, 무인증 성립 여부는 출처에 따라 다르게 읽힐 여지가 있습니다. - 실증된 영향: 연구자 원 PoC 기준 웹 서버 크래시(서비스 거부). 임의 코드 실행(ACE)은 가능성만 언급되었을 뿐 원 PoC에서 미실증입니다. 다만 공식 CVE 레코드는 기술적 영향을
total(전면)로, VulDB는 기밀성·무결성·가용성 훼손으로 기재합니다 — 원 PoC의 실증 범위와 레코드상 영향 등급이 서로 다릅니다. - CVSS v3.1: 10.0 (
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H). CVSS v4.0 점수는 출처마다 다릅니다 — 공식 CVE CNA(VulDB) 레코드는 baseScore 10.0, Strix는 9.3으로 표기해 서로 불일치합니다. - CWE: CVE 레코드에는 CWE-119(버퍼 경계 내 연산 부적절 제한)와 CWE-120(크기 확인 없는 버퍼 복사)이 함께 등재돼 있습니다. 발행 CNA(VulDB) 공개 페이지는 CWE-120을 confirmed로 강조하는 등 출처별 표기 차이가 있습니다.
- 수정 버전: 공개 범위에서 확인되지 않았습니다. ⚠️미확인(팩트체크 대상) — “패치 미확인”으로 취급합니다.
한 줄 요약: 무인증 원격 공격자가 무선 WDS 설정 폼의 한 필드를 과도하게 길게 보내면 라우터 웹 서버가 넘어집니다. 코드 실행 가능성은 이론에 머뭅니다.
02 · 기술 배경
TOTOLINK A3002MU는 가정·소규모 사무실용 무선 라우터입니다. 웹 관리 화면은 장비 안에서 동작하는 소형 HTTP 서버가 그립니다. 연구 재료에 따르면 이 서버는 boa 계열 경량 웹서버를 벤더가 커스터마이즈한 바이너리(/bin/boa)입니다.
이런 임베디드 웹서버는 관리 페이지의 각 폼을 처리하는 핸들러 함수를 이름 규칙으로 갖습니다. 여기서 문제가 된 formWlWds는 무선 WDS(Wireless Distribution System, 무선 브리지/중계 확장) 설정을 처리하는 핸들러로 보입니다. 브라우저가 설정 폼을 제출하면 /boafrm/formWlWds 경로로 요청이 오고, 핸들러가 폼 파라미터를 하나씩 꺼내 내부 설정에 반영합니다.
핵심 개념은 하나입니다. C로 작성된 이런 핸들러는 파라미터 값을 고정 크기 버퍼에 복사해서 다룹니다. 복사 전에 입력 길이가 버퍼보다 큰지 확인하지 않으면, 넘치는 바이트가 버퍼 경계를 넘어 인접한 메모리를 덮어씁니다. 이 버퍼가 스택에 잡혀 있으면 저장된 레지스터·복귀 주소 같은 인접 스택 영역이 훼손되고(고전적인 스택 버퍼 오버플로우), 힙에 잡혀 있으면 인접 힙 구조가 훼손됩니다. 이 CVE에서 해당 버퍼가 어느 영역에 놓이는지는 뒤에서 보듯 공개 범위에서 확정되지 않았습니다.
03 · CVE 분석 요약
연구 재료에 따르면 취약점은 formWlWds가 submit-url 파라미터 값을 받아 길이를 재지 않고 고정 크기 버퍼로 복사하는 지점에서 발생합니다. 폐쇄형(proprietary) 펌웨어라 공개된 소스 저장소나 패치 커밋이 없고, 취약 로직은 스트립된 바이너리 안에만 있어 IDA Pro 같은 도구로 정적 리버싱해야 확인됩니다. 따라서 아래는 벤더 원본 소스가 아니라, 이 부류의 결함을 이해하기 위한 개념 재구성입니다.
// 개념용 단순화, 실제 페이로드/원본 코드 아님.
// 폐쇄형 펌웨어라 벤더 소스는 공개되지 않았습니다 — 이 부류의 결함을 설명하기 위한 재구성입니다.
void formWlWds_handler(request_t *req) {
char url_buf[64]; // 고정 크기 버퍼
const char *value = get_param(req, "submit-url"); // 사용자 입력, 길이 무제한
strcpy(url_buf, value); // ← 길이 검증 없는 복사 = 경계 위반
// ... url_buf 를 이후 설정 로직에서 사용 ...
}
문제의 본질은 입력의 출처와 크기를 신뢰한 것입니다. submit-url은 네트워크 너머의 누구든 채워 보낼 수 있는 값인데, 핸들러는 그 값이 버퍼에 들어갈 만큼 작다고 가정합니다. 공격자가 버퍼 용량보다 긴 문자열을 보내면 복사가 경계를 넘고, 인접 메모리가 훼손되면서 웹 서버(boa) 프로세스가 정상 동작을 잃고 응답 불능에 빠집니다.
스택 오버플로우인지 힙 오버플로우인지는 재료가 “스택으로 추정”이라고만 밝혔으므로 ⚠️미확인(팩트체크 대상) 으로 둡니다. 마찬가지로 CVSS가 기밀성·무결성·가용성 완전 훼손(C:H/I:H/A:H)으로 매겨진 것과 달리, 연구자 원 PoC에서 실증된 것은 가용성 훼손(DoS)에 머뭅니다. 코드 실행으로 이어지는지는 확인되지 않았습니다.
04 · 공격 시나리오 · 영향도 + 대응방안
공격 시나리오 (개념 수준):
- 공격자가 대상 라우터의 웹 관리 포트에 네트워크로 접근합니다(인증 불필요).
/boafrm/formWlWds로 POST 요청을 보내되,submit-url필드에 버퍼 용량을 넘기는 과도하게 긴 값을 채웁니다.- 핸들러가 그 값을 고정 버퍼로 복사하며 경계를 넘고, 인접 메모리가 훼손됩니다.
- 웹 서버(
boa) 서비스가 응답 불능에 빠지며 관리 인터페이스가 마비됩니다.
작동하는 완성형 익스플로잇·페이로드는 이 글에 싣지 않습니다(랩 공개 윤리). 위 흐름은 원리 설명용입니다.
영향도:
- 확인된 영향: 웹 관리 서버의 서비스 거부(크래시). 관리 기능이 일시 마비됩니다.
- 이론적 영향: 임의 코드 실행 가능성이 거론되나 공개 범위에서 실증되지 않았습니다. 임베디드 장비 특성상 완화 장치(스택 카나리·ASLR·비실행 스택)가 부실하면 코드 실행으로 확대될 여지는 있으나, 이 장비에서 그것이 성립하는지는 ⚠️미확인(팩트체크 대상) 입니다.
- CVSS 10.0을 “완전 장악이 실증됐다”는 뜻으로 읽으면 안 됩니다. 점수는 잠재 심각도의 상한이고, 공개 증거는 그보다 좁습니다.
대응방안:
- 근본 (안전 버전): 벤더가 수정 펌웨어를 배포했다면 최신 버전으로 업데이트합니다. 다만 이 CVE의 수정 버전은 공개 범위에서 확인되지 않았습니다(⚠️미확인). 수정 펌웨어의 존재가 확인되기 전까지는 아래 차선책을 우선 적용하십시오.
- 차선 (업데이트 불가 시):
- 웹 관리 인터페이스를 인터넷(WAN)에 노출하지 않습니다. 원격 관리 기능을 끄고, 관리 접근을 신뢰된 내부 네트워크로 제한합니다.
- 네트워크 앞단에서
/boafrm/formWlWds경로로 향하는 외부 요청을 차단하고, 관리 포트 접근을 출발지 기준으로 제한합니다. - 지원이 끊긴 노후 장비라면 교체를 검토합니다. 이 부류의 결함은 한 함수만의 문제가 아닐 가능성이 높습니다.
- 탐지 관점: 관리 엔드포인트로 오는 비정상적으로 긴 폼 파라미터, 그리고 웹 서버 프로세스의 반복 재시작·크래시 로그를 모니터링합니다. 짧은 시간 안에 관리 인터페이스가 반복적으로 응답 불능이 되면 이 유형의 공격을 의심할 근거가 됩니다.
05 · 왜 이 부류는 반복되는가 (논평)
이 버그는 새로운 것이 아니라 오래된 계열의 최신 개체입니다. TOTOLINK를 비롯한 소비자용 임베디드 장비에서 formXXX 계열 핸들러의 파라미터 처리 오버플로우는 반복적으로 보고되어 온 유형입니다. 뿌리는 같습니다. 네트워크에서 온 문자열을 크기 검증 없이 고정 크기 버퍼로 복사하는 것입니다.
이는 우리가 다른 자리에서 본 문제와 한 가족입니다. 서버 애플리케이션의 입력 검증 누락, 파서가 신뢰 경계를 잘못 그어 생기는 결함, 그리고 “이 값은 이 정도 크기겠지”라는 암묵적 가정이 무너지는 순간들. 언어와 계층은 달라도 실패의 형태는 동일합니다. 입력의 출처와 크기를 신뢰한 것입니다. 안전한 길이 제한 복사 함수를 쓰거나 복사 전 길이를 명시적으로 검사하는 것만으로도 이 계열의 상당수를 막을 수 있습니다. 다만 경계 검사가 전부는 아닙니다. 인코딩·파싱·NUL 종료·후속 처리에 남은 결함은 별도로 다뤄야 합니다.
임베디드에서 이런 결함이 반복되는 배경으로는 흔히 구조적 요인들이 지목됩니다. C로 짠 단일 프로세스 웹서버, 상대적으로 제한적인 메모리 보호, 긴 펌웨어 교체 주기 같은 것들입니다. 이는 이 장비나 이 CVE에 대해 확인된 원인 분석이 아니라 이 부류 전반에 대한 일반적 관찰이며, 관리 폼 파라미터마다 같은 패턴의 공격 표면이 흩어지기 쉽다는 점을 짚는 것입니다. 하나를 고쳐도 옆 함수에 같은 패턴이 남아 있기 쉽습니다.
CVSS 10.0과 실증된 DoS 사이의 간극도 짚어 둘 만합니다. 점수 체계는 잠재 심각도를 보수적으로 상향 평가합니다. 방어자는 그 상한을 무시해서도, 실증 없이 “완전 장악”으로 단정해서도 안 됩니다. 정확한 태도는 “코드 실행이 실증되지 않았으니 안전”이 아니라, “실증은 DoS까지지만 근본 결함이 심각하므로 노출부터 줄인다”입니다.
06 · 결론
CVE-2026-93741은 소형 라우터 웹서버가 무인증 원격 입력을 크기 검증 없이 고정 크기 버퍼로 복사해 생긴 버퍼 오버플로우입니다. 공개된 증거로 확인되는 영향은 웹 관리 서버의 서비스 거부이고, 코드 실행은 이론에 머뭅니다. 수정 버전은 공개 범위에서 확인되지 않았으므로, 관리 인터페이스를 인터넷에 노출하지 않는 것이 지금 할 수 있는 가장 확실한 방어입니다.
이 한 함수는 언젠가 패치되겠지만, “네트워크 입력의 크기를 믿는” 사고방식은 다른 함수, 다른 장비에서 또 나타납니다. 그래서 우리는 개별 익스플로잇이 아니라 되풀이되는 실패의 형태를 기록으로 남깁니다.
07 · References / 참고자료
- [이 글이 재구성한 원 분석] SunnyYANGyaya, “bof-formWlWds” (연구자 writeup, IDA Pro 정적 리버싱 기반) — 취약 함수·엔드포인트·파라미터와 근본 원인의 1차 서술. https://github.com/SunnyYANGyaya/cuicuishark-sheep-fishIOT/blob/main/ToTolink/A3002MU/bof-formWlWds.md
- NVD, “CVE-2026-93741” — 2차 취약점 집계·분석 데이터베이스(영향 제품·요약). 발행 주체는 CNA인 VulDB이며, NVD는 이를 집계·재분석하는 성격입니다. https://nvd.nist.gov/vuln/detail/CVE-2026-93741
- CVE Program, “CVE-2026-93741” (공식 CVE 레코드 JSON, cvelistV5) — CNA(VulDB) 발행 원본 레코드: 영향 펌웨어·CWE·CVSS v3.1/v4.0·기술적 영향·공개 타임라인 확인. https://raw.githubusercontent.com/CVEProject/cvelistV5/main/cves/2026/93xxx/CVE-2026-93741.json
- Strix AI, “CVE-2026-93741: A3002MU Memory Corruption” — CWE·CVSS·선행조건 교차 확인. https://www.strix.ai/cve/CVE-2026-93741
- VulDB, “CVE-2026-93741” (발행 CNA) — 엔트리 권위 출처. https://vuldb.com/cve/CVE-2026-93741
이 글은 위 원 분석을 우리 관점에서 다시 쓰고 논평을 더한 것입니다. 특정 문장·코드를 그대로 옮기지 않았으며, 자세한 재현 절차는 원문을 참고하세요. 코드 예시는 폐쇄형 펌웨어의 벤더 원본이 아니라 결함 이해를 위한 개념 재구성이며, 1차출처로 확증하지 못한 항목은 본문에 ⚠️미확인으로 표시했습니다.