<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Absinthe — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/tags/absinthe/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Thu, 14 May 2026 13:16:21 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/tags/absinthe/feed.xml" rel="self" type="application/rss+xml"/><item><title>Absinthe GraphQL Fragment Validation Denial-of-Service (CVE-2026-43967)</title><link>https://feed.craftedsignal.io/briefs/2026-05-absinthe-graphql-dos/</link><pubDate>Thu, 14 May 2026 13:16:21 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-absinthe-graphql-dos/</guid><description>A denial-of-service vulnerability exists in the Absinthe GraphQL library (versions 1.2.0 to 1.10.1), where an unauthenticated attacker can exhaust server resources by submitting a crafted GraphQL query with a large number of fragment definitions due to the quadratic complexity of fragment name uniqueness validation.</description><content:encoded><![CDATA[<p>A denial-of-service vulnerability exists in the Absinthe GraphQL library, specifically in versions 1.2.0 through 1.10.1. The vulnerability stems from the inefficient algorithm used to validate the uniqueness of fragment names within a GraphQL query. An unauthenticated attacker can exploit this by sending a specially crafted GraphQL query that contains a large number of fragment definitions. The validation process, which has a time complexity of O(N²), leads to excessive CPU consumption, potentially exhausting server resources and causing a denial of service. No authentication or schema knowledge is required; the attacker only needs to send a large GraphQL query.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The attacker crafts a GraphQL query containing a very large number of fragment definitions. Each fragment definition minimally includes the <code>fragment</code> keyword, a unique name, the <code>on</code> keyword, and a type (<code>fragment a on T{f}</code>).</li>
<li>The attacker sends the crafted GraphQL query to the Absinthe GraphQL endpoint via an HTTP POST request. The request body uses the JSON format.</li>
<li>The Absinthe library receives the request and parses the GraphQL query, creating an internal representation of the document including a list of fragments.</li>
<li>The <code>Absinthe.Phase.Document.Validation.UniqueFragmentNames</code> module is invoked to validate the uniqueness of the fragment names within the query.</li>
<li>The <code>run/2</code> function iterates through each fragment in the <code>input.fragments</code> list.</li>
<li>For each fragment, the <code>process/2</code> function is called which, in turn, calls <code>duplicate?/2</code> to check for duplicates.</li>
<li><code>duplicate?/2</code> performs a linear scan (<code>Enum.count</code>) of the entire fragment list to count occurrences of the current fragment&rsquo;s name, resulting in N*N comparisons.</li>
<li>Due to the quadratic complexity, processing the large number of fragments consumes excessive CPU resources, potentially leading to worker exhaustion and denial of service.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>This vulnerability can lead to a denial-of-service condition on any service that exposes an Absinthe GraphQL endpoint to untrusted callers. A single unauthenticated POST request containing a large number of fragment definitions can tie up a worker process for several seconds. A modest amount of sustained traffic can exhaust the request-handling pool, rendering the service unavailable. The demonstration shows that 20,000 fragments can cause 15 seconds of CPU usage.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade to Absinthe version 1.10.2 or later, which includes a fix that reduces the complexity of the fragment name uniqueness validation to O(N).</li>
<li>Monitor GraphQL endpoints for abnormally large requests containing excessive fragment definitions. Implement rate limiting to mitigate potential denial-of-service attacks.</li>
<li>Deploy the Sigma rule <code>Detect Absinthe GraphQL Excessive Fragments (CVE-2026-43967)</code> to detect requests with a high number of GraphQL fragments in web server logs.</li>
<li>Consider implementing a maximum body size limit on GraphQL requests to prevent attackers from sending extremely large queries. The report mentions Phoenix&rsquo;s default is 8 MB.</li>
</ul>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category><category>denial of service</category><category>graphql</category><category>absinthe</category><category>algorithmic complexity</category><category>CVE-2026-43967</category></item></channel></rss>