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

Vulnerabilidad en Grackle (CVE-2023-50730)

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-400 Consumo de recursos no controlado (Agotamiento de recursos)
Fecha de publicación:
22/12/2023
Última modificación:
08/01/2024

Descripción

Grackle es un servidor GraphQL escrito en functional Scala, construido en la pila Typelevel. La especificación GraphQL requiere que los fragmentos de GraphQL no formen ciclos, ni directa ni indirectamente. Antes de la versión 0.18.0 de Grackle, ese requisito no se verificaba y las consultas con fragmentos cíclicos se habrían aceptado para la verificación y compilación de tipos. El intento de compilación de dichos fragmentos daría como resultado que se generara un "StackOverflowError" de JVM. Se necesitaría cierto conocimiento del esquema GraphQL de una aplicación para construir dicha consulta; sin embargo, no se necesitaría ningún conocimiento del rendimiento específico de la aplicación ni de otras características de comportamiento. Grackle usa la librería cats-parse para analizar consultas GraphQL. Antes de la versión 0.18.0, Grackle hacía uso del operador "recursive" de cats-parse. Sin embargo, "recursive" actualmente no es seguro para pilas. "recursive" se usó en tres lugares del analizador: conjuntos de selección anidados, valores de entrada anidados (listas y objetos) y declaraciones de tipos de listas anidadas. En consecuencia, se podrían construir consultas con conjuntos de selección, valores de entrada o tipos de listas profundamente anidados que explotaran esto, provocando que se lanzara una `StackOverflowException` de JVM durante el análisis. Debido a que esto sucede muy temprano en el procesamiento de consultas, no se requeriría ningún conocimiento específico del esquema GraphQL de una aplicación para construir dicha consulta. La posibilidad de que pequeñas consultas provoquen un desbordamiento de la pila es una posible vulnerabilidad de denegación de servicio. Esto afecta potencialmente a todas las aplicaciones que utilizan Grackle y que tienen usuarios que no son de confianza. Ambos problemas de desbordamiento de pila se resolvieron en la versión v0.18.0 de Grackle. Como workaround, los usuarios podrían interponer una capa de sanitización entre las entradas que no son de confianza y el procesamiento de consultas de Grackle.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:typelevel:grackle:*:*:*:*:*:*:*:* 0.18.0 (excluyendo)