[단독공격] 분석 — CVE-2022-24816
CVE-2022-24816 enables remote, unauthenticated Java code execution in JAI‑EXT < 1.1.22 via crafted Jiffle scripts; immediate patch or Janino removal is required.
📋 요약
- 심각도 critical · CVSS 10.0 · EPSS 0.98739 · 악용난이도 easy · KEV
🔍 공격 기법
-
공격 표면
- GeoServer·JAI‑EXT가 제공하는 HTTP 엔드포인트(예:
/jiffle, WPSprocess등)에서 클라이언트가 Jiffle 스크립트를 POST/GET 파라미터로 전송할 수 있음. - 파라미터 이름은 보통
script,jiffle,expression등이며, 입력값이 그대로 Janino에 전달되어 Java 코드로 컴파일된다.
- GeoServer·JAI‑EXT가 제공하는 HTTP 엔드포인트(예:
-
단계별 흐름
- 정찰 – 서비스 버전 확인(
GeoServer/2.x응답 헤더, JAI‑EXT 라이브러리 존재 여부) 및 Jiffle 엔드포인트 유무 탐지. - 초기 접근 – 위 파라미터에 악의적 Jiffle 스크립트를 삽입해 HTTP 요청 전송 (
AV:N). - 코드 컴파일·실행 – Janino가 스크립트를 Java 소스 코드로 변환하고
ClassLoader.defineClass로 메모리 내에서 실행(PR:N,UI:N). - 권한 획득 – 서버 프로세스 권한(보통 OS user
geoserver)으로 임의 명령 실행 (C:H/I:H/A:H). - 영향 확산 – 파일 쓰기, 시스템 쉘 호출, 추가 악성 페이로드 다운로드 등 전형적인 RCE 후폭풍.
- 정찰 – 서비스 버전 확인(
-
공격 원리
- Jiffle 스크립트는
eval‑유사 함수로 내부에 Java 구문 삽입을 허용한다. Janino가 이를 검증 없이 컴파일하기 때문에,import java.lang.Runtime; Runtime.getRuntime().exec("cmd")와 같은 코드가 그대로 실행된다. - CVSS 벡터와 일치하게 네트워크 접근만 있으면 복잡도 낮고 인증·사용자 인터랙션이 필요하지 않음(
AV:N/AC:L/PR:N/UI:N).
- Jiffle 스크립트는
-
근거 인용
- 다중 소스 교차검증 결과(‘[교차검증]’)가 일관성을 확인했으며, EPSS = 0.98739(‘[실측 악용예측]’)는 실제 악용 가능성이 거의 확정 수준임을 의미합니다.
- KEV 등재·exploit‑easy 로 판단된 ‘즉시 대응’(
우선순위 결정) 논리는 CVSS 10.0과 EPSS 높은 수치를 결합한 규칙 기반 우선순위 모델에 근거합니다.
악용 가능성: 이 취약점은 CVSS AV:N/AC:L/PR:N/UI:N 로 정의되므로 공격자는 네트워크만 연결돼 있으면 별도의 권한이나 사용자의 개입 없이 바로 악용할 수 있습니다. EPSS 0.98739 라는 매우 높은 실측 확률과 KEV 데이터베이스에 등재된 사실은 실제 환경에서 이미 활발히 이용되고 있다는 강력한 증거이며, 이론적 심각도와 무관하게 위협이 현실임을 입증합니다. 공격자는 GeoServer의 WMS/WFS REST endpoint(예: /geoserver/jiffle)에 Jiffle 스크립트를 포함한 파라미터(script=)를 전송하면, 내부 Janino 컴파일러가 이를 Java 코드로 변환해 즉시 실행합니다. 이 과정에서 외부 파일 접근이나 추가 권한 상승이 필요 없으며, HTTP POST/GET 요청만으로 완전 원격 코드 실행(RCE)이 이루어집니다. 따라서 노출된 엔드포인트와 script 파라미터가 바로 공격 표면이며, 프로토콜은 일반적인 HTTP/HTTPS를 사용합니다. 위 조건이 충족되는 환경이라면 공격자는 탐지 없이 빠르게 악성 코드를 실행해 시스템을 장악할 수 있어 난이도·악용 가능성이 “easy” 로 평가된 것이 정당합니다.
💥 영향 분석
- 원격에서 임의 명령 실행 → 서버 전체 장악, 데이터 유출·변조·서비스 중단 가능.
- GeoServer를 통해 제공되는 모든 GIS 서비스(맵 레이어, WFS/WMS) 가 공격자에게 제어권을 넘겨받아 악성 이미지/데이터 삽입이 가능함.
🔗 관련 취약점·체이닝
- CWE‑94 (Improper Control of Generation of Code) 와 직접 연관됨; Janino 컴파일 단계에서 입력 검증 부재가 핵심 원인.
- 추정: 동일 서버에 존재할 수 있는 파일 업로드(CVE‑2022‑xxxx)·디렉터리 탐색 취약점과 결합하면 코드 실행 → 영구 백도어 로 이어질 수 있음(패턴: RCE → Persistence).
- 다른 Java 기반 이미지 처리 라이브러리(JAI, ImageIO) 에서 동일한 스크립트 파싱 로직을 재사용한다면 공통 라이브러리 체이닝 가능성 존재.
🔎 탐지
- 웹 서버 로그에
POST /...jiffle혹은script=파라미터에 Java 키워드(import,Runtime.getRuntime)가 포함된 요청이 기록될 경우. - Janino 컴파일 오류/경고 로그(예:
Janino CompilerException) 가 비정상적으로 빈번하게 발생하면 탐지 신호. - IDS/IPS 시그니처 예시:
(?i)runtime\.getruntime\(\)\.exec가 포함된 HTTP 바디 패턴.
🛡️ 완화 방안
- 즉시 조치 – JAI‑EXT ≥ 1.2.22 로 업그레이드하거나,
janino-*.jar를 애플리케이션 클래스패스에서 제거하여 스크립트 컴파일 기능을 비활성화. - 네트워크 차단 – Jiffle 스크립트를 받는 엔드포인트에 IP 기반 접근 제어 적용·필요 시 완전 차단.
- 입력 검증 강화 – 애플리케이션 레벨에서 허용된 Jiffle 문법만 통과하도록 화이트리스트 필터링 구현.
- 모니터링 – 위 탐지 지표를 SIEM에 연동하고, Janino 관련 예외 로그를 실시간 알림으로 설정.
위 조치를 24 시간 이내에 수행하는 것이 권고됩니다.
⚖️ 위험도 / 우선순위
- 조치: immediate (지금 즉시(24h 내))
- 근거: CVSS=10.0 · KEV · EPSS=0.98739 · exploit=easy · in_scope=None