CVE-2023-50730
Grackle has StackOverflowError in GraphQL query processing
Grackle is a GraphQL server written in functional Scala, built on the Typelevel stack. The GraphQL specification requires that GraphQL fragments must not form cycles, either directly or indirectly. Prior to Grackle version 0.18.0, that requirement wasn't checked, and queries with cyclic fragments would have been accepted for type checking and compilation. The attempted compilation of such fragments would result in a JVM StackOverflowError being thrown. Some knowledge of an applications GraphQL schema would be required to construct such a query, however no knowledge of any application-specific performance or other behavioural characteristics would be needed.
Grackle uses the cats-parse library for parsing GraphQL queries. Prior to version 0.18.0, Grackle made use of the cats-parse recursive operator. However, recursive is not currently stack safe. recursive was used in three places in the parser: nested selection sets, nested input values (lists and objects), and nested list type declarations. Consequently, queries with deeply nested selection sets, input values or list types could be constructed which exploited this, causing a JVM StackOverflowException to be thrown during parsing. Because this happens very early in query processing, no specific knowledge of an applications GraphQL schema would be required to construct such a query.
The possibility of small queries resulting in stack overflow is a potential denial of service vulnerability. This potentially affects all applications using Grackle which have untrusted users. Both stack overflow issues have been resolved in the v0.18.0 release of Grackle. As a workaround, users could interpose a sanitizing layer in between untrusted input and Grackle query processing.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
Grackle has StackOverflowError in GraphQL query processing
Grackle is a GraphQL server written in functional Scala, built on the Typelevel stack. The GraphQL specification requires that GraphQL fragments must not form cycles, either directly or indirectly. Prior to Grackle version 0.18.0, that requirement wasn't checked, and queries with cyclic fragments would have been accepted for type checking and compilation. The attempted compilation of such fragments would result in a JVM StackOverflowError being thrown. Some knowledge of an applications GraphQL schema would be required to construct such a query, however no knowledge of any application-specific performance or other behavioural characteristics would be needed.
Grackle uses the cats-parse library for parsing GraphQL queries. Prior to version 0.18.0, Grackle made use of the cats-parse recursive operator. However, recursive is not currently stack safe. recursive was used in three places in the parser: nested selection sets, nested input values (lists and objects), and nested list type declarations. Consequently, queries with deeply nested selection sets, input values or list types could be constructed which exploited this, causing a JVM StackOverflowException to be thrown during parsing. Because this happens very early in query processing, no specific knowledge of an applications GraphQL schema would be required to construct such a query.
The possibility of small queries resulting in stack overflow is a potential denial of service vulnerability. This potentially affects all applications using Grackle which have untrusted users. Both stack overflow issues have been resolved in the v0.18.0 release of Grackle. As a workaround, users could interpose a sanitizing layer in between untrusted input and Grackle query processing.
- Record
CVE-2023-50730- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
EUVDEUVD-2023-3206
7.5
Grackle is a GraphQL server written in functional Scala, built on the Typelevel stack. The GraphQL specification requires that GraphQL fragments must not form cycles, either directly or indirectly. Prior to Grackle version 0.18.0, that requirement wasn't checked, and queries with cyclic fragments would have been accepted for type checking and compilation. The attempted compilation of such fragments would result in a JVM StackOverflowError being thrown. Some knowledge of an applications GraphQL schema would be required to construct such a query, however no knowledge of any application-specific performance or other behavioural characteristics would be needed.
Grackle uses the cats-parse library for parsing GraphQL queries. Prior to version 0.18.0, Grackle made use of the cats-parse recursive operator. However, recursive is not currently stack safe. recursive was used in three places in the parser: nested selection sets, nested input values (lists and objects), and nested list type declarations. Consequently, queries with deeply nested selection sets, input values or list types could be constructed which exploited this, causing a JVM StackOverflowException to be thrown during parsing. Because this happens very early in query processing, no specific knowledge of an applications GraphQL schema would be required to construct such a query.
The possibility of small queries resulting in stack overflow is a potential denial of service vulnerability. This potentially affects all applications using Grackle which have untrusted users. Both stack overflow issues have been resolved in the v0.18.0 release of Grackle. As a workaround, users could interpose a sanitizing layer in between untrusted input and Grackle query processing.
- Record
EUVD-2023-3206- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-g56x-7j6w-g8r8
7.5
Grackle has StackOverflowError in GraphQL query processing
Impact
Prior to this fix, the GraphQL query parsing was vulnerable to StackOverflowErrors. The possibility of small queries resulting in stack overflow is a potential denial of service vulnerability.
This potentially affects all applications using Grackle which have untrusted users.
[!CAUTION]
No specific knowledge of an application's GraphQL schema would be required to construct a pathological query.
Patches
The stack overflow issues have been resolved in the v0.18.0 release of Grackle.
Workarounds
Users could interpose a sanitizing layer in between untrusted input and Grackle query processing.
- Record
GHSA-g56x-7j6w-g8r8- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
NVD
7.5
Grackle is a GraphQL server written in functional Scala, built on the Typelevel stack. The GraphQL specification requires that GraphQL fragments must not form cycles, either directly or indirectly. Prior to Grackle version 0.18.0, that requirement wasn't checked, and queries with cyclic fragments would have been accepted for type checking and compilation. The attempted compilation of such fragments would result in a JVM StackOverflowError being thrown. Some knowledge of an applications GraphQL schema would be required to construct such a query, however no knowledge of any application-specific performance or other behavioural characteristics would be needed.
Grackle uses the cats-parse library for parsing GraphQL queries. Prior to version 0.18.0, Grackle made use of the cats-parse recursive operator. However, recursive is not currently stack safe. recursive was used in three places in the parser: nested selection sets, nested input values (lists and objects), and nested list type declarations. Consequently, queries with deeply nested selection sets, input values or list types could be constructed which exploited this, causing a JVM StackOverflowException to be thrown during parsing. Because this happens very early in query processing, no specific knowledge of an applications GraphQL schema would be required to construct such a query.
The possibility of small queries resulting in stack overflow is a potential denial of service vulnerability. This potentially affects all applications using Grackle which have untrusted users. Both stack overflow issues have been resolved in the v0.18.0 release of Grackle. As a workaround, users could interpose a sanitizing layer in between untrusted input and Grackle query processing.
- Record
CVE-2023-50730- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
OSV
7.5
Grackle has StackOverflowError in GraphQL query processing
Grackle is a GraphQL server written in functional Scala, built on the Typelevel stack. The GraphQL specification requires that GraphQL fragments must not form cycles, either directly or indirectly. Prior to Grackle version 0.18.0, that requirement wasn't checked, and queries with cyclic fragments would have been accepted for type checking and compilation. The attempted compilation of such fragments would result in a JVM StackOverflowError being thrown. Some knowledge of an applications GraphQL schema would be required to construct such a query, however no knowledge of any application-specific performance or other behavioural characteristics would be needed.
Grackle uses the cats-parse library for parsing GraphQL queries. Prior to version 0.18.0, Grackle made use of the cats-parse recursive operator. However, recursive is not currently stack safe. recursive was used in three places in the parser: nested selection sets, nested input values (lists and objects), and nested list type declarations. Consequently, queries with deeply nested selection sets, input values or list types could be constructed which exploited this, causing a JVM StackOverflowException to be thrown during parsing. Because this happens very early in query processing, no specific knowledge of an applications GraphQL schema would be required to construct such a query.
The possibility of small queries resulting in stack overflow is a potential denial of service vulnerability. This potentially affects all applications using Grackle which have untrusted users. Both stack overflow issues have been resolved in the v0.18.0 release of Grackle. As a workaround, users could interpose a sanitizing layer in between untrusted input and Grackle query processing.
- Record
CVE-2023-50730- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400, CWE-770
- Updated
- 2026-11-02
OSVGHSA-g56x-7j6w-g8r8
7.5
Grackle has StackOverflowError in GraphQL query processing
Impact
Prior to this fix, the GraphQL query parsing was vulnerable to StackOverflowErrors. The possibility of small queries resulting in stack overflow is a potential denial of service vulnerability.
This potentially affects all applications using Grackle which have untrusted users.
[!CAUTION]
No specific knowledge of an application's GraphQL schema would be required to construct a pathological query.
Patches
The stack overflow issues have been resolved in the v0.18.0 release of Grackle.
Workarounds
Users could interpose a sanitizing layer in between untrusted input and Grackle query processing.
- Record
GHSA-g56x-7j6w-g8r8- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-400
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
org.typelevel:grackle-core_2.13Maven |
before 0.18.0 | 0.18.0 |
org.typelevel:grackle-core_3Maven |
before 0.18.0 | 0.18.0 |
org.typelevel:grackle-core_sjs1_2.13Maven |
before 0.18.0 | 0.18.0 |
org.typelevel:grackle-core_sjs1_3Maven |
before 0.18.0 | 0.18.0 |
org.typelevel:grackle-core_native0.4_2.13Maven |
before 0.18.0 | 0.18.0 |
org.typelevel:grackle-core_native0.4_3Maven |
before 0.18.0 | 0.18.0 |
edu.gemini:gsp-graphql-core_2.13Maven |
through 0.14.0 | None known |
edu.gemini:gsp-graphql-core_3Maven |
through 0.14.0 | None known |
edu.gemini:gsp-graphql-core_sjs1_2.13Maven |
through 0.14.0 | None known |
edu.gemini:gsp-graphql-core_sjs1_3Maven |
through 0.14.0 | None known |
Show 14 moreShow less
| Package | Affected | Fixed |
|---|---|---|
edu.gemini:gsp-graphql-core_native0.4_2.13Maven |
through 0.14.0 | None known |
edu.gemini:gsp-graphql-core_native0.4_3Maven |
through 0.14.0 | None known |
org.typelevel:grackle-core_2.13Maven |
before 0.18.0, plus listed versions 0.15.00.16.00.16.10.17.00.17.10.17.2 |
0.18.0 |
org.typelevel:grackle-core_3Maven |
before 0.18.0, plus listed versions 0.15.00.16.00.16.10.17.00.17.10.17.2 |
0.18.0 |
org.typelevel:grackle-core_sjs1_2.13Maven |
before 0.18.0, plus listed versions 0.15.00.16.00.16.10.17.00.17.10.17.2 |
0.18.0 |
org.typelevel:grackle-core_sjs1_3Maven |
before 0.18.0, plus listed versions 0.15.00.16.00.16.10.17.00.17.10.17.2 |
0.18.0 |
org.typelevel:grackle-core_native0.4_2.13Maven |
before 0.18.0, plus listed versions 0.15.00.16.00.16.10.17.00.17.10.17.2 |
0.18.0 |
org.typelevel:grackle-core_native0.4_3Maven |
before 0.18.0, plus listed versions 0.15.00.16.00.16.10.17.00.17.10.17.2 |
0.18.0 |
edu.gemini:gsp-graphql-core_2.13Maven |
through 0.14.0, plus listed versions 0.0.10.0.100.0.110.0.120.0.13 Show 45 moreShow less0.0.140.0.150.0.160.0.170.0.180.0.190.0.20.0.210.0.220.0.230.0.240.0.250.0.260.0.270.0.280.0.290.0.30.0.300.0.310.0.320.0.330.0.340.0.350.0.360.0.370.0.380.0.390.0.40.0.400.0.410.0.420.0.430.0.440.0.450.0.470.0.480.0.490.0.50.0.500.0.60.0.70.0.80.0.90.1.00.1.1 |
None known |
edu.gemini:gsp-graphql-core_3Maven |
through 0.14.0, plus listed versions 0.0.470.0.480.0.490.0.500.1.0 Show 39 moreShow less0.1.10.1.100.1.110.1.120.1.130.1.140.1.150.1.160.1.20.1.30.1.40.1.50.1.60.1.70.1.80.1.90.10.00.10.10.10.20.10.30.11.00.12.00.13.00.2.00.2.10.3.00.3.10.3.20.4.00.5.00.5.10.5.20.6.00.7.00.8.00.8.10.8.20.9.00.9.1 |
None known |
edu.gemini:gsp-graphql-core_sjs1_2.13Maven |
through 0.14.0, plus listed versions 0.13.0 |
None known |
edu.gemini:gsp-graphql-core_sjs1_3Maven |
through 0.14.0, plus listed versions 0.13.0 |
None known |
edu.gemini:gsp-graphql-core_native0.4_2.13Maven |
through 0.14.0, plus listed versions 0.13.0 |
None known |
edu.gemini:gsp-graphql-core_native0.4_3Maven |
through 0.14.0, plus listed versions 0.13.0 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| aliases | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2023-50730 is a high vulnerability (CVSS 7.5) in Typelevel Grackle, published December 18, 2023. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.83%, the 57th percentile. Fixed in org.typelevel:grackle-core_2.13 0.18.0.
References
github.com/typelevel/grackle/security/advisories/GHSA-g56x-7j6w-g8r8
github.com/typelevel/grackle/commit/56e244b91659cf385df590fc6c46695b6f36cbfd
github.com/typelevel/grackle/releases/tag/v0.18.0
nvd.nist.gov/vuln/detail/CVE-2023-50730
github.com/advisories/GHSA-g56x-7j6w-g8r8
github.com/CVEProject/cvelistV5/tree/main/cves/2023/50xxx/CVE-2023-50730.json
github.com/typelevel/grackle
Left out here: 38 versions. The JSON record has them.