
Defensive Lab-Validierung und SOC-Erkennungsanleitung für CVE-2026-48907 in Joomla JCE <= 2.9.99.4, einschließlich Apache/Joomla/auditd-Telemetrie, Webshell-Artefakten, Sigma-Regeln, MITRE ATT&CK-Zuordnung und Empfehlungen zur Risikominderung.
Defensiver Validierungsbericht und SOC-orientierte Erkennungshinweise für CVE-2026-48907, das den Joomla Content Editor (JCE) bis Version 2.9.99.4 betrifft.
Dieses Repository dokumentiert eine kontrollierte Laborvalidierung von CVE-2026-48907 in Joomla JCE und konzentriert sich auf praktische Erkennungsentwicklung für SOC-Teams.
Das Ziel ist nicht, eine Anleitung zur Ausnutzung zu geben. Ziel ist es zu zeigen, welche Telemetriequellen bei der Validierung nützlich waren, welche Artefakte erstellt wurden und wie Verteidiger diese Aktivität erkennen und darauf reagieren können.







Ein wichtiger betrieblicher Befund ist, dass Joomla-Anwendungsprotokolle nicht ausreichten.
Während des Labortests zeichneten Joomla-Protokolle anwendungsspezifischen Kontext auf, wie z. B. ein joomlafailure-Ereignis, aber sie zeigten nicht die vollständige Ausnutzungskette. Die nützliche Kette war hauptsächlich sichtbar in:
access.logerror.logexecve-Aufzeichnungenjoomla_html/tmpFür das SOC-Monitoring sollten Joomla-Protokolle als unterstützende Telemetrie behandelt werden, nicht als primäre Erkennungsquelle für diese Sicherheitslücke.
Auf hoher Ebene beobachtete Kette während des kontrollierten Tests:
JCE version discovery
↓
POST to Joomla JCE component
↓
PHP webshell written to Joomla /tmp
↓
HTTP request to /tmp/jce*.xml.php
↓
Command execution through webshell
↓
auditd confirms /usr/bin/dash and commands executed as www-data
Die deutlichsten Beweise fanden sich in Apache access.log:
GET /plugins/editors/jce/jce.xml
GET /
POST /index.php?option=com_jce
GET /tmp/jceolxtshs3.xml.php
GET /plugins/editors/jce/jce.xml
POST /index.php?option=com_jce
GET /tmp/jce624jdcfx.xml.php
GET /tmp/jce624jdcfx.xml.php?c=id%20%26%26%20hostname%20%26%26%20pwd
GET /tmp/jce624jdcfx.xml.php?c=whoami
GET /tmp/jce624jdcfx.xml.php?c=hostname
GET /tmp/jce624jdcfx.xml.php?c=id
GET /tmp/jce624jdcfx.xml.php?c=pwd
Das Apache/PHP-Fehlerprotokoll enthielt wertvolle parserbezogene Spuren:
simplexml_load_string()
administrator/components/com_jce/helpers/profiles.php
RXST
RXEND
Die Markierungen RXST und RXEND waren besonders nützliche Indikatoren für diese spezifische PoC-Familie, da sie im Payload-Handling-Pfad auftauchten.
Joomla-Protokolle bestätigten, dass das Anwendungslogging aktiv war, aber sie rekonstruierten die Ausnutzung nicht:
#Software: Joomla! 5.4.6 Stable [ Kutegemea ] 26-May-2026 16:00 GMT
#Fields: datetime priority clientip category message
2026-06-18T20:37:57+00:00 INFO 172.20.10.2 joomlafailure Username and password do not match or you do not have an account yet.
Das bedeutet, dass die alleinige Erfassung von Joomla-Protokollen möglicherweise die wichtigsten Beweise für die Ausnutzung von CVE-2026-48907 übersieht.
Der Test erstellte PHP-Webshell-Dateien im Joomla tmp:
/var/www/html/tmp/jce624jdcfx.xml.php
/var/www/html/tmp/jceolxtshs3.xml.php
Hostseitige Pfade im Labor:
/home/user/joomla-jce-lab/joomla_html/tmp/jce624jdcfx.xml.php
/home/user/joomla-jce-lab/joomla_html/tmp/jceolxtshs3.xml.php
Beobachtete SHA256-Hashes:
b6fa303daef8aa8cb39566c73d2cb4a458efb2b1fba48052dd039d45c3beb0aa jce624jdcfx.xml.php
f8bcc802ab56b845c968ed6727228f200f8f4bcd332b8ce82c6980d93ac228fd jceolxtshs3.xml.php
Hash-basierte Erkennung sollte als wenig belastbar betrachtet werden, da Dateinamen und Payloads variieren können. Pfad, Erweiterung, Eigentümer und Verhaltenskorrelation sind nützlicher.
auditd bestätigte, dass der Webserver-Benutzer Befehle aus dem Joomla-Verzeichnis tmp ausführte:
CWD=/var/www/html/tmp uid=www-data comm=sh exe=/usr/bin/dash
CWD=/var/www/html/tmp uid=www-data comm=id exe=/usr/bin/id
CWD=/var/www/html/tmp uid=www-data comm=hostname exe=/usr/bin/hostname
CWD=/var/www/html/tmp uid=www-data comm=whoami exe=/usr/bin/whoami
Dies ist die stärkste Bestätigung, dass es sich bei der Aktivität nicht nur um Scans, sondern um tatsächliche Remote-Codeausführung handelte.
Die stärkste Erkennung ist korrelationsbasiert:
GET /plugins/editors/jce/jce.xml
followed by
POST /index.php?option=com_jce
followed by
GET /tmp/jce*.xml.php
followed by
GET /tmp/jce*.xml.php?c=
and/or
auditd: www-data executes /usr/bin/dash from /var/www/html/tmp
/plugins/editors/jce/jce.xml
/index.php?option=com_jce
/tmp/jce[a-z0-9]{8}\.xml\.php
/tmp/.*\.(php|phtml|phar)(\?| )
cs-uri-query contains "c="
joomla_html/tmp/jce*.xml.php
/var/www/html/tmp/jce*.xml.php
RXST
RXEND
shell_exec
system
passthru
exec
$_GET['c']
Verwenden Sie diese nur auf Systemen, die Ihnen gehören oder für deren Untersuchung Sie autorisiert sind.
grep -RniE "com_jce|profiles\.import|task=profiles|/tmp/.*\.php|RXST|RXEND" apache_logs joomla_html/administrator/logs 2>/dev/null
find ./joomla_html/tmp ./joomla_html/images ./joomla_html/media \
-type f \( -iname "*.php" -o -iname "*.phtml" -o -iname "*.phar" -o -iname "*.xml.php" \) -ls
sudo ausearch -k wwwdata_exec -i | grep -E "uid=www-data|comm=sh|/usr/bin/dash|/var/www/html/tmp|whoami|hostname| id |pwd"
Separate Sigma-Regeldateien sind in rules/sigma verfügbar:
joomla_jce_webshell_tmp_access.ymljoomla_jce_component_exploit_attempt.ymlweb_user_shell_from_joomla_tmp_auditd.ymlDie genaue Konfiguration hängt vom Apache/PHP-Bereitstellungsmodell ab. Ziel ist es, die PHP-Ausführung in Verzeichnissen zu verhindern, die niemals Skripte ausführen sollten.
<Directory "/var/www/html/tmp">
php_admin_flag engine off
Options -ExecCGI
RemoveHandler .php .phtml .phar
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
</Directory>
<Directory "/var/www/html/images">
php_admin_flag engine off
Options -ExecCGI
RemoveHandler .php .phtml .phar
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
</Directory>
Das Labor bestätigte die praktische Ausnutzung von JCE 2.9.99.4. Eine Authentifizierung gegenüber Joomla war im beobachteten Ablauf nicht erforderlich, und der öffentliche PoC automatisierte die Versionserkennung und die Webshell-Erstellung.
Für reale Umgebungen ist das Risiko hoch bis kritisch, wenn Joomla internetfähig oder von weniger vertrauenswürdigen internen Netzwerken aus erreichbar ist. Ein erfolgreicher Angriff kann eine persistente Webshell hinterlassen, sodass das Patchen ohne Artefaktüberprüfung nach einem mutmaßlichen Vorfall nicht ausreicht.
Dieses Repository ist für defensive Forschung, SOC-Erkennungsentwicklung und Schwachstellenmanagement gedacht. Es enthält keinen Exploit-Code. Tests dürfen nur auf Systemen durchgeführt werden, die Ihnen gehören oder für deren Bewertung Sie ausdrücklich autorisiert sind.
| Bereich | Ergebnis |
|---|
| Sicherheitslücke | CVE-2026-48907 im Joomla Content Editor (JCE); nicht authentifizierter Profilerstellungs-/Import-Workflow, der zu PHP-Upload und Codeausführung führen kann. |
| Getestete Version | JCE 2.9.99.4. Das Joomla-Administratorpanel zeigte ein verfügbares Update auf 2.9.99.7. |
| Laborergebnis | Die öffentliche PoC-Validierung bestätigte RCE und erstellte eine PHP-Webshell im Joomla /tmp als jce*.xml.php. Befehle wurden als www-data ausgeführt. |
| Wertvollste Telemetrie | Apache access.log, Apache/PHP error.log, auditd execve-Telemetrie und Dateisystemartefakte in joomla_html/tmp. |
| Joomla-Protokolle | Nützlich als unterstützender Kontext, aber allein nicht ausreichend. Joomla-Anwendungsprotokolle rekonstruierten die vollständige Kette nicht: Exploit → Webshell → Befehlsausführung. |
| SOC-Priorität | Kritisch für internetfähige Joomla-Instanzen oder Joomla-Instanzen, die von weniger vertrauenswürdigen internen Netzwerken aus erreichbar sind. |
| Parameter | Wert |
|---|
| Anwendungs-URL | http://172.20.10.3:9999 |
| Joomla-Container | joomla-jce-lab, Image joomla:5-apache |
| Datenbank-Container | joomla-jce-db, Image mariadb:11 |
| Port-Zuordnung | 0.0.0.0:9999 -> 80/tcp |
| Apache | Apache/2.4.67 (Debian) |
| PHP | PHP 8.3.31 |
| MariaDB | 11.8.8-MariaDB |
| Joomla | Joomla 5.4.6 Stable |
| JCE | 2.9.99.4 |
| Testquelle | Windows 11, IP 172.20.10.2 |
| Protokollierung | Apache-Zugriffs-/Fehlerprotokolle, Joomla-Protokolle, auditd, Docker-Protokolle, Dateisystemartefakte |
| Schweregrad | Bedingung | SOC-Maßnahme |
|---|
| Niedrig | GET /plugins/editors/jce/jce.xml von einer ungewöhnlichen Quelle | Als Aufklärung behandeln und mit späteren Anfragen korrelieren. |
| Mittel | POST /index.php?option=com_jce ohne Administrator-Referer oder von einer unbekannten IP | Alarmieren und nachfolgende /tmp-Anfragen überprüfen. |
| Hoch | POST com_jce gefolgt von GET /tmp/*.php oder /tmp/*.xml.php | Dateisystemartefakte und PHP-Fehlerprotokolle sofort überprüfen. |
| Kritisch | GET /tmp/jce*.xml.php?c= oder auditd zeigt www-data startet Shell/Systembefehle | Als bestätigte RCE/Webshell behandeln, Host isolieren oder einschränken und Beweise sichern. |
| Schritt | Aktion | Ziel |
|---|
| 1 | Überprüfen, ob die Instanz JCE <= 2.9.99.4 ausführt oder ein verfügbares JCE-Update anzeigt. | Verwundbaren Zustand bestätigen. |
| 2 | Zugriffs-/Fehlerprotokolle nach com_jce, profiles.import, /tmp/*.php, jce*.xml.php durchsuchen. | Versuchte oder erfolgreiche Ausnutzung identifizieren. |
| 3 | tmp, images und media auf PHP/PHTML/PHAR-Dateien und ungewöhnliche Namen überprüfen. | Webshells oder Hintertüren erkennen. |
| 4 | auditd/EDR auf www-data-gestartete Shells oder Systemdienstprogramme überprüfen. | Codeausführung bestätigen. |
| 5 | Falls Webshell/RCE bestätigt, Host isolieren oder Datenverkehr zur Anwendung einschränken. | Weitere Aktivität stoppen. |
| 6 | Artefakte sichern, Webshells entfernen, JCE-Profile, Joomla-Konten, Cron-Jobs und geänderte Dateien überprüfen. | Triage und Beseitigung. |
| 7 | JCE auf die neueste unterstützte Version aktualisieren und andere Joomla-Instanzen überprüfen. | Schadensbegrenzung und Risikominderung. |
| Priorität | Empfehlung | Begründung |
|---|
| P1 | JCE auf die neueste unterstützte Version für den Joomla/PHP-Zweig aktualisieren. | JCE 2.9.99.4 war im Labor anfällig und Joomla zeigte ein Update auf 2.9.99.7. |
| P1 | Nach dem Patchen auf Webshells und verdächtige JCE-Profile überprüfen. | Das Update schließt den Einstiegspunkt, entfernt jedoch keine vor dem Patchen hinterlassenen Artefakte. |
| P1 | PHP-Ausführung in tmp, images, media, cache und Upload-Verzeichnissen blockieren. | Selbst wenn ein Upload gelingt, unterbricht die Blockierung der PHP-Ausführung die RCE-Kette. |
| P2 | WAF oder Anforderungsfilterung für option=com_jce und task=profiles.import hinzufügen. | Hilft, Ausnutzungsversuche zu erkennen und zu blockieren, bevor sie PHP erreichen. |
| P2 | Apache-Zugriffsprotokolle, PHP-Fehlerprotokolle und auditd/EDR-Telemetrie zentral erfassen. | Joomla-Anwendungsprotokolle allein waren nicht ausreichend. |
| P2 | Regelmäßige Joomla-Erweiterungsinventur und Update-Status-Prüfungen implementieren. | Das Joomla-Panel zeigte das JCE-Update-Signal an; dies sollte in VM/SOC-Workflows einfließen. |
| P3 | Datei-Basislinie pflegen und bei neuen PHP-Dateien außerhalb kontrollierter Verzeichnisse alarmieren. | Hilft, Webshells und Persistenz nach einer Kompromittierung zu erkennen. |
| Technik | Name | Begründung |
|---|
| T1190 | Ausnutzung einer öffentlich zugänglichen Anwendung | HTTP-Ausnutzung des Joomla/JCE-Endpunkts ohne Authentifizierung. |
| T1505.003 | Server-Softwarekomponente: Web-Shell | PHP-Webshell erstellt als /tmp/jce*.xml.php. |
| T1059.004 | Befehl und Skript-Interpreter: Unix-Shell | /usr/bin/dash ausgeführt von www-data. |
| T1033 | Systembesitzer/Benutzerermittlung | whoami und id über die Webshell ausgeführt. |
| T1082 | Systeminformationsermittlung | hostname über die Webshell ausgeführt. |
| T1083 | Datei- und Verzeichnisermittlung | pwd und Aktivität in /var/www/html/tmp. |