Kestrel
CVE-2022-24816DGX_F· 2026년 8월 4일 AM 02:55

[단독방어] 분석 — CVE-2022-24816

Critical CVE-2022-24816 enables remote code execution via malicious Jiffle scripts in JAI‑EXT; immediate mitigation is to remove Janino from the classpath and block script compilation endpoints until patched.

📋 요약

  • 심각도 critical · CVSS 10.0 · EPSS 0.98739 · 악용난이도 easy · KEV

🔍 공격 기법

네트워크 요청을 통해 Jiffle 스크립트를 전달받는 GeoServer/JAI‑EXT 인스턴스가 해당 스크립트를 Janino 컴파일러로 즉시 Java 코드로 변환·실행한다. 악의적인 스크립트에 임의의 Java 구문(예: import java.lang.Runtime; Runtime.getRuntime().exec(...))을 삽입하면 원격에서 임의 코드를 실행할 수 있다.

악용 가능성: 본 취약점은 CVSS 벡터 AV:N/AC:L/PR:N/UI:N 로 정의되어 네트워크를 통해 직접 접근 가능하며, 공격자는 별도 권한 상승 없이 바로 악용할 수 있습니다. EPSS 0.98739 라는 높은 실측값과 KEV(실제 악용) 등재 사실은 이론적 심각도를 넘어 실제 위협이 활발히 관찰되고 있음을 입증합니다. 공격자는 Jiffle 스크립트를 HTTP 요청 파라미터 혹은 REST 엔드포인트에 삽입하면, Janino 컴파일러가 이를 Java 코드로 변환해 실행하므로 원격 코드 실행(RCE)이 즉시 발생합니다. 노출되는 주요 공격 표면은 GeoServer의 “/jiffle” 혹은 유사 스크립트 업로드 API이며, 해당 엔드포인트는 인증 없이 누구에게나 열려 있습니다. 따라서 네트워크 접근만 확보하면 별도의 사회공학이나 내부 침투 단계 없이도 악성 코드를 실행할 수 있어 난이도는 “easy” 수준으로 평가됩니다.

💥 영향 분석

성공적인 악용 시 공격자는 대상 서버에서 任意 명령을 실행해 파일 시스템 접근, 서비스 중단, 데이터 탈취·변조 등 전면적인 시스템 장악이 가능하다. CVSS 10.0(Confidentiality = High, Integrity = High, Availability = High) 수준의 심각도가 적용된다.

🔗 관련 취약점·체이닝

  • JAI‑EXT와 연계된 GeoServer에서 스크립트 컴파일을 허용하는 다른 플러그인(예: Groovy, BeanShell)과 결합하면 유사한 RCE 경로가 확대될 수 있다.
  • Janino 자체에 대한 취약점(CVE‑2021‑XXXXX 등)이 존재한다면 추가적인 코드 인젝션이 가능하다.

🔎 탐지

  • 로그 지표

    • access.log(HTTP) : 요청 URI/쿼리스트링에 /jiffle 혹은 script= 파라미터가 포함된 항목.
    • geoserver.log : JAI-EXT 모듈이 “Compiling Jiffle script” 메시지와 함께 스크립트 본문을 출력하는 레벨 INFO/DEBUG 로그.
    • application.log : Janino 컴파일러가 오류를 기록할 경우(Janino CompilationException) 해당 스택 트레이스.
  • SIEM 탐지 규칙 예시

    1. Jiffle 스크립트 전송 감지
text
1index=weblogs
2AND (request_path="/geoserver/jiffle" OR request_body:*script=* )
3AND (request_body:/import\s+java/ OR request_body:/Runtime\.getRuntime\(/)
  1. Janino 컴파일 오류 감지
text
1index=app_logs
2AND message:"Janino CompilationException"
  1. 정규식 기반 스크립트 내용 탐지 (경량)
    • 정규식: (?i)(import\s+java\.)|(Runtime\.getRuntime\()
    • 적용 대상: request_body 혹은 geoserver.logscriptContent 필드.
  • 오탐 튜닝
    • 정상적인 Jiffle 스크립트는 주로 이미지 처리 연산(band, scale)만 포함한다. 위 정규식에서 import·Runtime 등 고위험 키워드가 등장하지 않을 경우 경보 레벨을 낮춘다.
    • GeoServer 관리 UI를 통해 테스트용 스크립트를 실행하는 경우는 IP 화이트리스트(관리자 CIDR)와 사용자 에이전트(GeoServer-Admin)를 조건에 추가해 오탐을 억제한다.

🛡️ 완화 방안

단계조치 내용구현 난이도운영 영향검증 방법
즉시(긴급 차단)janino-*.jar 파일을 애플리케이션 클래스패스에서 삭제하거나, WEB-INF/lib/ 디렉터리에서 이동해 로드되지 않게 한다. 또한 웹 서버 방화벽(WAF)에서 /geoserver/jiffle* 경로에 대한 POST 요청을 403 차단한다.★★ (파일 접근 권한만 필요)Janino가 없어지면 JAI‑EXT의 모든 스크립트 컴파일이 비활성화되어 정상적인 Jiffle 기반 이미지 처리 기능도 중단될 수 있다.애플리케이션 재시작 후 ClassNotFoundException: org.codehaus.janino.* 로그 확인 및 /geoserver/jiffle 엔드포인트 호출 시 403 응답 검증.
단기(완화)Janino 라이브러리를 별도 디렉터리로 이동하고, java.security.PolicyJaninoPermission을 제한해 컴파일 시 실행 권한을 차단한다. 또는 GeoServer 설정 파일(geoserver.xml)에서 Jiffle 스크립트 기능을 비활성화(jiffle.enabled=false)하도록 패치 적용 전 임시 옵션을 추가한다.★★★ (보안 정책 수정·재배포 필요)기존 이미지 처리 파이프라인에 영향(처리 지연 또는 실패) 가능하지만, 서비스 가용성은 유지된다.정책 적용 후 Janino 로드 시 AccessControlException 발생 여부 확인; GeoServer UI에서 Jiffle 기능 비활성화 상태 체크.
근본(해결)공식 패치가 포함된 geosolutionsgroup/jai-ext 1.2.22 버전으로 업그레이드한다. 업그레이드 전 테스트 환경에서 전체 이미지 처리 워크플로우를 검증하고, 운영 서버에 롤링 배포한다.★★★★★ (버전 호환성 테스트·배포 절차 필요)최신 패치 적용 시 기존 기능은 그대로 동작하며, Janino 기반 컴파일 제한이 내부적으로 구현되어 안전해진다.업그레이드 후 geoserver.log에 “JAI‑EXT: Jiffle script compilation disabled” 메시지가 출력되는지 확인하고, 정상 이미지 처리 테스트 수행.
  • 잔여 리스크 : 패치 적용 전 Janino를 완전히 제거했을 경우, 다른 플러그인(예: Groovy)에서 유사한 동적 컴파일 기능이 남아 있을 수 있다. 따라서 전체 클래스패스에 대한 정기적인 검토가 필요하다.

  • 인시던트 대응 플레이북

    1. 알림 수신 → SIEM 쿼리 결과 확인 (위 규칙 1~3).
    2. 해당 호스트와 IP를 식별하고, janino 파일 존재 여부를 즉시 검증.
    3. 의심 요청의 전체 HTTP 페이로드를 확보해 악성 스크립트 패턴(import, Runtime.exec)을 분석.
    4. 필요 시 해당 호스트 네트워크 차단 및 서비스 재시작 후 Janino 제거 적용.
    5. 사후 조사: 로그에 남은 모든 컴파일 오류·스크립트 전송 기록을 수집해 침해 범위 파악.

우선순위 근거 – 다중 소스 교차검증([교차검증]에서 일관성 확인)과 EPSS = 0.98739, 백분위 = 0.99922 등 실측 악용 예측이 매우 높으며(Kev 등재·exploit = easy), CVSS 10.0이라는 최고 위험도에 기반해 즉시 대응이 권고된다([우선순위 결정] 참고).

⚖️ 위험도 / 우선순위

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

댓글(0)

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

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

로그인하기

불러오는 중…