🇰🇷 한글 설명
JLine은 Java 콘솔 입력 처리 라이브러리입니다. 3.30.14, 4.0.16, 4.2.1 이전 버전의 JLine3 Telnet 서버 remote-telnet 모듈은 Telnet NEW-ENVIRON 옵션으로 클라이언트가 주입할 수 있는 환경 변수 개수를 제한하지 않습니다. 인증되지 않은 공격자가 고유한 변수 쌍을 대량으로 전송하여 JVM 힙 메모리를 소진시키고 OutOfMemoryError를 유발할 수 있습니다. 해당 문제는 3.30.14, 4.0.16, 4.2.1 버전에서 수정되었습니다.
💡 쉬운 설명
JLine이라는 자바 프로그램의 원격 접속 기능에 결함이 있어, 누구나 아주 많은 데이터를 보내 서버의 메모리를 바닥나게 할 수 있습니다. 서버가 멈추거나 비정상 종료될 수 있으니 라이브러리를 최신 버전으로 업데이트해야 합니다.
🇺🇸 원문 (English)
JLine is a Java library for handling console input. Prior to 3.30.14, 4.0.16, and 4.2.1, the JLine3 Telnet server remote-telnet module does not limit the number of environment variables a client may inject via the Telnet NEW-ENVIRON option, and TelnetIO.readNEVariables() in TelnetIO.java:1127-1180 stores each variable pair in a HashMap held by ConnectionData, allowing an unauthenticated attacker to flood unique variable pairs before the terminating IAC SE byte and exhaust JVM heap memory with an OutOfMemoryError. This issue is fixed in versions 3.30.14, 4.0.16, and 4.2.1.
📍 영향받는 시스템
JLine3 3.30.14 미만, 4.0.16 미만, 4.2.1 미만 버전을 사용하는 remote-telnet 모듈 기반 Java 애플리케이션
⚔️ 공격 벡터
인증 없이 원격에서 Telnet NEW-ENVIRON 옵션으로 고유한 환경 변수를 대량 전송해 JVM 힙 메모리를 고갈시킴(DoS)
🛡️ 대응 방법
JLine을 3.30.14, 4.0.16, 4.2.1 이상 버전으로 업그레이드하고, 해당 Telnet 서비스 노출을 제한하거나 비활성화
🔧 검증 코드
출력된 jline JAR 경로와 Implementation-Version 값을 확인해 3.30.14 미만(3.x) 또는 4.0.16 미만, 4.2.1 미만(4.x)이면 취약하므로 업그레이드가 필요하고, 해당 버전 이상이면 안전합니다.
find / -name 'jline*.jar' 2>/dev/null | xargs -I{} sh -c 'echo {}; unzip -p {} META-INF/MANIFEST.MF 2>/dev/null | grep -i implementation-version'