Ecosyste.ms: Advisories
An open API service providing security vulnerability metadata for many open source software ecosystems.
Security Advisories: GSA_kwCzR0hTQS1obTl2LXZqM3ItcjU1bc4AA0Ka
PyPDF2 vulnerable to possible Infinite Loop when reading malformed objects
Impact
An attacker who uses this vulnerability can craft a PDF which leads to an infinite loop.
This infinite loop blocks the current process and can utilize a single core of the CPU by 100%. It does not affect memory usage. That is, for example, the case if the user extracted metadata from such a malformed PDF.
Patches
The issue was fixed with https://github.com/py-pdf/pypdf/pull/1331
Workarounds
If you cannot update your version of PyPDF2
(preferably to pypdf>3.1.0
as PyPDF2 is deprecated), you should modify PyPDF2/generic/_data_structures.py::read_object
.
Replace:
else:
# number object OR indirect reference
peek = stream.read(20)
stream.seek(-len(peek), 1) # reset to start
if IndirectPattern.match(peek) is not None:
return IndirectObject.read_from_stream(stream, pdf)
else:
return NumberObject.read_from_stream(stream)
by
elif tok in b"0123456789+-.":
# number object OR indirect reference
peek = stream.read(20)
stream.seek(-len(peek), 1) # reset to start
if IndirectPattern.match(peek) is not None:
return IndirectObject.read_from_stream(stream, pdf)
else:
return NumberObject.read_from_stream(stream)
else:
raise PdfReadError(
f"Invalid Elementary Object starting with {tok} @{stream.tell()}"
)
References Permalink: https://github.com/advisories/GHSA-hm9v-vj3r-r55m
JSON: https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS1obTl2LXZqM3ItcjU1bc4AA0Ka
Source: GitHub Advisory Database
Origin: Unspecified
Severity: Moderate
Classification: General
Published: 10 months ago
Updated: 6 months ago
CVSS Score: 6.2
CVSS vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Identifiers: GHSA-hm9v-vj3r-r55m, CVE-2023-36807
References:
- https://github.com/py-pdf/pypdf/security/advisories/GHSA-hm9v-vj3r-r55m
- https://nvd.nist.gov/vuln/detail/CVE-2023-36807
- https://github.com/py-pdf/pypdf/issues/1329
- https://github.com/py-pdf/pypdf/pull/1331
- https://github.com/py-pdf/pypdf/commit/e6531a25325e7e0174b6a1ba03b57320b5227f6b
- https://github.com/advisories/GHSA-hm9v-vj3r-r55m
Blast Radius: 19.9
Affected Packages
pypi:PyPDF2
Dependent packages: 126Dependent repositories: 1,626
Downloads: 6,383,106 last month
Affected Version Ranges: = 2.10.5
Fixed in: 2.10.6
All affected versions: 2.10.5
All unaffected versions: 1.25.1, 1.26.0, 1.27.0, 1.27.1, 1.27.2, 1.27.3, 1.27.4, 1.27.5, 1.27.6, 1.27.7, 1.27.8, 1.27.9, 1.27.10, 1.27.11, 1.27.12, 1.28.0, 1.28.1, 1.28.2, 1.28.3, 1.28.4, 1.28.5, 1.28.6, 2.0.0, 2.1.0, 2.1.1, 2.2.0, 2.2.1, 2.3.0, 2.3.1, 2.4.0, 2.4.1, 2.4.2, 2.5.0, 2.6.0, 2.7.0, 2.8.0, 2.8.1, 2.9.0, 2.10.0, 2.10.1, 2.10.2, 2.10.3, 2.10.4, 2.10.6, 2.10.7, 2.10.8, 2.10.9, 2.11.0, 2.11.1, 2.11.2, 2.12.0, 2.12.1, 3.0.0, 3.0.1