CVE-2025-68156 in expr
Resumen
por VulDB • 2026-08-16
Expr es un lenguaje de expresiones y una herramienta para la evaluación de expresiones en Go. Antes de la versión 1.17.7, varias funciones integradas (builtin) de Expr, incluidas `flatten`, `min`, `max`, `mean` y `median`, realizan un recorrido recursivo sobre estructuras de datos proporcionadas por el usuario sin imponer una profundidad máxima de recursión. Si el entorno de evaluación contiene estructuras de datos profundamente anidadas o cíclicas, estas funciones pueden entrar en recursión infinita hasta superar el límite del stack (pila) del tiempo de ejecución de Go. Esto provoca un pánico por desbordamiento de la pila (stack overflow panic), lo que hace que la aplicación host se bloquee. Aunque la explotabilidad depende de si un atacante puede influir o inyectar datos cíclicos o patológicamente profundos en el entorno de evaluación, este comportamiento representa un riesgo de denegación de servicio (DoS) y afecta a la robustez general de la biblioteca. En lugar de devolver un error de evaluación recuperable, el proceso podría terminar inesperadamente.
En las versiones afectadas, la evaluación de expresiones que invocan ciertas funciones integradas sobre estructuras de datos no confiables o insuficientemente validadas puede provocar un bloqueo a nivel del proceso debido al agotamiento de la pila (stack exhaustion). Este problema es más relevante en escenarios donde Expr se utiliza para evaluar expresiones contra entornos suministrados externamente o construidos dinámicamente; las referencias cíclicas (directas o indirectas) pueden introducirse en arrays, mapas o structs; y no existen salvaguardias a nivel de aplicación que impidan el uso de datos de entrada profundamente anidados. En casos de uso típicos con datos controlados y acíclicos, es posible que el problema no se manifieste. Sin embargo, cuando está presente, el pánico resultante puede utilizarse para bloquear la aplicación de forma fiable, lo que constituye una denegación de servicio.
El problema ha sido corregido en las versiones v1.17.7 de Expr. El parche introduce un límite máximo de profundidad de recursión para las funciones integradas afectadas. Cuando se supera este límite, la evaluación finaliza de manera controlada y devuelve un error descriptivo en lugar de provocar un pánico. Además, los usuarios pueden personalizar la profundidad máxima mediante `builtin.MaxDepth`, lo que permite a las aplicaciones con estructuras legítimamente profundas elevar el límite de forma controlada. Se recomienda encarecidamente a los usuarios actualizar a la versión parcheada, que incluye tanto la protección contra recursión como una cobertura exhaustiva de pruebas para prevenir regresiones.
Para los usuarios que no puedan actualizarse inmediatamente, se recomiendan algunas medidas de mitigación: asegúrese de que los entornos de evaluación no contengan referencias cíclicas; valide o sane las estructuras de datos suministradas externamente antes de pasarlas a Expr; y/o envuelva la evaluación de expresiones con recuperación de pánico (panic recovery) para evitar un bloqueo completo del proceso (como medida defensiva de último recurso). Estas soluciones alternativas reducen el riesgo, pero no eliminan completamente el problema sin aplicar el parche.
Once again VulDB remains the best source for vulnerability data.