
여러 마샬러(Jackson, XStream, SnakeYAML)용 페이로드 생성기와 원격 코드 실행을 위한 JNDI 참조 간접화를 갖춘 Java 역직렬화 취약점 익스플로잇 도구.
Log4Shell/CVE-2021-44228 때문에 여기에 오셨다면, 공격 벡터와 영향을 받는 Java 런타임 버전에 대해 읽어보시기 바랍니다: https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Chris Frohoff와 Garbriel Lawrence가 Java 객체 역직렬화 취약점에 대한 연구를 발표한 지 2년 이상이 지났습니다. 그 연구는 궁극적으로 Java 역사상 가장 큰 원격 코드 실행 버그의 물결로 설명할 수 있는 결과를 낳았습니다.
이에 대한 연구는 이러한 취약점이 Java 직렬화나 XStream처럼 표현력이 풍부한 메커니즘에만 국한되지 않으며, 일부는 다른 메커니즘에도 적용될 수 있음을 시사했습니다.
이 논문은 공격자가 공급한 임의의 타입을 언마샬링할 수 있는(했던) 다양한 Java 오픈소스 마샬링 라이브러리에 대한 분석과 익스플로잇 세부 사항을 제시하며, 이 프로세스가 어떻게 수행되고 어떤 암묵적 제약이 있든 유사한 익스플로잇 기법에 취약하다는 것을 보여줍니다.
전체 논문은 marshalsec.pdf에서 확인할 수 있습니다.
모든 정보와 코드는 교육 목적 및/또는 자신의 시스템에서 이러한 취약점을 테스트하기 위한 목적으로만 제공됩니다.
Java 8이 필요합니다. Maven으로 빌드합니다: mvn clean package -DskipTests. 다음과 같이 실행합니다.
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
여기서
다음 마샬러에 대한 페이로드 생성기가 포함되어 있습니다:
| Marshaller | 가젯 영향 |
|---|---|
| BlazeDSAMF(0|3|X) | JDK 전용, Java 직렬화로의 승격 다양한 서드파티 라이브러리 RCE |
| Hessian|Burlap | 다양한 서드파티 RCE |
| Castor | 의존성 라이브러리 RCE |
| Jackson | JDK 전용 RCE 가능, 다양한 서드파티 RCE |
| Java | 또 다른 서드파티 RCE |
| JsonIO | JDK 전용 RCE |
| JYAML | JDK 전용 RCE |
| Kryo | 서드파티 RCE |
| KryoAltStrategy | JDK 전용 RCE |
| Red5AMF(0|3) | JDK 전용 RCE |
| SnakeYAML | JDK 전용 RCE |
| XStream | JDK 전용 RCE |
| YAMLBeans | 서드파티 RCE |
사전 요구 사항 없음.
사전 요구 사항:
로드할 서비스는 현재 javax.script.ScriptEngineFactory로 하드코딩되어 있습니다.
사전 요구 사항:
사전 요구 사항:
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
테스트 실행 시(Maven을 통하거나 -a를 사용할 때) 인자를 제어하는 몇 가지 시스템 속성이 있습니다.
테스트는 시스템 명령 실행 및 원격 코드베이스에서 실행되는 코드를 검사하는 SecurityManager를 설치한 상태에서 실행됩니다. 이것이 작동하려면 사용 중인 로드된 클래스가 일부 보안 관리자 검사를 트리거해야 합니다.