Site de seguridad en línea de Google: Fuzzing Java en OSS-Fuzz


Publicado por Jonathan Metzman, equipo de seguridad de código abierto de Google

OSS-Fuzz, El servicio de fuzzing de código abierto de Google, ahora admite borracho aplicaciones escritas en Java y otras Máquina digital Java (JVM) lenguajes basados ​​(por ejemplo, Kotlin, Scala, etc.). Los proyectos de código abierto escritos en lenguajes basados ​​en JVM pueden agregar su proyecto a OSS-Fuzz siguiendo nuestra documentación.

El equipo de seguridad de código abierto de Google se asoció con Inteligencia de código para integrar su Jazzer Fuzzer con OSS-Fuzz. Gracias a su integración, los proyectos de código abierto escritos en lenguajes basados ​​en JVM ahora pueden usar OSS-Fuzz para fuzzing continuo.

OSS-Fuzz ha encontrado más de 25.000 errores en proyectos de código abierto que utilizan fuzzing. Esperamos ver cómo esta técnica puede ayudar a proteger y mejorar el código escrito en lenguajes basados ​​en JVM.

¿Qué puede hacer Jazzer?

Jazzer permite a los usuarios escribir código fuzz escrito en lenguajes basados ​​en JVM con libFuzzer, como ya pueden hacerlo para el código escrito en C / C ++. Para ello, proporciona información sobre la cobertura del código desde el código de bytes de JVM a libFuzzer. Jazzer ya admite funciones importantes de libFuzzer como:

  • FuzzedDataProvider para el código fuzzing que no acepta una matriz de bytes.
  • Evaluación de la cobertura de código basada en contadores de borde de 8 bits.
  • Perfil de valor.
  • Minimización de insumos accidentados.

La intención de Jazzer es admitir eventualmente todas las características de libFuzzer.

¿Qué admite Jazzer?

Jazzer admite todos los lenguajes que compilan en código de bytes de JVM, ya que la instrumentación se realiza en el nivel de código de bytes. Esto incluye:

Jazzer también puede proporcionar información sobre la cobertura a partir del código nativo que se ejecuta a través de JNI. Esto puede descubrir interesantes vulnerabilidades de corrupción de memoria en el código nativo inseguro de la memoria.

¿Por qué Fuzz código basado en Java / JVM?

Como se discutió en nuestra publicación sobre Atheris, el código fuzzing escrito en lenguajes seguros para la memoria, como los lenguajes basados ​​en JVM, es útil para encontrar errores en los que el código se comporta incorrectamente o falla. El comportamiento incorrecto puede ser tan peligroso como la corrupción de la memoria. Por ejemplo, Jazzer se usó para encontrar CVE-2021-23899 en json-sanitizer que podría explotarse para secuencias de comandos entre sitios (XSS). Los errores que causan fallas o excepciones incorrectas a veces se pueden usar para denegar el servicio. Por ejemplo, OSS-Fuzz descubrió recientemente un problema de denegación de servicio que podría haberse utilizado para tomar «una parte importante de la crimson ethereum fuera de línea”.

Cuando se borra el código seguro de la memoria, puede utilizar el mismo enfoque clásico para borrar el código inseguro de la memoria: pasar la entrada mutada al código y esperar bloqueos. O puede tomar un enfoque very similar a una prueba unitaria donde su fuzzer verifica que el código se está comportando correctamente (ejemplo).

Otra forma en que el fuzzing puede encontrar errores interesantes en el código basado en JVM es a través del fuzzing diferencial. Con fuzzing diferencial, su fuzzer pasa la entrada mutada del fuzzer a múltiples implementaciones de biblioteca que deberían tener la misma funcionalidad. Luego compara los resultados de cada biblioteca para encontrar diferencias.
Revisa nuestra documentación Para empezar. Exploraremos esto más durante nuestra charla OSS-Fuzz en FuzzCon Europa.




Enlace a la noticia initial