
Cloud Vulnerability DB
A community-led vulnerabilities database
The parser of juniper calls itself once for each level of nesting in a GraphQL document. The parser had no limit on the nesting depth. Deeply nested selection sets, input values, and list types thus overflowed the stack of the thread that parsed the document. Validation and execution follow fragment spreads in the same recursive way. Long chains of fragment spreads thus overflowed the stack in validation and execution.
A stack overflow aborts the whole process. std::panic::catch_unwind() cannot catch the abort. One request can thus stop a server and drop all other requests in progress. The request needs no authentication. A document of about 11 KB overflows the 8 MiB stack of the main thread on Linux. Threads with smaller stacks overflow on smaller documents.
juniper 0.17.2 rejects documents that nest deeper than 64 levels. Each selection set, list value, object value, and list type adds a level. The selection set of a fragment counts at the depth of each spread of the fragment. The parser reports a document over the limit with ParseError::DepthLimitExceeded. RootNode::limit_depth() changes the limit.
juniper 0.17.2 also rejects documents with more than 15,000 tokens. RootNode::limit_tokens() changes the token limit.
No reliable workaround exists for earlier versions. A small limit on the size of request bodies makes the attack harder. Such a limit also rejects large legitimate documents.
juniper 0.17.2Source: NVD
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."