Joomla SP Page Builder의 CVE-2026-48908을 검증하며, 무단 아이콘 업로드를 통해 PHP 코드 실행으로 이어집니다. 방어 연구를 위한 auditd/PCAP 증거, 이벤트 타임라인 및 SOC 탐지 권장 사항을 포함합니다.
Joomla SP Page Builder 구성 요소의 CVE-2026-48908에 대한 실험실 검증으로, 기술적 증거, 이벤트 재구성 및 방어적 탐지 기회에 중점을 둡니다.
이 저장소는 SP Page Builder의 asset.uploadCustomIcon 엔드포인트가 업로드된 아이콘 아카이브를 수락하여 Joomla 미디어 디렉터리 아래에 PHP 아티팩트가 기록되도록 한 통제된 테스트를 문서화합니다. 업로드된 PHP 파일을 HTTP를 통해 호출하면 웹 서버 프로세스 사용자로 명령이 실행되었습니다. 결과적인 HTTP, 파일, 프로세스, 인증 및 네트워크 활동은 Apache 컨테이너 로그, Linux auditd, tcpdump, Docker 원격 측정, 파일 변경 폴링 및 Windows 호스트의 스크린샷을 사용하여 캡처되었습니다.
[!IMPORTANT] 이 저장소에는 보고서와 스크린샷만 포함되어 있습니다. 공격적인 익스플로잇 코드, 페이로드 소스, 원시 PCAP 파일 및 원시 호스트 증거 패키지는 의도적으로 포함되지 않았습니다. 이 자료는 취약점 검증, SOC 엔지니어링, 탐지 개발, 사고 대응 준비 및 승인된 연구를 위한 것입니다.
두 보고서 모두 전체 테스트 방법론, 증거 발췌문, 이벤트 타임라인, 파일 변경 증거, 네트워크 지표, 완화 지침, 감사 권장 사항 및 예시 SIEM 로직을 포함합니다.
.
├── README.md
├── SHA256SUMS.txt
├── reports/
│ ├── CVE-2026-48908_SP_Page_Builder_detection_EN.pdf
│ └── CVE-2026-48908_SP_Page_Builder_detection_PL.pdf
└── screenshots/
├── 01_poc_upload_and_code_execution.png
├── 02_http_whoami_www_data.png
├── 03_tcp_callback_ncat.png
├── 04_reverse_shell_session.png
└── 05_root_access_and_su_failure_redacted.png
익스플로잇 소스, 페이로드 소스, 원시 PCAP, 원시 Docker 증거 패키지 또는 DOCX 소스 파일은 포함되어 있지 않습니다.
| 역할 | 시스템 |
|---|---|
| 피해자 호스트 | Ubuntu 24.04.4 LTS, kernel 6.17.0-35-generic, Docker Engine 29.5.3 |
| 대상 애플리케이션 | Joomla 5.4.7, PHP 8.3.32, Apache HTTP Server, image joomla:5-php8.3-apache |
| 구성 요소 | JoomShaper SP Page Builder |
| 컨테이너 | joomla5-builders |
| 공격자 워크스테이션 | Microsoft Windows 11 Home 10.0.26200 |
| Joomla 서비스 | http://172.20.10.3:8080 |
| Windows 테스트 주소 | 172.20.10.2 |
| 컨테이너 주소 | 172.21.0.3 |
| 테스트 날짜 | 2026년 7월 9일 |
Joomla 웹루트 /var/www/html은 Docker 볼륨 joomla5-builders_joomla_data에 의해 백업되었습니다. 이는 탐지에 중요합니다. docker diff는 볼륨 내부의 파일 변경에 대한 상세한 가시성을 제공하지 않았으므로, 파일 모니터링은 볼륨 인식 파일 목록과 호스트 측 모니터링 지침에 의존해야 했습니다.
테스트는 격리되고 승인된 실험실 환경에서 수행되었습니다. 검증은 다음 순서를 포함했습니다:
asset.uploadCustomIcon 엔드포인트가 실험실 환경에서 업로드된 아이콘 아카이브를 수락했습니다./media/com_sppagebuilder/assets/iconfont/ 아래에 새 디렉터리와 파일이 생성되었습니다..PHP 확장자에 대한 PHP 처리를 변경하는 .htaccess 파일이 포함되었습니다./root에 접근하고 su -로 사용자를 전환하려는 시도가 실패했습니다.보고서는 재사용 가능한 익스플로잇 또는 페이로드 구현을 배포하지 않고 증거와 탐지 로직을 의도적으로 문서화합니다.
실험실 테스트는 다음을 확인했습니다:
asset.uploadCustomIcon 엔드포인트를 통한 무단 업로드;.htaccess 아티팩트 생성;www-data로서의 대화형 리버스 셸 세션;컨테이너 내부의 유효 ID는 다음과 같습니다:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
실패한 권한 상승 시도는 다음과 같이 나타났습니다:
cd root
bash: cd: root: Permission denied
su -
Password:
su: Authentication failure
공개 PoC는 여러 확장자 변형을 테스트했으며, 대소문자 혼합 PHP 확장자와 .htaccess를 포함한 조합이 실험실 설정에서 실행으로 이어질 수 있음을 확인했습니다.

통제된 HTTP 요청이 whoami를 실행했으며, 브라우저에 유효 프로세스 사용자가 표시되었습니다.

대화형 테스트 전에, 대상 환경에서 Windows 호스트로의 TCP 포트 4444에 대한 아웃바운드 연결을 확인하기 위해 더 안전한 단일 메시지 콜백이 사용되었습니다.

대화형 세션은 www-data로의 실행, 운영 체제로 Linux, 그리고 Joomla SP Page Builder 미디어 경로 아래의 작업 디렉터리를 확인했습니다.

/root에 접근하고 su -로 인증하려는 시도가 실패했습니다. 스크린샷은 테스트 비밀번호가 공개되는 것을 방지하기 위해 편집되었습니다.

전체 타임라인은 두 PDF 보고서에서 확인할 수 있습니다. 가장 중요한 이벤트는 다음과 같습니다:
| UTC | 이벤트 |
|---|---|
| 19:33:56 | Linux 감사, tcpdump, Docker 이벤트 및 파일 변경 폴링 시작됨 |
| 19:34:23 | /index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon에 대한 일련의 POST 요청 |
| 19:34:23.291 | 업로드된 .PHP 파일에 대한 GET (통제된 산술 명령 포함) |
| 19:34:23.329 | 업로드된 .pHp 파일에 대한 GET (통제된 산술 명령 포함) |
| 19:34:23.361 | 업로드된 .Php 파일에 대한 GET (통제된 산술 명령 포함) |
| 19:34:23.398 | 최종 .PHP 아티팩트에 대한 GET (통제된 산술 명령 포함) |
| 19:34:23.411 | 공개 PoC가 업로드된 PHP 아티팩트를 통해 id를 실행하고 HTTP 200 수신 |
| 19:35:05 | 수동 whoami 요청이 www-data 반환 |
| 19:35:27 | 172.20.10.2:4444로의 일회성 TCP 콜백 성공 |
| 19:35:59 | HTTP 요청이 172.20.10.2:4444로의 역방향 TCP 연결 시작 |
| 19:36:22-19:36:31 | whoami, uname, id, pwd가 실행 컨텍스트 확인 |
| 19:37:13 | cd root가 Permission denied 반환 |
| 19:37:21-19:37:28 | su - 시도가 Authentication failure로 실패 |
| 19:39:25 | 감사 수집 중단 및 아티팩트 패키징됨 |
피해자 호스트는 다음을 수집했습니다:
execve에 대한 auditd 이벤트;tcpdump를 사용한 패킷 캡처;테스트는 또한 모니터링 제한 사항을 식별했습니다. /var/www/html이 Docker 볼륨에 의해 백업되었기 때문에 docker diff는 /var/www/html/media/com_sppagebuilder/assets/iconfont/ 아래의 상세한 파일 생성을 보여주지 않았습니다. 따라서 파일 무결성 모니터링은 볼륨을 지원하는 실제 호스트 경로를 포함해야 합니다.
Windows 호스트 증거는 의도적으로 보고서 관련 스크린샷으로 제한되었습니다:
whoami에 대한 브라우저 출력;/root 및 su - 시도.다음 조합에 대해 HTTP, 리버스 프록시, WAF 또는 네트워크 원격 측정을 모니터링하십시오:
POST /index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
User-Agent contains: sppb-rce-poc
Status: 200, 201, or 204
프로덕션에서는 공개 PoC User-Agent에만 의존하지 마십시오. 엔드포인트와 예상치 못한 업로드 패턴이 User-Agent 값보다 더 안정적인 지표입니다.
.htaccess다음과 일치하는 새 파일 또는 수정된 파일에 대한 파일 원격 측정 모니터링:
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.php
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.PHP
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.pHp
/media/com_sppagebuilder/assets/iconfont/*/fonts/*.Php
/media/com_sppagebuilder/assets/iconfont/*/fonts/.htaccess
미디어 업로드 디렉터리에 AddType application/x-httpd-php .PHP를 포함하는 .htaccess가 존재하는 것은 높은 가치의 지표입니다.
업로드 활동과 다음과 같은 경로에 대한 후속 HTTP 요청을 상관 분석하십시오:
/media/com_sppagebuilder/assets/iconfont/*/fonts/*
요청이 PHP와 유사한 확장자를 대상으로 하고 t= 및 c=와 같은 매개변수를 포함할 때 더 높은 신뢰도에 도달합니다.
높은 가치의 프로세스 지표는 다음과 같습니다:
user: www-data, apache, or nginx
process: bash, sh, dash, or php
command line contains: /dev/tcp, bash -i, redirection operators, or unusual interpreter execution
웹 서버 프로세스에 의해 실행된 셸 또는 인터프리터가 워크스테이션 또는 비정상적인 대상 포트로 아웃바운드 연결을 시작할 때 경고합니다. 실험실 이벤트는 TCP 포트 4444를 사용했지만, 프로덕션 탐지는 단일 포트에 의존해서는 안 됩니다.
테스트는 실패한 su - 시도를 생성했습니다. unix_chkpwd와 같은 인증 도우미, /var/log/btmp에 대한 쓰기 및 웹 서비스 계정 손상 후 대화형 명령을 모니터링하십시오.
HTTP 업로드 지표가 탐지되면 SOC는 이를 즉시 다음 항목과 상관 분석해야 합니다:
/media/com_sppagebuilder/assets/iconfont/ 아래의 새 디렉터리;.htaccess 파일;t= 및 c=와 같은 명령형 쿼리 매개변수;whoami, id, uname, hostname, pwd, ip, ifconfig, netstat, ss와 같은 탐색 명령;단일 업로드 이벤트만으로는 항상 충분하지 않습니다. 가장 강력한 경고는 동일한 짧은 시간 창 내에서 업로드, 파일 생성, 파일 접근, 프로세스 실행 및 아웃바운드 네트워크 원격 측정을 결합합니다.
/media/com_sppagebuilder/assets/iconfont/ 및 더 넓은 Joomla 미디어 디렉터리에서 PHP 유사 파일 및 .htaccess 아티팩트를 검토하십시오..htaccess, .phtml, .phar, 아카이브 또는 실행 가능한 아티팩트를 제거하십시오.asset.uploadCustomIcon 엔드포인트에 대한 접근을 제한하거나 경고하십시오.docker diff만 의존하지 마십시오.www-data로의 코드 실행이었으며, 루트로의 권한 상승은 확인되지 않았습니다.이 자료는 방어적 보안 연구, 취약점 관리, 탐지 엔지니어링, 사고 대응 준비 및 승인된 테스트를 위해 제공됩니다. 명시적 허가 없이 시스템에 대해 사용하지 마십시오.