<?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>Drupal GraphQL Module — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/drupal-graphql-module/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata — refreshed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 06 May 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/drupal-graphql-module/feed.xml" rel="self" type="application/rss+xml"/><item><title>webonyx/graphql-php Unbounded Recursion Vulnerability</title><link>https://feed.craftedsignal.io/briefs/2026-05-graphql-php-recursion/</link><pubDate>Wed, 06 May 2026 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-graphql-php-recursion/</guid><description>The webonyx/graphql-php library has an unbounded recursion vulnerability in its parser that can lead to a stack overflow, causing a denial of service by terminating the PHP process with a SIGSEGV.</description><content:encoded><![CDATA[<p>The <code>webonyx/graphql-php</code> library is vulnerable to unbounded recursion in its parser. This vulnerability, present in the <code>GraphQL\Language\Parser</code> component, allows an attacker to cause a denial-of-service (DoS) by sending a crafted GraphQL query with excessive nesting. The parser, lacking any recursion depth limit, exhausts the C stack, leading to a SIGSEGV signal and the termination of the PHP process. The smallest crashing payload is approximately 74 KB, making exploitation feasible. This issue affects version v15.31.4 and likely earlier versions due to the unchanged recursive descent parsing design. This vulnerability poses a significant risk to applications using the affected library, including those built with Laravel (Lighthouse), Symfony (Overblog/GraphQLBundle), WordPress (wp-graphql), and Drupal (Drupal GraphQL module).</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker crafts a malicious GraphQL query containing deeply nested structures, such as lists or objects.</li>
<li>The attacker sends the crafted GraphQL query to the web server hosting the vulnerable application.</li>
<li>The web server passes the query to the PHP application for processing.</li>
<li>The <code>GraphQL\Language\Parser</code> component within <code>webonyx/graphql-php</code> begins parsing the query using recursive descent methods.</li>
<li>Due to the excessive nesting, the parser&rsquo;s recursion depth increases without bound, consuming C stack memory.</li>
<li>The C stack is exhausted, triggering a SIGSEGV signal within the PHP runtime.</li>
<li>The PHP process terminates abruptly, interrupting any in-flight requests handled by that process.</li>
<li>The application becomes unavailable, resulting in a denial of service.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability results in a denial-of-service condition. A single, relatively small (74 KB) POST request can terminate the PHP process handling it. In environments like php-fpm, this leads to worker processes being killed and respawned, dropping in-flight requests. Long-running PHP runtimes such as Swoole or RoadRunner will experience complete daemon failure. This occurs before any validation rules are applied, bypassing complexity analyzers and other defense mechanisms. The lack of a catchable error means there are no application-level logs or error messages generated, complicating incident response.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Apply the recommended patch by the maintainers of <code>webonyx/graphql-php</code> when available, which introduces a recursion depth counter (Option 1 in the source).</li>
<li>As a temporary mitigation, consider implementing a front-end proxy or web application firewall (WAF) rule to limit the size of incoming GraphQL queries to prevent payloads exceeding 74KB.</li>
<li>Monitor PHP-FPM logs for &ldquo;child exited on signal 11 (SIGSEGV)&rdquo; messages to detect potential exploitation attempts.</li>
<li>Implement rate limiting on GraphQL endpoints to reduce the impact of potential DoS attacks.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>graphql</category><category>denial-of-service</category><category>recursion</category><category>php</category></item></channel></rss>