Vulnerabilidad en los argumentos "value.shape()" y "pooling_ratio" en "tf.raw_ops.FractionalAvgPool" en TensorFlow (CVE-2021-29550)
Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-369
División por cero
Fecha de publicación:
14/05/2021
Última modificación:
27/07/2021
Descripción
TensorFlow es una plataforma de código abierto de extremo a extremo para el aprendizaje automático. Un atacante puede causar un error de división por cero en tiempo de ejecución y una denegación de servicio en "tf.raw_ops.FractionalAvgPool". Esto es debido a que la implementación (https://github.com/tensorflow/tensorflow/blob/acc8ee69f5f46f92a3f1f11230f49c6ac266f10c/tensorflow/core/kernels/fractional_avg_pool_op.cc#L85-L89) calcula una cantidad divisora al dividir dos valores controlados por el usuario. El usuario controla los valores de "input_size[i]" y "pooling_ratio_[i]" (por medio de los argumentos "value.shape()" y "pooling_ratio"). Si el valor en "input_size[i]" es menor que el "pooling_ratio_[i]", entonces la operación floor resulta en que "output_size[i]" sea 0. La línea "DCHECK_GT" es un no-op fuera del modo de depuración, así que en las versiones liberadas de TF no es desencadenado. Más tarde, estos valores calculados son usados como argumentos (https://github.com/tensorflow/tensorflow/blob/acc8ee69f5f46f92a3f1f11230f49c6ac266f10c/tensorflow/core/kernels/fractional_avg_pool_op.cc#L96-L99) para "GeneratePoolingSequence"(https://github.com/tensorflow/tensorflow/blob/acc8ee69f5f46f92a3f1f11230f49c6ac266f10c/tensorflow/core/kernels/fractional_pool_common.cc#L100-L108). Allí, el primer cálculo es una división en una operación de módulo. Dado que "output_length" puede ser 0, esto resulta en un bloqueo en tiempo de ejecución. La corrección será incluida en TensorFlow versión 2.5.0. También se incluirá 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 siguen siendo compatibles
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Puntuación base 2.0
2.10
Gravedad 2.0
BAJA
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