Deeply nested fragments in a GraphQL request may cause a stack overflow in the server.
This project contains known security vulnerabilities. Find detailed information at the bottom.
juniper_rocket(5 total, 2 outdated, 1 insecure)
| Crate | Required | Latest | Status |
|---|---|---|---|
| juniper ⚠️ | ^0.11.0 | 0.18.0 | insecure |
| rocket | ^0.4.0 | 0.5.2 | out of date |
| serde | ^1.0.2 | 1.0.229 | up to date |
| serde_derive | ^1.0.2 | 1.0.229 | up to date |
| serde_json | ^1.0.2 | 1.0.154 | up to date |
(1 total, 1 outdated, 1 insecure)
| Crate | Required | Latest | Status |
|---|---|---|---|
| juniper ⚠️ | ^0.11.0 | 0.18.0 | insecure |
juniper: Denial of service on deeply nested fragment requestsDeeply nested fragments in a GraphQL request may cause a stack overflow in the server.
juniper: Stack overflow on deeply nested GraphQL documentsThe parser of juniper called 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 followed 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. One request can thus stop a server and drop all other requests in progress. The request needs no authentication.
juniper 0.17.2 rejects documents that nest deeper than 64 levels or contain more than 15,000 tokens. RootNode::limit_depth() and RootNode::limit_tokens() change the limits.
juniper: Excessive CPU and memory use on crafted GraphQL documentsSeveral parts of juniper did work that grew faster than the size of the GraphQL document. A small document could thus use seconds of CPU time or gigabytes of memory. The requests need no authentication.
OverlappingFieldsCanBeMerged compared all pairs of fields with the same response name. The rule also reported one error for each pair of conflicting fields.NoFragmentCycles and OverlappingFieldsCanBeMerged visited a fragment again for each path that spread the fragment. Validation time thus doubled with each fragment that spread the next fragment twice.juniper 0.17.2 fixes the issues. The parser rejects documents with more than 15,000 tokens and operations with more than 15,000 fields after the expansion of fragments. The validation rules visit each fragment once. OverlappingFieldsCanBeMerged stops after 100,000 field comparisons and reports at most 100 conflicts. RootNode::limit_tokens() and RootNode::limit_fields() change the limits.