Bienvenido al blog de Undercode   Click to listen highlighted text! Bienvenido al blog de Undercode
Inicio Noticias TensorFlow de Google deja de admitir YAML

TensorFlow de Google deja de admitir YAML

por Dragora

TensorFlow, un popular proyecto de aprendizaje automático e inteligencia artificial basado en Python desarrollado por Google, ha dejado de admitir YAML para parchear una vulnerabilidad crítica de ejecución de código.

YAML u Yet Another Markup Language es una opción conveniente entre los desarrolladores que buscan un lenguaje de serialización de datos legible por humanos para manejar archivos de configuración y datos en tránsito.

Vulnerabilidad de deserialización no confiable en TensorFlow

Los encargados de mantenimiento detrás de TensorFlow y Keras, un proyecto contenedor para TensorFlow, han parcheado una vulnerabilidad de deserialización que no es de confianza y que surgió de un análisis no seguro de YAML.

Rastreada como CVE-2021-37678, la falla crítica permite a los atacantes ejecutar código arbitrario cuando una aplicación deserializa un modelo de Keras proporcionado en el formato YAML.

Las vulnerabilidades de deserialización suelen ocurrir cuando una aplicación lee datos mal formados o maliciosos que se originan en fuentes no auténticas.

Después de que una aplicación lee y deserializa los datos, puede bloquearse y provocar una condición de denegación de servicio (DoS) o, peor aún, ejecutar el código arbitrario del atacante.

El investigador de seguridad Arjun Shibu informó responsablemente a los mantenedores de TensorFlow de esta vulnerabilidad de deserialización de YAML, calificada con una gravedad de 9.3  .

¿Y la fuente de la falla, preguntas? La notoria función «yaml.unsafe_load ()» en el código de TensorFlow:

llamada a la función yaml.unsafe_load
VulnerableLlamada función yaml.unsafe_load en TensorFlow ( GitHub )

Se sabe que la función «unsafe_load» deserializa los datos YAML de manera bastante liberal:  resuelve todas las etiquetas , «incluso aquellas que se sabe que no son seguras en entradas que no son de confianza».

Esto significa que, idealmente, «unsafe_load» solo debería invocarse en una entrada que provenga de una fuente confiable y se sepa que está libre de cualquier contenido malicioso.

Si ese no fuera el caso, los atacantes pueden aprovechar el mecanismo de deserialización para ejecutar el código de su elección inyectando una carga útil maliciosa en los datos YAML que aún no se han serializado.

Un ejemplo de exploit de prueba de concepto (PoC) compartido en la vulnerabilidad aviso de  demuestra precisamente esto:

de modelos de importación de tensorflow.keras

carga útil = '' '
!! python / objeto / nuevo: tipo
args: ['z', !! python / tuple [], {'extender': !! python / name: exec}]
listitems: "__import __ ('os'). system ('cat / etc / passwd')"
'' '
  
models.model_from_yaml (carga útil)

TensorFlow elimina YAML por completo a favor de JSON

Después de que se informó de la vulnerabilidad, TensorFlow decidió eliminar por completo la compatibilidad con YAML y usar la deserialización JSON en su lugar.

«Dado que el soporte del formato YAML requiere una cantidad significativa de trabajo, lo hemos eliminado por ahora», dicen los mantenedores del proyecto en el mismo aviso.

«Los métodos` Model.to_yaml () `y` keras.models.model_from_yaml` han sido reemplazados para generar un `RuntimeError`, ya que se puede abusar de ellos para provocar la ejecución de código arbitrario,» también explican las notas de la versión asociadas con la corrección .

«Se recomienda utilizar la serialización JSON en lugar de YAML o, una mejor alternativa, serializar a H5».

Vale la pena señalar que TensorFlow no es el primer ni el único proyecto que utiliza unsafe_load de YAML . El uso de la función es bastante frecuente en proyectos de Python.

GitHub muestra miles de resultados de búsqueda que hacen  referencia a la función, y algunos desarrolladores proponen mejoras:

resultados de github para aplicaciones que usan unsafe_load
Muchos repositorios en GitHub han usado y usan la función de carga insegura de YAML  (GitHub)

Se espera que la corrección para CVE-2021-37678 llegue a la versión 2.6.0 de TensorFlow y también se incorporará a las versiones anteriores 2.5.1, 2.4.3 y 2.3.4, afirman los mantenedores.

Fuente: www.bleepingcomputer.com

You may also like

Dejar Comentario

Click to listen highlighted text!