{"id":"CVE-2026-113794","kind":"vulnerability","aliases":["CVE-2026-113794","GHSA-39mj-jf6j-2qj3"],"related":[],"title":"pypdf: Possible infinite loop when hitting EOF in standard xref table","description":"### Impact\n\nAn attacker who uses this vulnerability can craft a PDF which leads to an infinite loop. This requires an incomplete file which ends inside the xref table.\n\n### Patches\n\nThis has been fixed in [pypdf==6.20.0](https://github.com/py-pdf/pypdf/releases/tag/6.20.0).\n\n### Workarounds\n\nIf you cannot upgrade yet, consider applying the changes from PR [#4170](https://github.com/py-pdf/pypdf/pull/4170).\n\n### Notes\n\nThis has been reported through both the secure channel and as a public issue at [#4169](https://github.com/py-pdf/pypdf/issues/4169).","summary":"pypdf, a Python PDF library, enters an infinite loop when parsing a PDF whose standard xref table is cut off at end of file. An attacker who supplies a crafted truncated PDF can hang the process that parses it, causing a denial of service.","severity":"medium","cvss":6.0,"epss":0.004660000093281269,"exploited":false,"exploited_at":null,"products":[{"name":"pypdf","fixed":["6.20.0"],"affected":"< 6.20.0","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["cwe-835","package","pdf-processing","pypdf","python"],"not_affected_if":["only-trusted-pdfs","pypdf-not-used"],"how_to_check":"Run pip show pypdf and check whether the version is below 6.20.0.","fix":"Upgrade pypdf to 6.20.0 or later. If you cannot upgrade, apply the changes from PR #4170 in py-pdf/pypdf.","status":"open","published_at":"2026-10-21T16:17:28+00:00","first_seen_at":"2026-10-23T19:11:32+00:00","triaged_at":"2026-10-23T20:10:24+00:00","updated_at":"2026-10-23T21:57:29+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-23T20:10:24Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade pypdf to 6.20.0 or later. If you cannot upgrade, apply the changes from PR #4170 in py-pdf/pypdf.","summary":"pypdf, a Python PDF library, enters an infinite loop when parsing a PDF whose standard xref table is cut off at end of file. An attacker who supplies a crafted truncated PDF can hang the process that parses it, causing a denial of service.","category":"package","who_cares":["python","pypdf","pdf-processing"],"confidence":0.8,"analyst_note":"","how_to_check":"Run pip show pypdf and check whether the version is below 6.20.0.\nunknown","needs_analyst":false,"not_affected_if":["pypdf-not-used","only-trusted-pdfs"],"severity_if_unknown":"medium"},"cost_usd":0.000359,"input_tokens":2176,"output_tokens":283,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-113794':14A,22A '-2026':13A,21A '-835':25B '/py-pdf/pypdf/issues/4169).':150C '/py-pdf/pypdf/pull/4170).':130C '/py-pdf/pypdf/releases/tag/6.20.0).':114C '2qj3':19A '39mj':17A '4169':147C '4170':127C '6.20.0':111C 'appli':122C 'attack':57B,78C 'cannot':118C 'caus':71B 'chang':124C 'channel':140C 'consid':121C 'craft':61B,84C 'cut':50B 'cve':12A,20A 'cwe':24B 'denial':73B 'end':53B,99C 'enter':37B 'eof':7A 'file':55B,97C 'fix':108C 'ghsa':16A 'ghsa-39mj-jf6j-2qj3':15A 'github.com':113C,129C,149C 'github.com/py-pdf/pypdf/issues/4169).':148C 'github.com/py-pdf/pypdf/pull/4170).':128C 'github.com/py-pdf/pypdf/releases/tag/6.20.0).':112C 'hang':65B 'hit':6A 'impact':76C 'incomplet':96C 'infinit':3A,39B,91C 'insid':100C 'issu':145C 'jf6j':18A 'lead':88C 'librari':36B 'loop':4A,40B,92C 'note':131C 'packag':26B 'pars':42B,69B 'patch':104C 'pdf':28B,35B,44B,63B,86C 'pdf-process':27B 'possibl':2A 'pr':126C 'process':29B,67B 'public':144C 'pypdf':1A,23A,30B,32B,110C 'python':31B,34B 'report':135C 'requir':94C 'secur':139C 'servic':75B 'standard':9A,46B 'suppli':59B 'tabl':11A,48B,103C 'truncat':62B 'upgrad':119C 'use':80C 'vulner':82C 'whose':45B 'workaround':115C 'xref':10A,47B,102C 'yet':120C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-21T16:17:28+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"ghsa","external_id":"GHSA-39mj-jf6j-2qj3","url":"https://github.com/advisories/GHSA-39mj-jf6j-2qj3","severity":"medium","published_at":"2026-10-21T16:54:44+00:00","modified_at":"2026-10-21T16:54:46+00:00","first_seen_at":"2026-10-23T19:11:32+00:00","fetched_at":"2026-10-23T19:11:32+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-113794","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113794","severity":null,"published_at":"2026-10-21T16:17:28+00:00","modified_at":"2026-10-22T16:46:48+00:00","first_seen_at":"2026-10-23T21:57:29+00:00","fetched_at":"2026-10-23T22:29:01+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}