
ETS5 Password Recovery Tool es una prueba de concepto para CVE-2021-36799
¿Has olvidado la contraseña de uno de tus proyectos de ETS5 y ya no puedes acceder a la configuración de la instalación KNX? La Herramienta de Recuperación de Contraseñas ETS5 te permite recuperar la contraseña del proyecto y otros secretos guardados en el almacén de proyectos del ETS5. Esto es posible porque el ETS5 tiene un fallo de diseño significativo: utiliza una contraseña y una sal fijas en el código para cifrar la información del proyecto (CVE-2021-36799).
Almacenar secretos criptográficos en el código fuente es desaconsejable porque pueden recuperarse mediante ingeniería inversa del software, ofreciendo así poca más protección que almacenar la información en texto claro. Esto puede suponer una amenaza para la seguridad de las instalaciones KNX. Si un atacante logra acceder a los archivos del almacén de proyectos, puede descifrarlos a pesar de no conocer la contraseña del proyecto. La información contenida permite espiar, suplantar y reconfigurar dispositivos KNX. Esto es particularmente problemático porque el ETS5 da a los usuarios la impresión de que la contraseña del proyecto se usaría para cifrar la información del proyecto, no solo para proyectos exportados. Por lo tanto, es probable que muchos usuarios e integradores de sistemas no hayan tomado medidas adicionales para garantizar la confidencialidad del almacén de proyectos. Si el ETS5 implementara correctamente el cifrado y se eligiera una contraseña de proyecto fuerte, supondría un desafío mucho mayor para un atacante, incluso si lograra acceso remoto al ordenador.
La siguiente información confidencial está cifrada de manera inadecuada:
La Herramienta de Recuperación de Contraseñas ETS5 es una prueba de concepto que demuestra el problema descifrando y mostrando la información sensible. Se desarrolló como parte de la divulgación coordinada de vulnerabilidades y se publica con permiso de la KNX Association. La publicación de la herramienta tiene los siguientes propósitos:
ADVERTENCIA: Use esta herramienta solo si está legalmente autorizado para ver la información del proyecto. Eludir las medidas de seguridad, incluso las ineficaces, para acceder a información que no tiene permiso de ver, puede ser un delito en su jurisdicción.
El ejecutable se puede descargar desde la sección de lanzamientos. No necesita instalación y se puede colocar en cualquier directorio de su elección.
Alternativamente, si no desea ejecutar un binario no confiable en su sistema, puede descifrar atributos individuales de los archivos XML del proyecto en el sitio web CyberChef.
El software depende de .NET Framework 4.6 o posterior. Windows 10 ya incluye una versión adecuada de .NET por defecto. Los usuarios de versiones anteriores de Windows deberán instalar una versión actual de .NET Framework para ejecutar el software.
Contrariamente a lo que sugiere la interfaz de usuario, el ETS5 no cifra sus archivos de proyecto almacenados localmente en C:\ProgramData\KNX\ETS5\ProjectStore con la contraseña del proyecto. En su lugar, utiliza la contraseña fija ETS5Password y la sal Ivan Medvedev para ofuscar atributos específicos en los archivos XML del proyecto. Los secretos criptográficos fijos en el código van en contra de las mejores prácticas, como se explica en CWE-798 y CWE-321.
El proceso de desofuscación es:
Ivan Medvedev como cadena codificada en ASCII o UTF-8.ETS5Password como contraseña y la representación en bytes de Ivan Medvedev como sal. Los primeros 32 bytes de la salida de la derivación de clave se usarán como clave y los siguientes 16 bytes como IV.Se puede encontrar una implementación de la desofuscación en el archivo Deobfuscator.cs. Dado que la contraseña y la sal son constantes, sería posible precalcular la clave y el IV para omitir la derivación de clave. Esto no se hace en la implementación de este software, ya que pretende mostrar todos los pasos de la desofuscación. Sin embargo, si necesita la clave y el IV, se muestran a continuación.
| Hex | Base64 | |
|---|---|---|
| Clave | 22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371 | Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E= |
| IV | 8E977BB3FEFADD88E6AE6CBEAE3E7CAF | jpd7s/763Yjmrmy+rj58rw== |
Los archivos de proyecto exportados (.knxproj) no se ven afectados por este fallo de diseño, por lo que esta herramienta no puede usarse para recuperar la contraseña del proyecto en ellos. El archivo .knxproj es un archivo ZIP que contiene otro archivo ZIP con la información sensible. Este último usa compresión Deflate, cifrado ZipCrypto / PKWARE y la contraseña del proyecto para la derivación de la clave de cifrado.
Durante la preparación de mi tesis "Security Analysis of the KNXnet/IP Secure Protocol", investigué cómo el ETS5 almacena la información del proyecto. Dado que el ETS genera y almacena claves criptográficas y contraseñas que utilizan los dispositivos KNX IP Secure para autenticarse entre sí, proporcionar confidencialidad en la comunicación multicast y asegurar la configuración de los dispositivos, es importante mantener la información en secreto. Si un atacante lograra acceder a la información del proyecto almacenada por el ETS, comprometería por completo la seguridad de la instalación KNX.
Por esta razón, se inspeccionó el almacén de proyectos del ETS5 para verificar si los datos se almacenan de manera que garantice la confidencialidad. Los archivos de proyecto en C:\ProgramData\KNX\ETS5\ProjectStore son legibles por cualquier cuenta de usuario, no se requieren derechos de administrador. Se encontraron los siguientes indicios que hicieron sospechar que los datos no estaban correctamente cifrados:
El último punto indicaba claramente que la contraseña del proyecto no se usaba en el algoritmo que modifica los valores de los atributos. A continuación se puede ver un ejemplo, donde los códigos de autenticación de dispositivos en dos proyectos P-02FB y P-0117 se establecieron en valores idénticos. Las salidas ofuscadas también son las mismas, a pesar de que se usan contraseñas de proyecto diferentes. Dado que no hay un aviso para ingresar nada más que la contraseña del proyecto al abrir el proyecto en el ETS5, esto significaba que la clave tenía que estar almacenada en algún lugar o que se trataba de un algoritmo de ofuscación simple que no requiere ninguna clave. Parecía probable que la solución no fuera ideal para garantizar la confidencialidad y potencialmente poner en riesgo las instalaciones KNX.
Dado que el ETS5 está basado en el framework .NET, lo cual era evidente de inmediato por las DLL utilizadas, la descompilación podía realizarse fácilmente mediante ILSpy. El binario había sido ofuscado con Dotfuscator, presumiblemente para dificultar los esfuerzos de ingeniería inversa. Sin embargo, los nombres de clases y funciones sorprendentemente se mantuvieron mayormente intactos. Por lo tanto, el enfoque elegido fue buscar clases y funciones que parecieran relacionadas con el procesamiento de archivos XML, cifrado, descifrado, ofuscación, desofuscación, claves o contraseñas. Esto llevó al descubrimiento de Knx.Ets.ObjectModel.Import.PasswordDescrambler.Scramble y Knx.Ets.ObjectModel.Import.Encryption.EncryptString, que son llamadas sobre los valores ofuscados de atributos almacenados en los archivos XML. No se estaba pasando material de clave a las funciones, solo utilizaba valores constantes para derivar una clave que luego se utilizaba para cifrar/descifrar los atributos usando AES-256 en modo CBC. Era evidente que se usaban credenciales codificadas para derivar una clave. Dotfuscator cambió el flujo de control e insertó operaciones superfluas, pero las llamadas a las funciones del framework .NET no podían ocultarse. Así, fue posible escribir una especificación para la (des)ofuscación en esta etapa para un enfoque semi-clean-room. La única parte faltante era la cadena utilizada en la derivación de clave que había sido ocultada por Dotfuscator. Se eligió De4dot para revertir la ofuscación de cadenas, lo que reveló la contraseña ETS5Password. El IV ya era legible antes de aplicar De4dot, ya que había sido definido como una secuencia de bytes. Por curiosidad personal, se descubrió que esos no eran bytes aleatorios, sino la representación en bytes ASCII/UTF-8 de la cadena Ivan Medvedev.
Como el defecto de diseño representa un riesgo para las instalaciones KNX, el problema debía ser reportado a la Asociación KNX. Se necesitaba una implementación de prueba de concepto para asegurar que el problema pudiera ser demostrado, en caso de que se solicitara. Para evitar cualquier violación de derechos de autor, la prueba de concepto se implementó basándose en la especificación que se había anotado. Esto se hizo para evitar cualquier reutilización de código del software original. La aplicación de Dotfuscator también aseguró que el código original e incluso el no ofuscado no fueran utilizables para una implementación limpia de todos modos, lo que garantizó que incluso una copia involuntaria del original fuera improbable.
Para obtener detalles sobre la divulgación coordinada tras el desarrollo de la prueba de concepto, consulte la sección Divulgación coordinada de vulnerabilidades.
Desafortunadamente, al 2021-07-18, no hay una versión parcheada de ETS disponible. Por lo tanto, se necesitan medidas adicionales fuera del ETS5 para abordar los riesgos. Las subsecciones a continuación explican diferentes enfoques que se pueden tomar según el modelo de amenaza que se esté asumiendo y contra el cual se intente proteger.
C:\ProgramData\KNX\ETS5\ProjectStore y todos los archivos contenidos en él utilizando el Sistema de Cifrado de Archivos (EFS) de Windows.C:\ProgramData\KNX\ETS5\ProjectStore.Según Joost Demarest, CTO y CFO de la Asociación KNX, ETS5 no recibirá parches ya que el desarrollo de esa versión ya ha concluido. Permitió la publicación inmediata del problema el 2021-07-12, renunciando al plazo ofrecido de 90 días para la divulgación.
Debido a un malentendido, el README anteriormente afirmaba que la Asociación KNX planeaba abordar el problema en ETS6. Este no es el caso. La Asociación KNX aclaró el 2021-10-25 que no planea solucionar este problema, ya que no lo consideran responsabilidad de ETS almacenar de forma segura el material de la clave criptográfica cuando no se está exportando.
La Asociación KNX se ha puesto en contacto conmigo y me ha explicado que han revisado sus planes. Ahora tienen la intención de documentar las deficiencias de la versión actual de ETS y cifrar adecuadamente el almacén de proyectos en una versión futura de ETS6.
El proyecto se distribuye bajo la licencia MIT.
Hash del commit:
Descarga:
Cambios: