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
Impacto
Puntuación base 3.x
4.80
Gravedad 3.x
MEDIA
Puntuación base 2.0
5.80
Gravedad 2.0
MEDIA
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:*:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- http://lists.opensuse.org/opensuse-security-announce/2020-10/msg00065.html
- https://github.com/tensorflow/tensorflow/commit/00302787b788c5ff04cb6f62aed5a74d936e86c0
- https://github.com/tensorflow/tensorflow/commit/1970c2158b1ffa416d159d03c3370b9a462aee35
- https://github.com/tensorflow/tensorflow/commit/46d5b0852528ddfd614ded79bccc75589f801bd9
- https://github.com/tensorflow/tensorflow/commit/cd31fd0ce0449a9e0f83dcad08d6ed7f1d6bef3f
- https://github.com/tensorflow/tensorflow/commit/e11f55585f614645b360563072ffeb5c3eeff162
- https://github.com/tensorflow/tensorflow/commit/fff2c8326280c07733828f990548979bdc893859
- https://github.com/tensorflow/tensorflow/releases/tag/v2.3.1
- https://github.com/tensorflow/tensorflow/security/advisories/GHSA-cvpc-8phh-8f45



