
Parchea tu dispositivo D-Link afectado por CVE-2024-3272
¿Eres una de las más de 92 000 personas1 atrapadas con un NAS de D-Link vulnerable a CVE-2024-3272 y sin parche a la vista?
Esta herramienta usa el propio exploit para parchear un dispositivo vulnerable.
1: Consulta la divulgación original en referencias
Dinkleberry ejecutará un comando para reemplazar el archivo vulnerable nas_sharing.cgi con una versión parcheada, sobrescribiendo la llamada a system() con NOPs.
La carpeta /usr/local/modules (donde vive el archivo) es de solo lectura, así que en su lugar se crea una copia en /usr/local/config, y el enlace simbólico en /var/www/cgi-bin se actualiza para apuntar a la versión más segura.
He elegido solo aplicar NOP a la llamada a system para que el comando siga respondiendo como siempre, solo que sin ejecutar nada realmente.
[!NOTE] El sistema de archivos se recarga desde la flash al arrancar. Aplicar este parche solo funcionará hasta que reinicies el dispositivo. Si quieres una solución más permanente, tendrás que re-flashear el firmware, quizás con Debian
aliask:~/git/dinkleberry$ python3 ./src/main.py -h 10:01:02
usage: dinkleberry [-h] [--telnet] [--kill-telnet] [--test] [--verbose] target
positional arguments:
target Target NAS to patch
options:
-h, --help show this help message and exit
--telnet Start telnet server
--kill-telnet Stop telnet server
--test Test if device is vulnerable
--verbose, -v Set this to print debug messages
Si no se aplican banderas opcionales, el script realiza el parcheo.
Si solo quieres curiosear en el dispositivo, usa el comando --telnet, que inicia una sesión telnet en el puerto 23.
Esto es ridículamente inseguro, pero tu dispositivo ya es ridículamente inseguro, así que más vale aprovechar la shell cómoda.
[!CAUTION] Usa esta herramienta bajo tu propio riesgo. Está modificando el software real del dispositivo.
No soy responsable de:
- Que tu dispositivo deje de funcionar
- La pérdida de datos almacenados en el NAS
- Provocar un incendio
- Que el TA que estaba explotando felizmente tu dispositivo se enfade
Durante el análisis de los binarios nas_sharing.cgi y libsmbif.so, quedó claro rápidamente que el software de este dispositivo es extremadamente vulnerable. Del tipo "no mantenible, reescríbelo desde cero".
Hay como 80 llamadas a system() solo en nas_sharing.cgi; muchas de ellas tienen una vía para la entrada del usuario. No me he molestado en analizarlas todas para buscar más agujeros que parchear, pero aquí tienes un ejemplo de categoría S:
/* ¿Por qué usar system() en lugar de fopen/fwrite de libc?
¿Y si quieres escribir una cadena larga o tu nombre de archivo es largo?
Dolorosamente obvio patio de recreo de inyección de comandos 🤦 */
void append_to_file(const char* string, const char* file) {
char s_cmd[1024];
sprintf(s_cmd, "echo %s >> %s", string, file);
system(s_cmd);
return;
}
Además de todas estas llamadas a system insensatas, hay más desbordamientos de búfer de los que puedas sacudir un palo, y yo puedo sacudir muchos palos.
Este CVE está en la lista KEV de CISA - Si tienes uno de estos aparatos en internet, desconéctalo. Ya.
Quizás incluso sigas el consejo de D-Link y reemplaces el dispositivo EOL. Pero desde luego yo no compraría un producto de D-Link.