
CVE-2019-17147에 대한 종합적인 리버스 엔지니어링 및 익스플로잇으로, TP-Link TL-WR841N 라우터의 스택 버퍼 오버플로우 취약점입니다. 펌웨어 분석, 하드웨어 디버깅, 인증되지 않은 RCE를 위한 단계적 쉘코드 주입 익스플로잇을 포함합니다.

이 저장소는 TP-Link TL-WR841N 라우터(MIPSEL 아키텍처)의 치명적인 원격 코드 실행(RCE) 취약점인 CVE-2019-17147에 대한 포괄적인 리버스 엔지니어링 및 익스플로잇을 문서화합니다. 이 취약점은 httpd 웹 서버 데몬에 존재하며, 부적절한 입력 검증으로 인해 사용자 정의 cstr_strncpy 함수를 통한 스택 버퍼 오버플로우가 발생하고, 인증 없이 임의 코드 실행으로 이어집니다.
| 취약점 | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (높음) |
| 벡터 | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 유형 | 스택 기반 버퍼 오버플로우 |
| 구성 요소 | /usr/bin/httpd |
분석 환경은 다음 구성 요소를 사용하여 구축되었습니다.
flashrom (메모리 덤핑), binwalk (펌웨어 추출), IDA Pro (정적 분석), GDB-Multiarch (원격 디버깅), QEMU (MIPSEL 에뮬레이션).TL-WR841N(US)_V14_180319.취약점은 /usr/bin/httpd 바이너리에서 식별되었습니다. IDA Pro를 통한 정적 분석 결과, HTTP 헤더 파싱(특히 Host 헤더) 중에 사용되는 사용자 정의 문자열 복사 함수 cstr_strncpy가 발견되었습니다.

cstr_strncpy 함수는 대상 버퍼 크기가 아닌 소스 문자열 길이에서 파생된 copy_len 매개변수를 허용합니다. 이로 인해 지나치게 긴 헤더가 제공되면 일반적인 스택 버퍼 오버플로우가 발생합니다. 또한 연결 리스트 구조를 조작하는 http_parser_argStrToList 함수가 이 오버플로우의 영향을 받아 next 및 prev 포인터를 제어할 수 있게 됩니다.
gdbserver를 사용한 런타임 디버깅을 통해 충돌과 실행 흐름에 대한 제어가 확인되었습니다. 메모리 맵(vmmap) 분석 결과 심각한 하드닝 부족이 드러났습니다.

이 구성은 복잡한 ROP 체인 없이 힙에 배치된 셸코드를 직접 실행할 수 있게 합니다.
익스플로잇 체인은 손상된 연결 리스트 포인터에서 파생된 Write-What-Where 프리미티브를 활용하여 RCE를 달성합니다.
strcpy의 널 바이트 제한을 우회하기 위해 페이로드를 여러 요청으로 전송합니다.
atol 함수 항목이 셸코드의 주소로 덮어쓰여집니다.atol 호출을 강제하여(Content-Length 헤더를 통해) 실행을 주입된 셸코드로 리디렉션합니다.
최종 Python 스크립트는 공격을 성공적으로 자동화하여 포트 31337에 루트 셸을 생성합니다.

취약점은 버퍼 관리의 안전하지 않은 코딩 관행에서 비롯됩니다.
cstr_strncpy 사용을 대상 버퍼 크기를 엄격하게 적용하는 안전한 대안(예: sizeof(dest) 기반 명시적 경계 검사가 있는 strncpy)으로 교체합니다.전체 프로세스에 대한 상세한 단계별 안내(코드 분석 및 환경 설정 포함)는 이 저장소에 포함된 전체 가이드를 참조하십시오.
이 프로젝트는 교육 및 연구 목적으로만 제공됩니다. 제공된 정보는 IoT 장치의 보안을 개선하기 위한 것입니다. 저자는 여기에 포함된 정보나 코드의 오용에 대해 책임을 지지 않습니다.
원본 연구 및 분석을 기반으로 함.