
CVE-2026-32746 - GNU InetUtils telnetd LINEMODE SLC 버퍼 오버플로 PoC (인증 전 RCE, CVSS 9.8)
GNU InetUtils telnetd의 LINEMODE SLC(Set Local Characters) 핸들러에서 발생하는 인증 전(pre-authentication) 버퍼 오버플로우입니다.
CVSS 3.1: 9.8 (치명적) | CWE: CWE-120, CWE-787
telnetd/slc.c의 add_slc() 함수는 경계 검사 없이 SLC 트리플릿마다 3바이트를 고정 108바이트 버퍼(slcbuf)에 추가합니다. 인증되지 않은 공격자는 로그인 프롬프트 이전의 옵션 협상 중에 40개 이상의 트리플릿(함수 코드 > 18/NSLC)을 포함하는 조작된 SLC 하위 옵션을 전송하여 버퍼를 오버플로우시키고 slcptr 포인터와 BSS의 인접 데이터를 손상시킬 수 있습니다.
# Build the vulnerable lab environment
docker compose up -d
# Detect (non-destructive)
python3 detect.py 127.0.0.1 2323
# Exploit (triggers overflow, verifies via response)
python3 exploit.py 127.0.0.1 2323
# Clean up
docker compose down
Docker 설정은 xinetd 아래에서 inetutils-telnetd 2.4를 실행하는 Debian 컨테이너를 포트 2323에 노출합니다. 완전히 격리되므로 호스트에 아무런 영향을 미치지 않습니다.
WILL LINEMODE를 사전에 전송합니다.DO LINEMODE로 응답하고 SLC 하위 옵션 처리를 시작합니다.add_slc()는 각 트리플릿에 대해 "지원되지 않음" 응답(3바이트)을 104바이트 버퍼에 큐에 넣습니다.slcptr과 인접 BSS 데이터가 손상됩니다.end_slc()는 응답에 포함된 유출된 BSS 메모리를 포함하여 slcbuf부터 손상된 slcptr 위치까지의 모든 것을 전송합니다.바이트 제약, 정렬 기법, 32비트 시스템에서의 def_slcbuf/free() 프리미티브를 포함한 심층적인 공격 분석은 WatchTowr의 분석 문서를 참조하세요.
이 도구는 공인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하지 않았거나 명시적 테스트 허가를 받지 않은 시스템에 사용하지 마십시오. 작성자는 오용에 대해 책임을 지지 않습니다.
MIT
| 파일 | 설명 |
|---|
exploit.py | 응답 기반 검증을 포함한 PoC 오버플로우 |
Dockerfile | 취약한 telnetd 실습 환경 |
docker-compose.yml | 원커맨드 실습 환경 구성 |
xinetd-telnet.conf | xinetd 서비스 설정 |
detect.py | 비파괴적 버전 탐지 스크립트 |