
Analyse binaire et exploitation de CVE-2019-1663, un débordement de tampon dans la gestion Web du routeur Cisco, y compris la cause racine, les étapes d'exploitation et la découverte de gadgets ROP.
Auteur : Corentin Wolff
La vulnérabilité provient de la fonction 0x0002BF64, qui utilise incorrectement la fonction strcpy, ce qui la rend sujette aux attaques par débordement de tampon. Pour plus de clarté, cette fonction a été renommée Login. Voici un extrait illustrant le problème :
undefined4 Login(char *param_1, char *param_2, char *param_3, int param_4) { ... }
Dans cet extrait, la fonction strcpy est utilisée de manière inappropriée, provoquant une vulnérabilité de débordement de tampon :
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;
}
}
Cette partie du code vérifie le nom d'utilisateur :
if (iVar2 != 0) {
syslog(6, "Web management login failed, user=%s\n", param_1);
}
Le paramètre param_1 est identifié comme le champ du nom d'utilisateur.
De même, param_2 correspond au mot de passe, tandis que param_3 est identifié comme httpd_user.
La variable login_flag représente les états de connexion : 0 → Erreur de connexion 1 → Connexion administrateur réussie 2 → Connexion administrateur refusée en raison d'une session existante 3 → Connexion administrateur forçant la déconnexion
La vulnérabilité est un débordement de tampon causé par une mauvaise utilisation de la fonction strcpy.
La fonction strcpy ne vérifie pas la taille de la chaîne source par rapport à la capacité du tampon de destination. Cela permet d'écraser les régions mémoire adjacentes.
CVE-2019-1663 exploite l'absence de validation de la taille des entrées sur certains modèles de routeurs 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
Cela déclenche une erreur de segmentation. En déterminant la taille optimale du tampon, les attaquants peuvent injecter et exécuter du code malveillant.
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 : Copie de tampon sans vérification de la taille de l'entrée
https://cwe.mitre.org/data/definitions/120.html
MITRE CWE-787 : Écriture hors limites
https://cwe.mitre.org/data/definitions/787.html
Aperçu OWASP sur le débordement de tampon
https://owasp.org/www-community/vulnerabilities/Buffer_Overflow
« Buffer Overflow » sur Microsoft Learn
https://learn.microsoft.com/en-us/cpp/security/security-best-practices-for-c-cpp
Normes de codage sécurisé 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
Exploitation de CVE-2019-1663 - Write Up par Quentin Kaiser
https://quentinkaiser.be/exploitdev/2019/08/30/exploit-cve-2019-1663