{"id":"CVE-2026-119203","kind":"vulnerability","aliases":["CVE-2026-119203"],"related":[],"title":"pypdf: crafted incomplete PDF causes infinite loop when opened","description":"pypdf is a free and open-source pure-python PDF library. Prior to 6.21.4, pypdf can enter an infinite loop while opening a crafted incomplete PDF whose standard cross-reference table reaches the end of the file without a trailer. The trailer search can repeatedly rewind to the same stream position instead of terminating when parsing makes no progress, blocking the processing thread. This issue is fixed in version 6.21.4.","summary":"pypdf, a pure-Python PDF library, can hang forever when it opens a crafted PDF whose cross-reference table reaches end of file without a trailer. The stuck processing thread blocks the application, which is a denial of service.","severity":"high","cvss":7.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","pypdf","python"],"not_affected_if":["no-untrusted-pdf-input","pypdf-below-6.21.4-absent"],"how_to_check":"- Check the installed pypdf version with `pip show pypdf` or `python -c \"import pypdf; print(pypdf.__version__)\"`\n- Search dependency lock files (requirements.txt, poetry.lock, uv.lock) for pypdf versions below `6.21.4`\n- Find code paths that open untrusted PDF uploads with pypdf","fix":"- pypdf: upgrade to `6.21.4`","status":"open","published_at":"2026-10-29T21:17:19+00:00","first_seen_at":"2026-10-29T21:26:51+00:00","triaged_at":"2026-10-29T21:28:42+00:00","updated_at":"2026-10-29T21:28:42+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-29T21:28:42Z","model":"claude-haiku-5-5","output":{"fix":"- pypdf: upgrade to `6.21.4`","reach":"unknown","title":"pypdf: crafted incomplete PDF causes infinite loop when opened","impact":"low","summary":"pypdf, a pure-Python PDF library, can hang forever when it opens a crafted PDF whose cross-reference table reaches end of file without a trailer. The stuck processing thread blocks the application, which is a denial of service.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","pypdf"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"Processing thread hangs indefinitely, blocking the application","analyst_note":"","how_to_check":"- Check the installed pypdf version with `pip show pypdf` or `python -c \"import pypdf; print(pypdf.__version__)\"`\n- Search dependency lock files (requirements.txt, poetry.lock, uv.lock) for pypdf versions below `6.21.4`\n- Find code paths that open untrusted PDF uploads with pypdf","plain_action":"","needs_analyst":false,"not_affected_if":["pypdf-below-6.21.4-absent","no-untrusted-pdf-input"],"who_is_affected":"Applications that use pypdf to parse PDF files, especially those that open PDFs supplied by users or external sources, can be blocked by a crafted file. Apps that only process PDFs they generate themselves or never parse untrusted input are less exposed. The sources do not describe whether a hang can be triggered from the internet without authentication.","user_interaction":"unknown","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000704,"input_tokens":4149,"output_tokens":578,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-119203':12A,15A '-2026':11A,14A '6.21.4':75C,132C 'applic':53B 'block':51B,122C 'caus':5A 'craft':2A,33B,85C 'cross':37B,91C 'cross-refer':36B,90C 'cve':10A,13A 'denial':57B 'end':41B,96C 'enter':78C 'file':43B,99C 'fix':129C 'forev':28B 'free':63C 'hang':27B 'incomplet':3A,86C 'infinit':6A,80C 'instead':114C 'issu':127C 'librari':25B,72C 'loop':7A,81C 'make':119C 'open':9A,31B,66C,83C 'open-sourc':65C 'packag':16B 'pars':118C 'pdf':4A,24B,34B,71C,87C 'posit':113C 'prior':73C 'process':49B,124C 'progress':121C 'pure':22B,69C 'pure-python':21B,68C 'pypdf':1A,17B,19B,60C,76C 'python':18B,23B,70C 'reach':40B,94C 'refer':38B,92C 'repeat':107C 'rewind':108C 'search':105C 'servic':59B 'sourc':67C 'standard':89C 'stream':112C 'stuck':48B 'tabl':39B,93C 'termin':116C 'thread':50B,125C 'trailer':46B,102C,104C 'version':131C 'whose':35B,88C 'without':44B,100C","nicknames":[],"mitigations":[],"who_affected":"Applications that use pypdf to parse PDF files, especially those that open PDFs supplied by users or external sources, can be blocked by a crafted file. Apps that only process PDFs they generate themselves or never parse untrusted input are less exposed. The sources do not describe whether a hang can be triggered from the internet without authentication.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-10-29T21:17:19+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/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":"nvd","external_id":"CVE-2026-119203","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119203","severity":null,"published_at":"2026-10-29T21:17:19+00:00","modified_at":"2026-10-29T21:17:19+00:00","first_seen_at":"2026-10-29T21:26:51+00:00","fetched_at":"2026-10-29T21:26:51+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"}