A SQL injection vulnerability in `FilterEngine.create_sqla_query()` allows any authenticated Rucio user to execute arbitrary SQL against the backend database through the DID search endpoint (`GET /dids/<scope>/dids/search`). On Oracle deployments attacker-controlled filter keys and values are interpolated directly into `sqlalchemy.text()` via Python `.format()`, completely bypassing parameterization. This enables full database compromise including extraction of authentication tokens, password hashes, and all managed data identifiers. This affects versions 1.27.0 and later before 35.8.5, 38.5.5, 39.4.2, and 40.1.1.
The vulnerability exists in `lib/rucio/core/did_meta_plugins/filter_engine.py` within the `create_sqla_query()` method. When the database dialect is Oracle, filter expressions for JSON metadata columns are constructed using `text()` with Python string formatting. Both `key` and `value` are attacker-controlled strings derived from HTTP query parameters. The `text()` function creates a raw SQL fragment — it does **not** escape or parameterize its contents.
Any authenticated Rucio user can exploit this through the DID search API to execute arbitrary SQL against the backend database. This can expose all managed data identifiers and sensitive tables such as identities, tokens, accounts, rse_settings, and rules, and may allow modification of database contents. The issue affects Oracle deployments using the default json_meta plugin and does not affect PostgreSQL or MySQL deployments using that plugin.
This vulnerability has been fixed in versions 35.8.5, 38.5.5, 39.4.2, and 40.1.1.
A critical SQL injection vulnerability in Rucio's DID search endpoint allows authenticated users to execute arbitrary SQL queries against Oracle backend databases. The vulnerability exists in the FilterEngine.create_sqla_query() method where filter parameters bypass parameterization through unsafe string formatting. This affects Rucio versions 1.27.0 and later before patched versions 35.8.5, 38.5.5, 39.4.2, and 40.1.1, enabling complete database compromise including extraction of authentication tokens, credentials, and sensitive data identifiers.
IMMEDIATE ACTIONS:
1. Identify all Rucio deployments using Oracle backends running versions 1.27.0 through 40.0.x
2. Restrict network access to DID search endpoints (/dids/*/dids/search) to trusted internal networks only
3. Implement Web Application Firewall (WAF) rules to detect SQL injection patterns in filter parameters
4. Enable comprehensive audit logging for all DID search API calls with full query parameter capture
5. Review access logs for suspicious filter parameter patterns containing SQL keywords (UNION, SELECT, DROP, etc.)
PATCHING GUIDANCE:
1. Upgrade immediately to patched versions: 35.8.5, 38.5.5, 39.4.2, or 40.1.1
2. Test patches in non-production Oracle environments first
3. Plan maintenance window for production upgrades with database backup
4. Verify parameterized queries are used post-upgrade
COMPENSATING CONTROLS (if immediate patching not possible):
1. Implement database-level access controls restricting Rucio service account to minimal required permissions
2. Deploy database activity monitoring (DAM) to detect anomalous SQL patterns
3. Use Oracle Virtual Private Database (VPD) to restrict data access by Rucio user context
4. Implement query result set limits at database level
5. Disable or restrict the json_meta plugin if not essential
DETECTION RULES:
1. Monitor for filter parameters containing: UNION, SELECT, INSERT, UPDATE, DELETE, DROP, EXEC, EXECUTE, OR 1=1
2. Alert on DID search requests with filter values exceeding 500 characters
3. Detect multiple failed DID search attempts followed by successful ones (reconnaissance pattern)
4. Monitor database error logs for SQL syntax errors from Rucio service account
5. Track unusual data extraction queries (SELECT * FROM identities, tokens, accounts tables)
الإجراءات الفورية:
1. تحديد جميع نشرات Rucio التي تستخدم خوادم Oracle التي تعمل بالإصدارات 1.27.0 إلى 40.0.x
2. تقييد الوصول إلى نقاط نهاية البحث عن DID (/dids/*/dids/search) للشبكات الداخلية الموثوقة فقط
3. تنفيذ قواعد جدار الحماية لتطبيقات الويب (WAF) للكشف عن أنماط حقن SQL في معاملات التصفية
4. تفعيل تسجيل التدقيق الشامل لجميع استدعاءات API للبحث عن DID مع التقاط معاملات الاستعلام الكاملة
5. مراجعة سجلات الوصول للأنماط المريبة في معاملات التصفية التي تحتوي على كلمات رئيسية SQL
إرشادات التصحيح:
1. الترقية فوراً إلى الإصدارات المصححة: 35.8.5 و 38.5.5 و 39.4.2 أو 40.1.1
2. اختبار التصحيحات في بيئات Oracle غير الإنتاجية أولاً
3. التخطيط لنافذة صيانة لترقيات الإنتاج مع نسخ احتياطي من قاعدة البيانات
4. التحقق من استخدام الاستعلامات المعاملة بعد الترقية
الضوابط البديلة:
1. تنفيذ ضوابط الوصول على مستوى قاعدة البيانات التي تقيد حساب خدمة Rucio بالأذونات المطلوبة الحد الأدنى
2. نشر مراقبة نشاط قاعدة البيانات (DAM) للكشف عن أنماط SQL الشاذة
3. استخدام Oracle Virtual Private Database (VPD) لتقييد الوصول إلى البيانات حسب سياق مستخدم Rucio
4. تنفيذ حدود مجموعة نتائج الاستعلام على مستوى قاعدة البيانات
5. تعطيل أو تقييد مكون json_meta إذا لم يكن ضرورياً
قواعد الكشف:
1. مراقبة معاملات التصفية التي تحتوي على: UNION و SELECT و INSERT و UPDATE و DELETE و DROP
2. التنبيه على طلبات البحث عن DID مع قيم تصفية تتجاوز 500 حرف
3. الكشف عن محاولات بحث DID متعددة فاشلة متبوعة بنجاح
4. مراقبة سجلات أخطاء قاعدة البيانات لأخطاء بناء جملة SQL من حساب خدمة Rucio
5. تتبع استعلامات استخراج البيانات غير المعتادة