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

Vulnerabilidad en Expr (CVE-2025-29786)

Gravedad CVSS v3.1:
ALTA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
17/03/2025
Última modificación:
23/01/2026

Descripción

Expr es un lenguaje de expresiones y un sistema de evaluación de expresiones para Go. Antes de la versión 1.17.0, si el analizador de expresiones Expr recibía una cadena de entrada ilimitada, intentaba compilarla completa y generar un nodo de Árbol de Sintaxis Abstracta (AST) para cada parte de la expresión. En escenarios donde el tamaño de entrada no está limitado, una expresión extremadamente grande, maliciosa o inadvertida, puede consumir demasiada memoria mientras el analizador construye un AST enorme. Esto puede provocar un uso excesivo de memoria y un fallo del proceso por falta de memoria (OOM). Este problema es relativamente poco común y solo se manifiesta cuando no hay restricciones en el tamaño de entrada, es decir, cuando se permite que la longitud de la expresión crezca arbitrariamente. En casos de uso típicos donde las entradas están limitadas o validadas, este problema no se producía. El problema se ha corregido en las últimas versiones de la librería Expr. La corrección introduce límites en tiempo de compilación en el número de nodos AST y el uso de memoria durante el análisis, lo que evita que una sola expresión agote los recursos. Los usuarios deben actualizar a la versión 1.17.0 de Expr o posterior, ya que esta versión incluye las nuevas protecciones de presupuesto de nodos y límite de memoria. Actualizar a la versión 1.17.0 garantiza la detección y cancelación segura de expresiones extremadamente profundas o grandes durante la compilación, evitando así la condición OOM. Para los usuarios que no puedan actualizar inmediatamente, el workaround recomendada es imponer una restricción de tamaño de entrada antes del análisis. En la práctica, esto significa validar o limitar la longitud de las cadenas de expresión que acepta la aplicación. Por ejemplo, establezca un número máximo permitido de caracteres (o nodos) para cualquier expresión y rechace o trunque las entradas que superen este límite. Al garantizar que nunca se introduzca ninguna expresión de longitud ilimitada en el analizador, se puede evitar que el analizador construya un AST patológicamente grande y evitar el posible agotamiento de la memoria. En resumen, valide previamente y limite el tamaño de entrada como medida de seguridad en ausencia del parche.