Acabo de recibir una auditoría de seguridad por parte de Deloitte en nombre de SFDC. Básicamente usamos flex y nos comunicamos a través de AMF. Utilizamos FluorineFX para esto (a diferencia de LCDS y Blaze). Se nos dice que debido a que la respuesta AMF no está codificada y que alguien puede manipular los parámetros AMF e insertar Javascript, esta es una vulnerabilidad XSS. Estoy luchando por entender cómo la respuesta de AMF, que podría hacerse eco de la pasada en JS en un mensaje de error, puede ser ejecutada por el navegador o por cualquier otra cosa. Tengo bastante experiencia con XSS con HTML y JS, pero ver cómo se etiquetó con AMF fue un poco sorprendente. Estoy en contacto con el equipo FluorineFx y también están perplejos.AMF y Cross Site scripting vulnerabilty confusion
Me sorprendería ver que una biblioteca de AMF codifica los datos de respuesta, Fluorine seguramente no lo hace. Sin embargo, parece que las aplicaciones de seguridad como PortSwigger e IBM AppScan incluyen este tipo de prueba en su cofre de herramientas. ¿Te has encontrado con esta vulnerabilidad con AMF y puedes explicar cómo se puede manifestar el problema de XSS? Sólo curioso. Necesito discutir mi salida de esto si existe una discusión o arreglar el agujero. Dado el uso de AMF con Flex, pensé que podrías tener alguna idea.
Información adicional ...
así que un poco más en esto desde el proveedor real, PortSwigger. Les hice la pregunta y neta, neta, reconocen que este tipo de ataque es extremadamente complicado. Inicialmente están clasificando esto como un problema de seguridad de Alta Severidad, pero creo que su tono está cambiando ahora. Pensé que publicaría el contenido de su respuesta para todos ustedes, ya que creo que la perspectiva es interesante, sin embargo.
--- De PortSwigger sobre el tema ---
Gracias por su mensaje. Creo que la respuesta es que esta es potencialmente una vulnerabilidad , pero no es trivial de explotar.
Tienes razón, no se plantearía el problema cuando la respuesta es consumida por un cliente AMF (a menos que se haga algo tonto), sino más bien si un atacante podría diseñar una situación en la que la respuesta es consumido por una navegador. La mayoría de los navegadores pasarán por alto el encabezado HTTP Content-Type, y mirarán el contenido de respuesta real , y si se ve como HTML, felizmente lo procesará como tal. Históricamente, han existido numerosos ataques donde las personas incrustan contenido HTML/JS dentro de otros formatos de respuesta (XML, imágenes, otros contenidos de la aplicación ) y esto es ejecutado como tal por el navegador.
Así que el problema no es tanto el formato de la respuesta, sino el formato de la solicitud requerida para producirlo. No es trivial para un atacante diseñar una solicitud entre dominios que contenga un mensaje AMF válido. Algo similar ocurre con las solicitudes/respuestas XML que contienen un comportamiento similar al XSS . Sin duda, es posible crear una respuesta XML válida que obtenga el tratado por el navegador como HTML, pero el desafío es cómo enviar XML sin formato en el dominio cruzado del cuerpo HTTP. Esto no se puede hacer usando un formulario HTML estándar, , por lo que un atacante necesita encontrar otra tecnología de cliente, o peculiaridad del navegador, al hacer esto. Históricamente, cosas como esta han sido posibles en varias ocasiones, hasta que fueron arregladas por los proveedores de navegadores/plugins. No tengo conocimiento de nada que lo permita en este momento.
Así que en resumen, se trata de un ataque teórico, que en función de su perfil de riesgo se podía ignorar por completo o bloquear el uso de validación de entrada del lado del servidor, o mediante la codificación de la salida en el servidor y decodificación de nuevo en el cliente.
Creo que Burp debería marcar el formato de solicitud AMF como atenuante para este problema, y rebajar el impacto a bajo - Lo arreglaré.
Espero que ayude.
Saludos PortSwigger
--- más información sobre la auditoría ---
lo que hace portSwigger no es necesariamente meterse con la carga útil binaria, lo que hacen es meterse con los parámetros reales de AMF que se publican el controlador para dirigir la solicitud. Por ejemplo, aquí es un fragmento de la auditoría y que muestra parte de la respuesta a una solicitud AMF ...
HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
P3P: CP="CAO PSA OUR"
Content-Type: application/x-amf
Vary: Accept-Encoding
Expires: Tue, 06 Apr 2010 18:02:10 GMT
Date: Tue, 06 Apr 2010 18:02:10 GMT
Connection: keep-alive
Content-Length: 2595
......../7/onStatus.......
.SIflex.messaging.messages.ErrorMessage.faultCode.faultString
.faultDetail.rootCause.extendedData.correlationId.clientId.destination
.messageId.timestamp.timeToLive body.headers.#Server.Processing..kFailed
to locate the requested type
com.Analytics.ca.Services.XXX5c2ce<script>alert(1)</script>9ccff0bda62..
....I506E8A27-8CD0-598D-FF6E-D4490E3DA69F.Id95ab281-d83b-4beb-abff-c668b9fd42d5
[email protected]...
. DSId.Aeb5eeabcbc1d4d3284cbcc7924451711.../8/onRes
...[SNIP]...
nota el guión de "alerta" allí ... lo que hicieron fue anexado una secuencia de comandos adjunta JS a uno de los parámetros que se pasan que contienen el método para llamar a saber 'com.Analytics.ca.Services.XXX'. Al hacerlo, el JS volvió en un mensaje de error, pero hay muchas cosas que deberían suceder para que JS llegue a algún punto cercano a la ejecución. Parece una amenaza indirecta en el mejor de los casos.
- última perspectiva del auditor de seguridad -
que he discutido con el equipo más grande y todos creemos que es un ataque válido. Como menciona PortSwigger en su primer párrafo, aunque teóricamente desde que configuraste el tipo de contenido en x-amf, y espero que no se represente en el navegador, la mayoría de los navegadores ignorarán esta solicitud y la renderizarán de todos modos. Creo que los proveedores confían mucho en el hecho de que el tipo de contenido está configurado; sin embargo, los navegadores populares como IE y algunas versiones de Safari ignorarán esto.
El ataque puede desencadenarse fácilmente explotando CSRF o cualquier otra forma de iniciar un ataque XSS.
Gracias por publicar este hilo completo; esto es genial para quienes somos nuevos en AMF. – roufamatic