CVE-2020-28463 — reportlab
MEDIUMCVE-2020-28463 is a medium-severity (CVSS 6.5) Server-Side Request Forgery (SSRF) vulnerability in reportlab. 1 public exploit or proof-of-concept reference is indexed, so weaponization risk is real. A fix is available for reportlab — see the affected versions and patch details below.
Server-side Request Forgery (SSRF) via img tags in reportlab
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
How urgent is this, really
Where this sits among everything scored
Real-World Exposure
reportlabReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects PyPI packages — download data is not available via public APIs for these ecosystems.
Description
All versions of package reportlab at time of writing are vulnerable to Server-side Request Forgery (SSRF) via img tags. In order to reduce risk, use trustedSchemes & trustedHosts (see in Reportlab's documentation)
Steps to reproduce by Karan Bamal:
- Download and install the latest package of reportlab
- Go to demos -> odyssey -> dodyssey
- In the text file odyssey.txt that needs to be converted to pdf inject
<img src="http://127.0.0.1:5000" valign="top"/> - Create a nc listener
nc -lp 5000 - Run python3 dodyssey.py
- You will get a hit on your nc showing we have successfully proceded to send a server side request
- dodyssey.py will show error since there is no img file on the url, but we are able to do SSRF
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐍PyPI | reportlab | all versions | 3.5.55pip install --upgrade 'reportlab==3.5.55' |
Affected Products
fedorafedoraprojectreportlabreportlabResearch use only. For defensive security, authorized penetration testing, and academic research only. Never execute exploit code against systems without explicit written authorization.
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for reportlab, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update reportlab to 3.5.55 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2020-28463 is resolved across your whole dependency graph.
Workarounds
Restrict outbound requests from the affected component to an allowlist of hosts, block access to link-local and internal address ranges at the network layer, and require authentication on internal services so a forged request cannot reach them unauthenticated.
Frequently Asked Questions
Is CVE-2020-28463 in your dependencies?
Find it across PyPI, including transitive dependencies.