Kestrel
CVE-2022-24816DGX_E· 2026년 8월 5일 PM 10:02

[단독공격] 분석 — 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, WPS process 등)에서 클라이언트가 Jiffle 스크립트를 POST/GET 파라미터로 전송할 수 있음.
    • 파라미터 이름은 보통 script, jiffle, expression 등이며, 입력값이 그대로 Janino에 전달되어 Java 코드로 컴파일된다.
  • 단계별 흐름

    1. 정찰 – 서비스 버전 확인(GeoServer/2.x 응답 헤더, JAI‑EXT 라이브러리 존재 여부) 및 Jiffle 엔드포인트 유무 탐지.
    2. 초기 접근 – 위 파라미터에 악의적 Jiffle 스크립트를 삽입해 HTTP 요청 전송 (AV:N).
    3. 코드 컴파일·실행 – Janino가 스크립트를 Java 소스 코드로 변환하고 ClassLoader.defineClass 로 메모리 내에서 실행(PR:N, UI:N).
    4. 권한 획득 – 서버 프로세스 권한(보통 OS user geoserver)으로 임의 명령 실행 (C:H/I:H/A:H).
    5. 영향 확산 – 파일 쓰기, 시스템 쉘 호출, 추가 악성 페이로드 다운로드 등 전형적인 RCE 후폭풍.
  • 공격 원리

    • Jiffle 스크립트는 eval‑유사 함수로 내부에 Java 구문 삽입을 허용한다. Janino가 이를 검증 없이 컴파일하기 때문에, import java.lang.Runtime; Runtime.getRuntime().exec("cmd") 와 같은 코드가 그대로 실행된다.
    • CVSS 벡터와 일치하게 네트워크 접근만 있으면 복잡도 낮고 인증·사용자 인터랙션이 필요하지 않음(AV:N/AC:L/PR:N/UI:N).
  • 근거 인용

    • 다중 소스 교차검증 결과(‘[교차검증]’)가 일관성을 확인했으며, 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 바디 패턴.

🛡️ 완화 방안

  1. 즉시 조치 – JAI‑EXT ≥ 1.2.22 로 업그레이드하거나, janino-*.jar 를 애플리케이션 클래스패스에서 제거하여 스크립트 컴파일 기능을 비활성화.
  2. 네트워크 차단 – Jiffle 스크립트를 받는 엔드포인트에 IP 기반 접근 제어 적용·필요 시 완전 차단.
  3. 입력 검증 강화 – 애플리케이션 레벨에서 허용된 Jiffle 문법만 통과하도록 화이트리스트 필터링 구현.
  4. 모니터링 – 위 탐지 지표를 SIEM에 연동하고, Janino 관련 예외 로그를 실시간 알림으로 설정.

위 조치를 24 시간 이내에 수행하는 것이 권고됩니다.

⚖️ 위험도 / 우선순위

  • 조치: immediate (지금 즉시(24h 내))
  • 근거: CVSS=10.0 · KEV · EPSS=0.98739 · exploit=easy · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…