Vivimos en un escenario donde no se salvan de vulnerabilidades ni programas, ni sistemas operativos, ni navegadores ni tan siquiera los firmwares de sistemas NAS Synology, que en este caso se trate de un sistema basado en Linux. Andrea Fabrizi ha publicado una serie de vulnerabilidades localizadas en DSM 4.3-3776 o inferior y que a día de hoy no están parcheadas.
1.- Descarga remota de archivos: Un usuario autenticado pero de bajo nivel podría descargar cualquier archivo del sistema, incluida la ruta /etc/shadow, passwords de SAMBA y archivos de otros usuarios sin restricción alguna.
La vulnerabilidad está localizada en /webman/wallpaper.cgi. El CGI coge como parámetro el path completo de la imagen a descargar codificada sólo en formato ASCII Hexadecimal pero no está solo limitado a imágenes, únicamente existe una comprobación de inicio del path (usr/syno/synoman/webman) que podría ser alterada con un ataque ../
Ejemplo para acceder a /etc/shadow:
2f7573722f73796e6f2f73796e6f6d616e2f7765626d616e2f2e2e2f2e2e2f2e2e2f2e2e
2f6574632f736861646f77
(/usr/syno/synoman/webman/../../../../etc/shadow)
------------------------------------------
GET /webman/wallpaper.cgi?path=AABBCCDDEEFF11223344 HTTP/1.1
Host: 127.0.0.1:5000
Cookie: stay_login=0; id=XXXXXXXXXXX
------------------------------------------
2.- Command Injection: Vulnerabilidad presente en el módulo "/webman/modules/ControlPanel/ modules/externaldevices.cgi", el CGI permite la ejecución de comandos arbitrarios a cualquier usuario administrativo con privilegios de root.
------------------------------------------
POST /webman/modules/ControlPanel/modules/externaldevices.cgi HTTP/1.1
Host: 127.0.0.1:5000
User-Agent: ls
Cookie: stay_login=0; id=XXXXXXXXXXX
Content-Length: 128
action=apply&device_name=aa&printerid=1.1.1.1-aa';$HTTP_USER_AGENT>/tmp/
output+%23&printer_mode=netPrinter&eject_netprinter=true
------------------------------------------
Colocando el comando a ejecutar como string User_Agent se nos devolvería el resultado listo en /tmp/output file.
3.- Descarga remota parcial de contenidos: Para la localización DSM utiliza diferentes CGI's, algunos de estos integran el parámetro de lenguaje (por ejemplo "enu" para inglés) y devuelven un objeto Json que contiene la localización de diferentes strings en formato diccionario. Los strings son cogidos de un archivo local con el siguiente path:
[current_dir]/texts/[lang_parameter_value]/strings
El apéndice "/strings" aparece al final del path para prevenir injección de otras ubicaciones de modo que cualquier valor usando el parámetro lang debería invalidado en caso de no ser correcto. Lo interesante de este sistema es que la tura completa de archivos se contruye a través de una función snprintf tipo:
snprintf(&s, 0x80u, "texts/%s/strings", lang)
Esto significa que si el valor de lang es demasiado grande podría causar un desbordamiento al ser superior de los 128 bytes soportados por snprintf y salirse de la ruta "/", ejemplo:
".////////////////////////////////////////////////////////////////////////////////////////../../../../../etc/synoinfo.conf" permite acceder al contenido de /etc/synoinfo.conf.
Otro problema añadido es que el archivo de entrada CGI debe tener un formato de clave/valor tipo: key1= string1, lo que viene a significar que podríamos conseguir leer diferentes bloques de disco (por ejemplo: /dev/vg1000/lv), siendo el volumen de datos de volcado muy grande. Las pruebas realizadas por Andrea Fabrizi ha conseguido recuperar entre el 25/30% de información de una unidad con diferentes archivos de documentos, imágenes, otros... Este sistema nos permitiría volcar información de cualquier unidad conectada a DSM.
Este sistema es vulnerable afecta a dos CGI's concretos:
- /scripts/uistrings.cgi
- /webfm/webUI/uistrings.cgi
------------------------------------------
GET /scripts/uistrings.cgi?lang=XXXXXXXXX HTTP/1.1
Host: 127.0.0.1:5000
------------------------------------------
4.- XSS: Un clásico script Cross-site afecta al siguiente CGI:
/webman/info.cgi?host=XXXX&target=XXXX&add=XXXX
3 comentarios:
Desde hace una o dos semanas ya pusieron una revisión del firmware que creo que arreglaba problemas de seguridad. Es la versión 4.3-3776-1.
Salió un update 4.3-3776-1 que corregía principalmente el problema del wallpaper.cgi creo, hace 4 días salió el 4.3-3776-2 que termina de corregir estas vulnerabilidades, tenía pendiente publicar esta entrada :)
Publicada la entrada de las actualizaciones, gracias por el aviso!
Publicar un comentario