
CVE-2026-13233 (Drupal OpenAI Provider, SA-CONTRIB-2026-053): response-URL SSRF / स्थानीय फ़ाइल पठन। अविश्वसनीय अपस्ट्रीम, प्रॉम्प्ट नहीं। सुरक्षित रीप्रोड्यूसर + डिटेक्शन। 1.1.1/1.2.2 में ठीक किया गया।
अविश्वसनीय अपस्ट्रीम: वह प्रदाता जिसने वह URL लाया जिसे उसकी प्रतिक्रिया ने लाने को कहा।
Drupal OpenAI Provider (ai_provider_openai) · SSRF (CWE-918) · CVE-2026-13233 · SA-CONTRIB-2026-053
स्थिति: समन्वित प्रकटीकरण पूर्ण (2026-07-10)। Drupal सुरक्षा टीम को निजी तौर पर रिपोर्ट किया गया, सुधारा गया, और CVE-2026-13233 / एडवाइज़री SA-CONTRIB-2026-053 (रेटेड मध्यम रूप से महत्वपूर्ण) के रूप में प्रकाशित। लेखक को खोजकर्ता और सुधार डेवलपर के रूप में श्रेय दिया गया।
एक AI "कनेक्शन बिंदु" पर क्लासिक प्राधिकरण / इनपुट-सत्यापन दोष का अध्ययन: एक
AI छवि-निर्माण प्रदाता ने बिना किसी स्कीम अनुमति-सूची वाले सामान्य-उद्देश्य फ़ंक्शन का उपयोग करके अपस्ट्रीम API प्रतिक्रिया में निहित URL लाया।
उन परिनियोजनों पर जहाँ कॉन्फ़िगर किया गया अपस्ट्रीम विश्वसनीय डिफ़ॉल्ट नहीं है (bring-your-own-endpoint / प्रॉक्सी / self-hosted गेटवे / समझौता किया गया
रिले), प्रतिक्रिया सर्वर को file:// या किसी आंतरिक पते की ओर इंगित कर सकती है।
सिंक तक पहुँचने वाला अविश्वसनीय इनपुट अपस्ट्रीम प्रतिक्रिया URL है — न कि उपयोगकर्ता का प्रॉम्प्ट।
file:// स्थानीय फ़ाइल पठन शामिल था; लेखक के
आंतरिक विश्लेषण ने इसे CWE-73 / CWE-441 से भी मैप किया।3.1 / सशर्त 5.3
(Medium); पिछले 6.5 / 7.4 वापस लिए गए, और मध्य रेटिंग ने उसे सही ठहराया।ai_provider_openai) < 1.1.1 और 1.2.0–1.2.1 (1.2.1 का ऑडिट किया गया)सभी सत्यापन एक स्वामित्व वाले, नेटवर्क-पृथक सैंडबॉक्स में एक मॉक अपस्ट्रीम के विरुद्ध चले। असली OpenAI API को कभी कॉल नहीं किया गया। लीक ओरेकल केवल सिंथेटिक थे।
पुष्टि की गई (गतिशील रूप से प्रदर्शित):
settings.php पठन sha256 बाइट-मिलान (35,182 B) द्वारा पुष्ट — सामग्री कभी मुद्रित नहीं; इसलिए DB क्रेडेंशियल दायरे में हैं।असत्यापित (स्पष्ट रूप से दावा नहीं किया गया):
प्रभावित नहीं: TLS पर डिफ़ॉल्ट api.openai.com। host सेटिंग व्यवस्थापक / config-sync / डिप्लॉय
नियंत्रित है — एक रनटाइम गैर-व्यवस्थापक हमलावर इसे बदल नहीं सकता।
प्रतिक्रिया URL को एक सामान्य-उद्देश्य फ़ेच को पारित किया गया जो प्रत्येक पंजीकृत PHP स्ट्रीम
रैपर (file, php, http, data, phar, …) का सम्मान करता है। response_format डिफ़ॉल्ट रूप से url है, इसलिए कमजोर
शाखा डिफ़ॉल्ट पथ है। file:// PHP का डिफ़ॉल्ट फ़ाइलसिस्टम रैपर है और
allow_url_fopen द्वारा गेटेड नहीं है (पहले का "allow_url_fopen आवश्यक है" दावा गलत था और वापस ले लिया गया है)।
प्रिमिटिव को ठीक करें, केवल कॉल साइट को नहीं:
http/https है; रीडायरेक्ट अक्षम करें (एक 30x file:// पर उछल सकता है)।file://…, http://169.254.169.254/…, और एक 302→file://
रीडायरेक्ट — सभी अस्वीकार किए जाने चाहिए।पूर्ण दिशा: docs/fix-direction.md।
.
├── README.md # this file (English, canonical)
├── README_ja.md # Japanese mirror
├── SECURITY.md # reporting policy + responsible-disclosure disclaimer
├── .gitignore # blocks secrets / primary evidence from being committed
├── docs/
│ └── fix-direction.md # root-cause fix + variant hunt + minimal-diff sketch (EN)
├── reproducer/ # SAFE reproducer only (sandbox, mock upstream, benign oracle)
│ ├── README.md # how to stand up the network-isolated sandbox
│ ├── verdict.md # what "success" means: raw-byte match + 200-vs-403 + exit codes
│ ├── mock-openai-server.py # benign mock; default happy-path PNG, ssrf_demo → file:///etc/hostname only
│ └── docker-compose.yml # TEMPLATE: isolated Drupal sandbox + mock (you add the vulnerable target)
├── detections/
│ ├── README.md
│ ├── sigma/web-egress-to-internal-after-imagegen.yml
│ ├── sigma/php-sensitive-file-open.yml
│ ├── sentinel/imagegen-egress-correlation.kql
│ └── splunk/imagegen-content-type-mismatch.spl
└── timeline.md # disclosure timeline (single source of truth)
दस्तावेज़ वर्तमान में जापानी में हैं (
.ja.md); अंग्रेज़ी विहित अनुवाद एक TODO है। इस रिपॉजिटरी से रोके गए: आर्मिंग पेलोड और कोई भी टर्नकी फ़ाइल-पठन PoC। सार्वजनिकreproducer/एक एकल बेनाइन ओरेकल (/etc/hostname) का उपयोग करके मॉक के विरुद्ध दोष तंत्र प्रदर्शित करता है — कोई मनमाना-पथ पठन नहीं, कोईsettings.phpप्राप्ति नहीं, कोई IMDS नहीं। यह लाइव साइटों के विरुद्ध हथियार नहीं है। 1.1.1 / 1.2.2 पर अपडेट करें।
लक्ष्य: किसी शोधकर्ता को लाइव-लक्ष्य शोषण प्रदान किए बिना या रहस्य उजागर किए बिना दोष वर्ग की पुष्टि करने देना। सब कुछ ऑफ़लाइन चलता है।
docker compose एक पृथक नेटवर्क पर (भाषा-प्रिमिटिव जाँचों के लिए --network none)।
कोई क्रेडेंशियल माउंट नहीं। मॉक असली API से कभी बात नहीं करता।host" की भूमिका निभाता है।
यह एक सिंथेटिक लक्ष्य URL लौटाने के लिए आउट-ऑफ-बैंड (प्रॉम्प्ट के माध्यम से नहीं) सशस्त्र है — यह सही किए गए
हमलावर मॉडल को कूटबद्ध करता है (अपस्ट्रीम URL चुनता है, उपयोगकर्ता केवल ट्रिगर करता है)।file:///etc/hostname और केवल ऐप कंटेनर के अंदर लिखा गया प्रति-रन अद्वितीय मार्कर → सिद्ध करता है कि ऐप ने एक
अपस्ट्रीम-चयनित पथ पढ़ा (मार्कर मॉक पर अनुपस्थित)।settings.php sha256 बाइट-मिलान द्वारा सत्यापित, सामग्री कभी जारी नहीं → बिना प्रकट किए "DB क्रेडेंशियल दायरे में" सिद्ध करता है।0 शोषण-योग्य / 1 पूर्व-शर्त /
2 पुनरुत्पादित-नहीं / सफाई-विफल / त्रुटि)। देखें ।देखें reproducer/README.md।
देखें timeline.md। सारांश:
व्यवसायी पहचानें detections/ में हैं; तर्क docs/detection-engineering.md में। संक्षेप में:
169.254.169.254 / लूपबैक / RFC1918 तक असामान्य ईग्रेस (प्रॉक्सी / EDR) से सहसंबद्ध करें। केवल ईग्रेस पर अलर्ट न करें।file:// पठन कभी नेटवर्क को नहीं छूते — होस्ट ऑडिटिंग (auditd/EDR) के माध्यम से वेब प्रक्रियाओं द्वारा संवेदनशील-फ़ाइल खोलने का पता लगाएँ, बेसलाइन किया हुआ ताकि केवल इमेज-जन अनुरोध के भीतर के ऑफ-पैटर्न पठन ही फायर हों।image/*-घोषित बाइट्स जिनके मैजिक बाइट्स एक छवि नहीं हैं की खोज करें।{request_id, actor, target_url, scheme, resolved_ip, content_type}। अकेले मानक लॉग इसे नहीं पकड़ेंगे।file:// डिफ़ॉल्ट फ़ाइलसिस्टम रैपर है; allow_url_fopen द्वारा गेटेड नहीं)reproducer/ केवल-सैंडबॉक्स है और सिंथेटिक ओरेकल का उपयोग करता है। यह नहीं है एक लाइव-लक्ष्य शोषण और इसमें
कोई रहस्य नहीं हैं। इसे उन प्रणालियों के विरुद्ध न चलाएँ जिनके आप स्वामी नहीं हैं और जिनके परीक्षण हेतु अधिकृत नहीं हैं।सभी शोध लेखक द्वारा एक स्व-स्वामित्व वाले, नेटवर्क-पृथक सैंडबॉक्स में, एक मॉक अपस्ट्रीम के विरुद्ध किए गए —
असली विक्रेता API से कभी संपर्क नहीं किया गया, और किसी तृतीय-पक्ष प्रणाली का कभी परीक्षण नहीं किया गया। निष्कर्ष को पहले
Drupal सुरक्षा टीम को निजी रूप से रिपोर्ट किया गया और केवल सुधार और एडवाइज़री के साथ तालमेल में प्रकाशित किया गया
(SA-CONTRIB-2026-053, CVE-2026-13233); विक्रेता की रेटिंग मध्यम रूप से महत्वपूर्ण है। लेखक के CVSS आंकड़े
एक अनंतिम स्व-मूल्यांकन हैं, आधिकारिक स्कोर नहीं, और जानबूझकर रूढ़िवादी रखे गए (कोई
CVSS Critical/High नहीं) — विक्रेता की मध्य-बैंड रेटिंग के अनुरूप। यह सामग्री रक्षात्मक और
शैक्षिक उद्देश्यों के लिए है। देखें SECURITY.md।
399| दिनांक | घटना |
|---|
| 2026-06-10 | स्थैतिक समीक्षा सिंक का पता लगाती है; निश्चित-पथ file:// पठन गतिशील रूप से पुष्ट |
| 2026-06-11 | मनमाना-पथ पठन + settings.php sha256 मिलान + आंतरिक HTTP SSRF पुष्ट |
| 2026-06-11 | प्रोडक्शन-उपभोक्ता पहुँच (ऑटोमेटर आंतरिक-पथ; FWA वैध-HTTP एक्सफिल) |
| 2026-06-11 | स्वतंत्र सहकर्मी समीक्षा अति-दावों को सुधारती है (हमलावर मॉडल, CVSS, allow_url_fopen); सबमिशन HOLD पर रखा गया |
| 2026-06/07 | HOLD आइटम साफ़ किए गए; Drupal सुरक्षा टीम को निजी रूप से रिपोर्ट; बेस-क्लास जुड़वाँ drupal/ai को ध्वजांकित |
| 2026-07-10 | सुधारित रिलीज़ 1.1.1 / 1.2.2; एडवाइज़री SA-CONTRIB-2026-053 और CVE-2026-13233 प्रकाशित; लेखक को खोजकर्ता और सुधार डेवलपर के रूप में श्रेय |