Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

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

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)