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

Vulnerabilidad en los modelos guardados en formato flatbuffer en TensorFlow Lite (CVE-2020-15211)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-125 Lectura fuera de límites
Fecha de publicación:
25/09/2020
Última modificación:
16/09/2021

Descripción

En TensorFlow Lite versiones anteriores a 1.15.4, 2.0.3, 2.1.2, 2.2.1 y 2.3.1, los modelos guardados en formato flatbuffer usan un esquema de indexación doble: un modelo tiene un conjunto de subgráficos, cada subgráfico tiene un conjunto de operadores y cada operador tiene un conjunto de tensores de entrada/salida. El formato flatbuffer usa índices para los tensores, indexando en una matriz de tensores que es propiedad del subgráfico. Esto resulta en un patrón de indexación de doble matriz cuando intenta obtener los datos de cada tensor. Sin embargo, algunos operadores pueden tener algunos tensores opcionales. Para manejar este escenario, el modelo flatbuffer usa un valor negativo "-1" como índice para estos tensores. Esto resulta en un cubierta especial durante la comprobación en el momento de la carga del modelo. Desafortunadamente, esto significa que el índice "-1" es un índice tensorial válido para cualquier operador, incluyendo aquellos que no esperan entradas opcionales e incluso para tensores de salida. Por tanto, esto permite escribir y leer desde fuera de los límites de los arreglos asignados de la pila, aunque solo en un desplazamiento específico desde el inicio de estos arreglos. Esto resulta en gadgets de lectura y escritura, aunque con un alcance muy limitado. El problema es parcheado en varias commits (46d5b0852, 00302787b7, e11f5558, cd31fd0ce, 1970c21 y fff2c83) y es publicado en TensorFlow versiones 1.15.4, 2.0.3, 2.1.2, 2.2.1 o 2.3.1. Una solución alternativa potencial sería agregar un "Verifier" personalizado al código de carga del modelo para garantizar que solo los operadores que aceptan entradas opcionales usen el valor especial "-1" y solo para los tensores que esperan que sean opcionales. Dado que este enfoque de tipo allow-list es propenso a errores, recomendamos actualizar al código parcheado

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:google:tensorflow:*:*:*:*:lite:*:*:* 1.15.4 (excluyendo)
cpe:2.3:a:google:tensorflow:*:*:*:*:lite:*:*:* 2.0.0 (incluyendo) 2.0.3 (excluyendo)
cpe:2.3:a:google:tensorflow:*:*:*:*:lite:*:*:* 2.1.0 (incluyendo) 2.1.2 (excluyendo)
cpe:2.3:a:google:tensorflow:*:*:*:*:lite:*:*:* 2.2.0 (incluyendo) 2.2.1 (excluyendo)
cpe:2.3:a:google:tensorflow:*:*:*:*:lite:*:*:* 2.3.0 (incluyendo) 2.3.1 (excluyendo)
cpe:2.3:o:opensuse:leap:15.2:*:*:*:*:*:*:*