
Análisis de la vulnerabilidad CVE-2019-9745.
La creatividad está en el núcleo de las pruebas de penetración, lo que mantiene nuestro trabajo interesante. Sin embargo, un escollo es la tendencia a 'sobreingeniería' de escenarios de ataque y centrarse únicamente en bugs (condiciones de error). Los fallos (comportamiento no intencionado) pueden estar presentes con resultados igualmente devastadores. Este artículo proporciona un caso de estudio para demostrar la importancia de las pruebas de penetración para tales fallos. Simultáneamente, aboga por el empleo de un proceso SDLC (Ciclo de Vida de Desarrollo Seguro).
Este artículo es parte de la RD (divulgación responsable) de la vulnerabilidad CVE-2019-9745 y ha sido escrito en estrecha cooperación con el proveedor CloudCTI. Proporciona una visión general de alto nivel de la vulnerabilidad antes de profundizar en los detalles técnicos. Después de demostrar la explotación de la vulnerabilidad, se presenta una conclusión con lecciones aprendidas.
La Herramienta de Configuración de Reconocimiento CloudCTI que examinamos durante una de nuestras pruebas de penetración se utiliza para recuperar información del software CRM (Gestión de Relaciones con Clientes). Esto proporciona al personal del centro de llamadas información relevante durante las llamadas de los clientes. Se identificaron varios problemas que pueden encadenarse para comprometer completamente el sistema local. El proveedor desea enfatizar que esto no afecta a los sistemas de otros clientes ni a los suyos propios.
Como ocurre con muchas vulnerabilidades de seguridad, un problema importante radica en validar datos que se originan fuera de su esfera de influencia. Igualmente importante es la comprensión de que los sistemas y el software operan en entornos hostiles. El tiempo y la experiencia nos han enseñado que la interceptación es una amenaza en internet. Sin embargo, lo mismo es cierto para otros canales de comunicación, incluso dentro del propio sistema. Esto fue fundamental para descubrir la vulnerabilidad.
Un análisis de causa raíz de los problemas encontrados muestra la importancia de prácticas como TM (modelado de amenazas). TM ayuda a identificar riesgos en las primeras etapas del diseño y desarrollo. Esto puede llevar a la mitigación de riesgos inaceptables o a rediseño/reimplementación. Aunque se anima al lector a realizar su propio análisis, se proporcionan descripciones de las contramedidas del proveedor como referencia.
El software del proveedor consta de cuatro aplicaciones que trabajan juntas. La primera aplicación es la interfaz gráfica de usuario (GUI). Esto permite al usuario iniciar la recuperación de información de varios paquetes de software CRM:
La GUI delega la recuperación de información a un servicio (la segunda aplicación) enviando un mensaje. Los primeros problemas de seguridad se manifiestan aquí: no solo cualquier persona en el sistema puede observar los mensajes entre la GUI y el servicio para determinar su formato y contenido (afectando la confidencialidad), también pueden enviar sus propios mensajes (afectando la autorización). Además, la fuente de los mensajes al servicio no se verifica (afectando la no repudio). En la terminología de modelado de amenazas STRIDE, esto significa que el sistema es propenso a la divulgación de información y a la manipulación. De hecho, la información obtenida de estos mensajes fue fundamental para descubrir la vulnerabilidad.
La tercera aplicación es uno de los muchos importadores especializados. El servicio descarga la recuperación de información para un paquete CRM específico a un importador específico. El mensaje enviado por la GUI contiene instrucciones específicas para este importador. Al observar el importador CRM Exquise, resulta que la recuperación de información se delega aún más a una aplicación externa (cuarta). Examinando la lógica interna del importador, se descubrió que la aplicación externa podía especificarse en el mensaje entre la GUI y el servicio. El problema que se manifiesta aquí es que la aplicación externa se ejecuta sin verificar su identidad (afectando la no repudio).
Encadenando estos problemas, pudimos interceptar mensajes para determinar su formato y enviar un mensaje en el que especificamos nuestra propia aplicación externa maliciosa. Esa aplicación externa se ejecuta con los mismos privilegios que el importador/servicio. Como estos privilegios son los más altos posibles dentro del sistema, se logra el control total y el sistema queda comprometido.
Estos problemas son mitigados por el proveedor mediante el cifrado de los mensajes (mitigando el problema de confidencialidad) mediante el uso de secretos compartidos únicos (mitigando el problema de autorización) a los que solo pueden acceder los usuarios del sistema autenticados que los poseen (mitigando el primer problema de no repudio). Finalmente, la aplicación externa está firmada criptográficamente (mitigando el segundo problema de no repudio). La combinación de estas medidas mitiga con éxito la vulnerabilidad.
Cuando se instala la aplicación GUI de la Herramienta de Configuración de Reconocimiento CloudCTI (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\CloudCTI Recognition Configuration Tool.exe), se examina con Process Explorer. Esto revela que un servicio complementario (Recognition Update Client Service) está instalado y se ejecuta con derechos NT AUTHORITY\SYSTEM:
Al investigar el ejecutable del servicio (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RecognitionUpdateClientServiceService.exe) se hace evidente que está desarrollado utilizando el lenguaje de programación .NET. Esto se puede descompilar usando dnSpy para obtener información sobre su lógica interna, que se detallará a continuación.