
엔드투엔드: 게스트가 공개 지원 양식을 통해 직렬화된 PHP 객체를 저장하고, 관리자가 지원자 목록을 열면 가젯 체인이 웹쉘을 드롭합니다.
Simple Job Board WordPress 플러그인(PressTigers)에서 발생하는 인증되지 않은 PHP 객체 주입 취약점입니다. 게스트가 공개 지원 양식을 통해 직렬화된 PHP 객체를 저장하고, 이후 관리자가 지원자 목록을 열면 플러그인이 이를 역직렬화하며 서드파티 가젯 체인이 이를 원격 코드 실행으로 전환합니다.
| CVE | CVE-2024-1813 |
| 플러그인 | Simple Job Board (PressTigers) |
| 취약 버전 | ≤ 2.11.0 |
| 패치 버전 | 2.11.1 |
| 유형 | PHP 객체 주입 (안전하지 않은 역직렬화) |
| 인증 | 없음 (인증 전 주입) |
| 트리거 | 관리자가 지원자 목록을 엶 (정상 워크플로우) |
| CVSS | 9.8 |
📖 전체 기술 분석: https://mobeta.fr/blog/
이 저장소는 동반 연구소 및 PoC입니다. 상세 분석(근본 원인, 이중
unserialize, POP 체인 구축, WAF 우회)은 블로그 게시물에 있습니다.
.
├── sjb_cve_2024_1813.py # PoC (페이로드 생성 + 전송)
├── LICENSE
└── lab/
├── docker-compose.yml # WordPress + MariaDB + 취약한 플러그인
├── setup/setup.sh # 일회성 프로비저닝 (wp-cli)
└── trigger_exploit.sh # 관리자가 지원자 목록을 여는 동작 시뮬레이션
취약한 스택을 재현합니다: WordPress 6.9.4 / PHP 8.3 / MariaDB 10.11과 Simple Job Board 2.10.8 (소스 + 싱크) 및 All In One SEO 4.5.6 (가젯 체인).
cd lab
docker compose up -d # 부팅 + 자동 프로비저닝
docker compose logs setup # 사이트 URL, 관리자 자격 증명 및 job_id 출력
연구소 기본값: http://localhost:8081, 관리자 admin / admin123!.
# 1. 페이로드 저장 (인증 전). 4를 설정 로그의 job_id로 바꾸세요.
python3 sjb_cve_2024_1813.py http://localhost:8081 4 'id > /tmp/RCE_PROOF.txt'
# 2. 싱크 실행 (관리자가 지원자 목록을 여는 동작).
cd lab && ./trigger_exploit.sh
# 3. 결과 확인.
docker exec sjb_lab_wp cat /tmp/RCE_PROOF.txt
유용한 PoC 플래그:
--print-only - 페이로드를 생성해 출력만 하며 네트워크 트래픽은 없음.--field - POST 필드 이름 (name을 포함해야 하며 기본값 jobapp_full_name).--int-prefix '+' - 직렬화 길이 접두사의 WAF 우회 변형.--proxy http://127.0.0.1:8080 - Burp를 통한 라우팅.post_meta에 대한 명시적 unserialize() / maybe_unserialize() 사용처를 감사하고,
unserialize($data, ['allowed_classes' => false])를 선호하세요.vendor/composer/installed.json에 대한 직접 접근을 차단하여 범위가 지정된 라이브러리
버전을 식별할 수 없게 하세요.승인된 보안 테스트 및 교육 목적으로만 사용하세요. 소유자의 명시적인 서면 허가 없이 어떤 시스템에도 이 도구를 실행하지 마십시오.
MIT - LICENSE 참조.