{"schema":"threatline.record/2","record":{"id":"GHSA-6fj4-rcr3-r7rr","aliases":["GHSA-6fj4-rcr3-r7rr","RUSTSEC-2026-0187"],"summary":"lopdf has a stack overflow via deeply nested PDF objects","details":"`lopdf::Document::load_mem` (and the other `load*` entry points) parses nested PDF arrays and dictionaries with unbounded recursion. A small crafted PDF whose Catalog contains a deeply nested array (`/X [[[ … ]]]`, on the order of 10,000 levels) exhausts the call stack and aborts the process with `SIGABRT`.\n\nBecause this is a stack-overflow abort rather than a `panic!`, it cannot be caught with `catch_unwind`: any service that parses untrusted PDF input with lopdf can be crashed by a ~21 KB file, resulting in a denial of service.\n\nConfirmed on lopdf 0.41.0 and earlier; fixed in 0.42.0. Default configuration, no features changed.\n\n## Proof of concept\n\n```rust\nfn main() {\n    let bytes = std::fs::read(\"poc.pdf\").unwrap(); // ~10,380-deep nested array in the Catalog\n    let _ = lopdf::Document::load_mem(&bytes);     // stack overflow -> SIGABRT\n}\n```\n\nAn equivalent PoC is a minimal PDF whose Catalog `/X` value is `\"[\" * 10380 + \"]\" * 10380`.\n\n## Suggested fix\n\nEnforce a maximum object-nesting depth in the parser and return an `Err` instead of recursing without bound.","categories":["Libraries & packages"],"product":"lopdf","vendor":"","ecosystem":"rust","affected_ranges":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-6fj4-rcr3-r7rr","source_modified_at":"2026-10-16T19:55:40Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"rust","name":"lopdf"},"range":"< 0.42.0"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-6fj4-rcr3-r7rr","source_modified_at":"2026-10-17T15:26:01.305676388Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"lopdf","ecosystem":"crates.io","purl":"pkg:cargo/lopdf"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.42.0"}]}],"versions":[]}],"fixed_versions":[{"source":"GitHub Advisory Database","source_url":"https://github.com/advisories/GHSA-6fj4-rcr3-r7rr","source_modified_at":"2026-10-16T19:55:40Z","fetched_at":"2026-10-23T18:42:43.628194Z","package":{"ecosystem":"rust","name":"lopdf"},"version":"0.42.0"},{"source":"OSV","source_url":"https://osv.dev/vulnerability/GHSA-6fj4-rcr3-r7rr","source_modified_at":"2026-10-17T15:26:01.305676388Z","fetched_at":"2026-10-23T18:45:31.882637Z","package":{"name":"lopdf","ecosystem":"crates.io","purl":"pkg:cargo/lopdf"},"version":"0.42.0"}],"cvss":7.5,"severity":"High","kev":{"listed":false},"epss":{"probability":null,"percentile":null,"score_date":null},"published_at":"2026-10-16T19:55:39Z","modified_at":"2026-10-17T15:26:01.305676388Z","provenance":[{"source":"GitHub Advisory Database","url":"https://github.com/advisories/GHSA-6fj4-rcr3-r7rr","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-16T19:55:40Z"},{"source":"OSV","url":"https://osv.dev/vulnerability/GHSA-6fj4-rcr3-r7rr","fetched_at":"2026-10-23T18:45:31.882637Z","source_modified_at":"2026-10-17T15:26:01.305676388Z"}],"sources":["GitHub Advisory Database","OSV"],"references":[{"url":"https://github.com/J-F-Liu/lopdf/issues/502","source":"GitHub Advisory Database"},{"url":"https://github.com/J-F-Liu/lopdf/pull/503","source":"GitHub Advisory Database"},{"url":"https://github.com/J-F-Liu/lopdf/commit/c755394ad7dd651ccfe77c618f90ab779da1dfd9","source":"GitHub Advisory Database"},{"url":"https://rustsec.org/advisories/RUSTSEC-2026-0187.html","source":"GitHub Advisory Database"},{"url":"https://github.com/advisories/GHSA-6fj4-rcr3-r7rr","source":"GitHub Advisory Database"}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":"ecosystem","confidence":"heuristic","reviewed":false},"change_timestamp":"2026-10-17T15:26:01.305676388Z","content_hash":"5e2a9f584f3f19100807b4e6f7a300159c25a67c443e9eeba5db62f3fcfc5f4f"}}
