GHSA-vh75-fwv3-pqrh is a medium-severity (CVSS 6.5) Server-Side Request Forgery (SSRF) vulnerability in requests-hardened. O3 Security confirms whether GHSA-vh75-fwv3-pqrh is actually reachable in your code before you act, and blocks exploitation at runtime until you patch.
requests-hardened is Vulnerable to Server-Side Request Forgery
Real-World Exposure
requests-hardenedReal-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
The SSRF protection in requests-hardened prior to version 1.2.1 fails to block IP addresses within the RFC 6598 Shared Address Space (100.64.0.0/10). An attacker who can supply arbitrary URLs to requests-hardened could exploit this gap to access internal services hosted within 100.64.0.0/10. This is for example relevant in environments such as AWS EKS where 100.64.0.0/10 is commonly used as the default pod CIDR.
The impact is environment-dependent, deployments that utilize the affected CIDR range for internal networking are exposed to SSRF bypass, while others may not be affected.
The issue is resolved in version 1.2.1 by extending the IP filtering logic to explicitly block the RFC 6598 range in addition to standard private addresses, as well as blocking all other reserved addresses (such as multicast) to prevent the re-occurrence of similar issues.
Version 1.2.1 is now blocking the following CIDRs:
192.88.99.0/24- 6to4 relay anycast100.64.0.0/10- CG-NAT5f00::/16- IPv6 Segment Routing64:ff9b::/96- used for IPv6 & IPv4 translation (NAT64)2001:20::/28- ORCHIDv2 (overlay identifiers)224.0.0.0/4- multicastff00::/8- multicast
Resources
- https://github.com/python/cpython/issues/119812
- https://github.com/saleor/requests-hardened/commit/b7403f88d3b3689e57435b75b51691a160aaeef5 - the fix itself
- https://github.com/saleor/requests-hardened/commit/a266b3958bb142bca515b3c230fdea19fbda327c - follow up, adding additional support for outdated Python versions (
3.11.9and3.10.11instead of only3.11.15and3.10.20) - https://github.com/saleor/requests-hardened/releases/tag/v1.2.1
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐍PyPI | requests-hardened | all versions | 1.2.1 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for requests-hardened. O3's reachability analysis confirms whether the vulnerable code path is actually invoked in your application, so you act on real exposure instead of every transitive match.
Fix
Update requests-hardened to 1.2.1 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-vh75-fwv3-pqrh is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
How O3 protects you
O3 pinpoints whether GHSA-vh75-fwv3-pqrh is reachable in your code and exactly where to fix it, then blocks exploitation in production at runtime until the patched version is deployed.
Tailored to GHSA-vh75-fwv3-pqrh. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.
Frequently Asked Questions
Is GHSA-vh75-fwv3-pqrh in your dependencies?
O3 detects GHSA-vh75-fwv3-pqrh across PyPI dependencies and uses function-level reachability to confirm whether the vulnerable code path is actually reachable — not just present. No false positives.