Los hackers siempre buscan vulnerabilidades fáciles de explotar, y no siempre están husmeando en aplicaciones “grandes” y conocidas como Office.
A veces, una herramienta de productividad o incluso un complemento puede ser la puerta que los hackers usan para obtener acceso a un entorno y dar su siguiente paso. Huntress descubrió recientemente una vulnerabilidad de este tipo en un sistema de facturación y control de horas llamado BillQuick.
¿Qué encontramos?
El equipo del SOC de Huntress descubrió una vulnerabilidad crítica en varias versiones de BillQuick Web Suite, un sistema de facturación y control de horas de BQE Software. Los hackers lograron explotar con éxito CVE-2021-42258, usándolo para obtener acceso inicial a una empresa de ingeniería en EE. UU., y desplegar ransomware en toda la red de la víctima. Considerando la base de usuarios que BQE dice tener, 400 mil usuarios en todo el mundo, una campaña maliciosa dirigida a sus clientes es preocupante.
Nuestro equipo pudo recrear con éxito este ataque basado en inyección SQL y puede confirmar que los hackers pueden usarlo para acceder a los datos de BillQuick de los clientes y ejecutar comandos maliciosos en sus servidores Windows on-premises. Hemos estado en contacto constante con el equipo de BQE para notificarles de esta vulnerabilidad, evaluar los cambios de código implementados en WebSuite 2021 versión 22.0.9.1 y trabajar para abordar varios problemas de seguridad que planteamos sobre sus ofertas de BillQuick y Core (más detalles cuando estén disponibles los parches).
- CVE-2021-42344
- CVE-2021-42345
- CVE-2021-42346
- CVE-2021-42571
- CVE-2021-42572
- CVE-2021-42573
- CVE-2021-42741
- CVE-2021-42742
La señal de alerta 🚩
Nuestro sexto sentido se activó por primera vez cuando se dispararon varios de nuestros archivos canario de ransomware dentro del entorno de una empresa de ingeniería administrada por uno de nuestros socios. Mientras investigábamos el incidente, descubrimos alertas de antivirus de Microsoft Defender que indicaban actividad maliciosa como la cuenta de servicio
. Esto indicaba la posibilidad de que se estuviera explotando una aplicación web para obtener acceso inicial. El servidor en cuestión alojaba BillQuick Web Suite 2020 (WS2020), y los registros de conexión mostraban que una IP extranjera enviaba repetidamente solicitudes POST al endpoint de inicio de sesión del servidor web antes del compromiso inicial.
Con este contexto, sospechamos que un actor malicioso estaba intentando explotar BillQuick, así que, naturalmente, comenzamos a aplicar ingeniería inversa a la aplicación web para rastrear los pasos del atacante.
Análisis de la vulnerabilidad
Después de descargar una copia gratuita de WS2020 del sitio web de BQE, la instalamos localmente y comenzamos a investigar. Durante el análisis estático del código del lado del servidor, el equipo de Huntress identificó consultas SQL concatenadas. En esencia, esta función permite que un usuario controle la consulta que se envía a la base de datos MSSQL, lo que en este caso habilita una inyección SQL ciega a través del formulario principal de inicio de sesión de la aplicación.
Con ayuda de nuestro socio, pudimos recrear el entorno de la víctima y validar que herramientas de seguridad simples como sqlmap podían obtener fácilmente datos confidenciales del servidor de BillQuick sin autenticación. Debido a que estas versiones de BillQuick usaban el usuario de MSSQL sa (administrador del sistema) para la autenticación de la base de datos, esta inyección SQL también permitía usar el procedimiento xp_cmdshell para ejecutar código de forma remota en el sistema operativo Windows subyacente.
Cómo se muestra la inyección SQL en la página de inicio de sesión
Repasemos cómo pudimos recrear la vulnerabilidad de inyección SQL en BillQuick. El siguiente video muestra lo fácil que es activar esta vulnerabilidad enviando una solicitud de inicio de sesión con caracteres inválidos en el campo de nombre de usuario.
Simplemente al navegar a la página de inicio de sesión e ingresar una comilla simple (`'`), se puede activar este error. Además, los manejadores de errores de esta página muestran un rastro completo, que podría contener información confidencial sobre el código del lado del servidor.
Escaneo del endpoint de la aplicación
Sqlmap, una herramienta de pruebas de ciberseguridad de código abierto, se puede usar para probar y explotar este tipo de vulnerabilidades. La herramienta puede detectar automáticamente vulnerabilidades de inyección SQL, generar consultas para filtrar datos confidenciales de la base de datos del backend y, en ciertos casos, lograr ejecución remota de código.
Aquí, mostramos un escaneo inicial del endpoint de inicio de sesión. El archivo login-request.txt contiene una solicitud HTTP sin procesar que realiza un intento de inicio de sesión. No hay nada inherentemente malicioso en esta solicitud, pero sqlmap es capaz de modificarla para identificar posibles vulnerabilidades de inyección.
En este caso, el argumento -p txtID le indica a sqlmap que queremos probar el argumento txtID (que corresponde a la entrada de nombre de usuario). --time-sec aumenta los tiempos de espera al enviar solicitudes (nuestro servidor BillQuick era particularmente lento para responder). Los argumentos --risk y --level ajustan qué tan agresivo será el escaneo de sqlmap. Como se trata de pruebas locales, especificamos valores más altos de riesgo y nivel para aprovechar mejor todo el potencial de sqlmap.
Se identifican múltiples puntos de inyección SQL
En este punto, sqlmap sabe cómo explotar la vulnerabilidad. Es común pedirle a sqlmap que pruebe múltiples parámetros, así que nos pregunta amablemente si queremos continuar probando otros; en este caso, solo le pedimos que probara un parámetro.
Después de completar el escaneo, sqlmap usará la inyección para obtener los detalles del servidor de base de datos SQL en el backend. En este ejemplo, sqlmap identificó correctamente Microsoft IIS, Microsoft SQL Server 2019 y Windows 2019.
A continuación, le indicamos a sqlmap que enumere todas las bases de datos en el servidor SQL; sqlmap recuerda las vulnerabilidades identificadas previamente y usará automáticamente la más adecuada. Rápidamente identifica las bases de datos estándar, así como BQ2020 y BQ2020ARK.
Volcado de las tablas de la base de datos SQL
Ahora que sabemos el nombre de la base de datos, podemos comenzar a volcar sus datos. En este caso, ya conocemos el nombre de una tabla sensible de la base de datos (SecurityTable) usada por BillQuick Web Suite. Esto se identifica fácilmente instalando una copia local e inspeccionando la base de datos. Esta tabla almacena datos de permisos y contraseñas codificadas de todos los empleados en la base de datos de BillQuick.
Solo para reiterar: no nos hemos autenticado, pero aun así podemos filtrar remotamente información de empleados altamente sensible. Al ser un servidor de gestión de facturación, es probable que haya mucha más información sensible en la base de datos de producción.
Obtención de ejecución remota de código
Filtrar información sensible ya es bastante grave, pero los actores maliciosos también están logrando ejecución remota de código con esta vulnerabilidad.
Vale la pena señalar que si tu servidor de base de datos está configurado para bloquear el uso del procedimiento almacenado extendido xp_cmdshell y BillQuick Web Suite estuviera configurado para usar un usuario SQL de mínimo privilegio, la ejecución remota de código de esta manera no sería posible. Sin embargo, la información de configuración de BillQuick Web Suite hace referencia a la cuenta integrada sa en múltiples ocasiones al tratar la configuración e instalación. Podría usarse cualquier usuario con acceso de lectura/escritura a la base de datos de BillQuick, pero es común que los administradores de sistemas sigan la documentación al pie de la letra.
En la práctica, Huntress ha observado que algunos partners usan BillQuick Web Suite con la cuenta integrada sa, la cual permite acceso completo al servidor de base de datos en el backend, incluyendo xp_cmdshell, sin importar las restricciones de configuración.
En este caso, usamos consultas SQL apiladas especialmente diseñadas para ejecutar los comandos necesarios para volver a habilitar el procedimiento almacenado extendido xp_cmdshell y luego ejecutar código a través de powershell.exe. En el video anterior, mostramos cómo escribir en un archivo en el servidor y generar calc.exe como la cuenta de servicio MSSQLSERVER$.
Observación del escaneo de sqlmap en los registros
BillQuick Web Suite normalmente escribe registros de condiciones excepcionales en C:\BillQuickData\AppLog. Estos registros son trazas completas de la aplicación cuando algo sale mal. Durante las pruebas con sqlmap, ocurrieron muchos de estos errores y quedaron registrados ahí. Este es un lugar muy útil para buscar intentos de explotación pasados o para depurar tus propias pruebas.
Vale la pena señalar, sin embargo, que esta no es una herramienta de detección infalible. Las consultas de inyección SQL exitosas no generarán errores registrados. Además, algunas rutas de código dentro de BillQuick Web Suite no registran excepciones en este archivo. Sin embargo, la presencia de declaraciones SQL fallidas, sospechosas o inusuales en tu archivo de registro sugiere firmemente que alguien ha estado husmeando donde no debería.
• • •
Reflexiones finales
Agradecemos mucho las respuestas oportunas del equipo de BQE ante estas notificaciones de vulnerabilidad. En 2021, todavía es extremadamente común que los proveedores barran los problemas de ciberseguridad bajo la alfombra; tenemos la impresión de que BQE está tomando en serio nuestra retroalimentación.
Dicho esto, este incidente destaca un patrón recurrente que afecta al software para SMB: proveedores bien establecidos hacen muy poco para proteger sus aplicaciones de forma proactiva y exponen a sus clientes, sin que estos lo sepan, a una responsabilidad significativa cuando inevitablemente se filtran datos confidenciales o se pide un rescate por ellos.
En lugar de quedarse de brazos cruzados, Huntress está liderando múltiples esfuerzos para SMB con el fin de:
- Generar conciencia sobre la epidemia de calidad del código antes de que los hackers entreguen un "gran ajuste de cuentas"
- Celebrar y destigmatizar a los proveedores que divulgan con transparencia sus problemas corregidos
- Incentivar a los investigadores de seguridad a encontrar vulnerabilidades y entregar un informe responsable de ellas
- Responsabilizar a los proveedores por prácticas de seguridad deficientes y comportamientos poco acogedores
Como comunidad, vamos a ser la marea de seguridad que levanta todos los barcos. Es hora de levantarse.