
Stirling-PDF v3.2.0 - गंभीर - रिमोट - H2 RUNSCRIPT अवशेष - CREATE OR REPLACE ALIAS import-database
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · stirling-h2-import-leftover
Stirling-PDF 3.2.0 - Stirling Tools
वर्ग: GHSA-mrr8 का H2 RUNSCRIPT अवशेष। पहुँच: रिमोट ROLE_ADMIN।
POST /api/v1/database/import-database @PreAuthorize("hasRole('ADMIN')") है। validateSqlContent को CREATE ALIAS रोकना चाहिए। डिनाइलिस्ट CREATE\s+(FORCE\s+)?ALIAS है। H2 parseCreate ALIAS से पहले OR REPLACE की अनुमति देता है, इसलिए CREATE OR REPLACE ALIAS … FOR "java.lang.…" एलोलिस्ट \bCREATE\b से मेल खाता है और डिनाइलिस्ट से चूक जाता है। वैलिडेटर एक प्रति को सैनिटाइज़ करता है। verifyBackup और प्रोडक्शन RUNSCRIPT FROM ? मूल फ़ाइल को।
GHSA-mrr8-934j-4g8m / CVE-2026-85714 ने मूल FILE_READ / CREATE ALIAS / CSVWRITE स्ट्रिंग्स को बंद कर दिया। यह अवशेष उसी वैलिडेटर पर OR REPLACE का अंतराल है।
एक ROLE_ADMIN इम्पोर्ट एक Java alias बनाता है जिसे डिनाइलिस्ट को रोकना चाहिए। बाद में बैकअप डाउनलोड में हमलावर का SQL होता है। मूल सलाहकार से होस्ट FILE_READ / FileUtils RCE अनुमानित है, इस पैक में लैब-प्रमाणित नहीं।
| ID | अभी कोई CVE नहीं |
| CWE | CWE-94 / CWE-184 |
| CVSS | 9.1 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
| उत्पाद | Stirling-PDF |
| प्रभावित | v3.2.0 (a7e593728dd9aa81e75318a949789d3c2e9ee754), इमेज stirlingtools/stirling-pdf:3.2.0-fat |
| प्रमाणीकरण | ROLE_ADMIN, डिफ़ॉल्ट एम्बेडेड H2। डिफ़ॉल्ट पहला एडमिन admin / stirling जब तक बदला न जाए |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18152 |
Stirling-PDF v3.2.0 अवशेष श्रृंखला का अवशेष। सहोदर: stirling-storage-folder-idor (प्रोसेसिंग-फ़ोल्डर निहित स्टोरेज रूट)। यह पैक H2 इम्पोर्ट अवशेष है।
डिफ़ॉल्ट एम्बेडेड H2 के साथ login-on proprietary/fat पर ROLE_ADMIN। जब initialLogin खाली हो तो डिफ़ॉल्ट पहला एडमिन admin / stirling होता है। उन्हें unauth की आवश्यकता नहीं है। Lite इमेज और PostgreSQL डेटासोर्स इस कंट्रोलर को शिप नहीं करते।
विशेषाधिकार तालिका (विस्तृत)। Signal-Server Dropwizard admin के समान मानक: मेथड + पाथ, वह कॉल क्या प्रदान करती है, recon बनाम integrity बनाम availability, लैब-प्रमाणित बनाम अनुमानित, निकटवर्ती सतह जो बंद रहती है।
| अक्ष | विधि + पथ | अनुदान | उत्पत्ति |
|---|---|---|---|
| अखंडता | ROLE_ADMIN POST /api/v1/database/import-database के साथ CREATE OR REPLACE ALIAS lab_nano FOR "java.lang.System.nanoTime" और INSERT INTO lab_w VALUES('STIRLING-H2-IMPORT-WITNESS') | 200 importIntoDatabaseSuccessed। Java alias बनाया गया। हमलावर SQL RUNSCRIPT के अंतर्गत कमिट किया गया | प्रयोगशाला-प्रमाणित |
| रेकॉन | ROLE_ADMIN GET /api/v1/database/createDatabaseBackup फिर GET /api/v1/database/download/backup_202610172328.sql | 50432-बाइट बैकअप में STIRLING-H2-IMPORT-WITNESS शामिल है | प्रयोगशाला-प्रमाणित |
| रेकॉन / होस्ट फ़ाइल | वही इम्पोर्ट जो EXECUTE IMMEDIATE में FILE_READ('/etc/os-release') लपेटता है | 500 Backup verification failed। होस्ट बाइट्स किसी बैकअप में नहीं | प्रयोगशाला अतिरिक्त विफल |
| अखंडता / RCE | alias org.h2.store.fs.FileUtils और एक Python user-site .pth का CSVWRITE, फिर office convert | सेवा खाते के रूप में कमांड निष्पादन | GHSA-mrr8 से अनुमानित। यहाँ प्रयोगशाला में परीक्षण नहीं किया गया |
| उपलब्धता | कोई दावा नहीं | इम्पोर्ट एप्लिकेशन तालिकाओं को बदल सकता है | अनुमानित। प्रयोगशाला ऑरेकल नहीं |
इस पिन पर बंद रहता है
| अक्ष | विधि + पथ | यह क्यों बंद है |
|---|---|---|
| अखंडता | अन-ऑथ POST /api/v1/database/import-database | 401 Authentication required। जब HTTP permitAll हो तब भी मेथड सुरक्षा ADMIN चालू रहती है |
| अखंडता | ROLE_ADMIN द्वारा सादे CREATE ALIAS का इम्पोर्ट | 500 SQL script contains disallowed operations and was rejected |
| अखंडता | lite / DISABLE_ADDITIONAL_FEATURES इमेज | DatabaseController अनुपस्थित |
| अखंडता | कस्टम PostgreSQL डेटासोर्स | @Conditional(H2SQLCondition.class) |
मैं रिवर्स शेल का दावा नहीं कर रहा हूँ, और मैं होस्ट FILE_READ को प्रयोगशाला-प्रमाणित नहीं मान रहा हूँ। जो बचा है वह वही डिनाइलिस्ट चूक है जो CREATE OR REPLACE ALIAS … FOR "java.lang.…" को RUNSCRIPT से गुज़रने देती है।
v3.2.0 अभी भी GHSA-mrr8 वैलिडेटर के साथ आता है। मैं उसी टैग पर बैठा और DENIED_PATTERNS पढ़ा। alias पंक्ति है CREATE\s+(FORCE\s+)?ALIAS। H2 का पार्सर CREATE OR REPLACE ALIAS स्वीकार करता है। परीक्षण स्पष्ट CREATE ALIAS / FILE_READ( स्ट्रिंग्स को कवर करते हैं। वे OR REPLACE को कवर नहीं करते।
प्रयोगशाला डिफ़ॉल्ट admin के रूप में लॉग इन करती है, change-password-on-login पूरा करती है, एक अस्वीकृत CREATE ALIAS इम्पोर्ट करती है (500), फिर CREATE OR REPLACE ALIAS और एक INSERT साक्षी इम्पोर्ट करती है (200)। एक बैकअप डाउनलोड में साक्षी शामिल है।
गलत मोड़: अन-ऑथ इम्पोर्ट को इन-स्कोप मानना (401); EXECUTE IMMEDIATE + FILE_READ को बचा हुआ मानना (verifyBackup 500); मूल अस्पष्टीकृत CREATE ALIAS को अभी भी सक्रिय मानना (यह अस्वीकृत है)।
python3 stirling-h2-import-leftover-Abraxas-Labs.py
या
cd lab
./run.sh
केवल http://127.0.0.1:18152 को लक्षित करें। इमेज stirlingtools/stirling-pdf:3.2.0-fat। Docker आवश्यक। लॉगिन-चालू। लॉन्चर lab/ में chdir करता है और run.sh को exec करता है।
IOC unauth-import http=401
IOC negative-import http=500 ... disallowed operations ...
IOC leftover-import bypass=create-or-replace-alias http=200 ... importIntoDatabaseSuccessed
IOC download file=backup_202610172328.sql http=200 bytes=50432 witness=1
SUCCESS stirling-h2-import-leftover negative-denied=yes bypass=create-or-replace-alias backup-has-witness=yes file=backup_202610172328.sql unauth-import=401 STIRLING-H2-IMPORT-WITNESS
denylist को बढ़ाएँ ताकि OR REPLACE CREATE और ALIAS के बीच न बैठ सके। validateSqlContent को उन्हीं बाइट्स पर चलाएँ जिन्हें RUNSCRIPT निष्पादित करेगा। EXECUTE IMMEDIATE को अस्वीकार करें जब तक कि आंतरिक SQL को भी स्कैन न किया जाए।
Pattern.compile("(?i)\\bCREATE\\s+(OR\\s+REPLACE\\s+)?(FORCE\\s+)?ALIAS\\b")
पैच किए गए बिल्ड के विरुद्ध लूपबैक क्लाइंट को फिर से चलाएँ: शेष आयात को 400/500 देना चाहिए, जैसे कि सादा CREATE ALIAS पहले से देता है।
तब तक, "मैंने CREATE ALIAS को प्रतिबंधित किया" को "मैंने H2 Java aliases को प्रतिबंधित किया" न मानें।