
# GNU InetUtils telnetd 사전 인증 버퍼 오버플로우(CVE-2026-32746)에 대한 개념 증명 익스플로잇 승인된 보안 테스트를 위한 Docker 랩 환경 및 탐지 스크립트를 포함한 GNU InetUtils telnetd의 사전 인증 버퍼 오버플로우(CVE-2026-32746)에 대한 개념 증명 익스플로잇입니다.
GNU InetUtils telnetd의 LINEMODE SLC(Set Local Characters) 핸들러에서 버퍼 오버플로우를 통한 인증 전 원격 코드 실행.
CVSS 3.1: 9.8 (Critical) | CWE: CWE-120, CWE-787
telnetd/slc.c의 add_slc() 함수는 경계 검사 없이 SLC 트리플릿당 3바이트를 고정 108바이트 버퍼(slcbuf)에 추가합니다. 인증되지 않은 공격자는 로그인 프롬프트 이전의 옵션 협상 중에 40개 이상의 트리플릿(함수 코드 > 18/NSLC)이 포함된 조작된 SLC 하위 옵션을 전송하여 버퍼를 오버플로우시키고, BSS의 slcptr 포인터를 손상시키며, end_slc()가 손상된 포인터를 사용할 때 임의 쓰기를 달성할 수 있습니다.
# 취약한 실습 환경 구축
docker compose up -d
# 탐지 (비파괴적)
python3 detect.py 127.0.0.1 2323
# 익스플로잇 (telnetd 충돌 - 취약점 확인)
python3 exploit.py 127.0.0.1 2323
# 정리
docker compose down
Docker 설정은 xinetd 하에서 inetutils-telnetd 2.4가 포함된 Debian 컨테이너를 실행하며, 포트 2323에 노출됩니다. 완전히 격리되어 있으며 호스트에는 아무런 영향을 미치지 않습니다.
WILL LINEMODE를 사전에 전송하여 LINEMODE 협상을 트리거합니다DO LINEMODE로 응답하고 SLC 하위 옵션 처리를 시작합니다add_slc()는 각 트리플릿에 대해 "지원되지 않음" 응답(3바이트)을 104바이트 버퍼에 큐잉합니다slcptr 및 인접 BSS 데이터가 손상됩니다end_slc()는 손상된 slcptr을 통해 하위 옵션 종료 마커를 씁니다 (임의 쓰기)| 파일 | 설명 |
|---|---|
exploit.py | PoC 충돌/DoS 익스플로잇 |
Dockerfile | 취약한 telnetd 실습 환경 |
docker-compose.yml | 원커맨드 실습 환경 설정 |
xinetd-telnet.conf | xinetd 서비스 설정 |
detect.py | 비파괴적 버전 탐지 스크립트 |
DoS를 넘어서려면 다음이 필요합니다:
slcbuf → slcptr 오프셋)slcptr을 통해 end_slc()가 쓰는 값 제어이 도구는 공인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하지 않았거나 명시적 테스트 권한이 없는 시스템에 사용하지 마십시오. 작성자는 오용에 대해 책임을 지지 않습니다.
MIT