Vulnerabilidad en la implementación de "tf.io.decode_raw" en TensorFlow (CVE-2021-29614)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-787
Escritura fuera de límites
Fecha de publicación:
14/05/2021
Última modificación:
25/04/2022
Descripción
TensorFlow es una plataforma de código abierto de extremo a extremo para el aprendizaje automático. La implementación de "tf.io.decode_raw" produce resultados incorrectos y bloquea el intérprete de Python al combinar "fixed_length" y tipos de datos más amplios. La implementación de la versión acolchada (https://github.com/tensorflow/tensorflow/blob/1d8903e5b167ed0432077a3db6e462daf781d1fe/tensorflow/core/kernels/decode_padded_raw_op.cc) presenta errores debido a una confusión acerca de las reglas aritméticas de punteros. Primero, el código calcula (https://github.com/tensorflow/tensorflow/blob/1d8903e5b167ed0432077a3db6e462daf781d1fe/tensorflow/core/kernels/decode_padded_raw_op.cc#L61) el ancho de cada elemento de salida dividiendo el valor de la longitud fija del tipo argumento. El argumento "fixed_length" también es usado para determinar el tamaño necesario para el tensor de salida (https: //github. com/tensorflow/tensorflow/blob/1d8903e5b167ed0432077a3db6e462daf781d1fe/tensorflow/core/kernels/decode_padded_raw_op.cc#L63-L79). A continuación, se vuelve a codificar el código (https://github.com/tensorflow/tensorflow/blob/1d8903e5b167ed0432077a3db6e462daf781d1fe/tensorflow/core/kernels/decode_padded_raw_op.cc#L85-L94). El código erróneo es la última línea de arriba: está moviendo el puntero "out_data" en bytes de "fixed_length * sizeof(T)" mientras que sólo copió como máximo los bytes de "fixed_length" de la entrada. Esto resulta en que partes de la entrada no se descodifiquen en una salida. Además, debido a que el avance del puntero es mucho más amplio de lo deseado, esto conlleva rápidamente a escribir fuera de límites de los datos de respaldo. Esta escritura OOB provoca un bloqueo del intérprete en el reproductor mencionado aquí, pero también puede ser montar ataques más severos, dado que este gadget permite escribir en ubicaciones colocadas periódicamente en una memoria. La corrección será incluída en TensorFlow versión 2.5.0. También seleccionaremos este commit en TensorFlow versión 2.4.2, TensorFlow versión 2.3.3, TensorFlow versión 2.2.3 y TensorFlow versión 2.1.4, ya que estos también están afectados y aún están en el rango compatible
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA
Puntuación base 2.0
4.60
Gravedad 2.0
MEDIA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:a:google:tensorflow:*:*:*:*:*:*:*:* | 2.1.4 (excluyendo) | |
cpe:2.3:a:google:tensorflow:*:*:*:*:*:*:*:* | 2.2.0 (incluyendo) | 2.2.3 (excluyendo) |
cpe:2.3:a:google:tensorflow:*:*:*:*:*:*:*:* | 2.3.0 (incluyendo) | 2.3.3 (excluyendo) |
cpe:2.3:a:google:tensorflow:*:*:*:*:*:*:*:* | 2.4.0 (incluyendo) | 2.4.2 (excluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página