CVE-2019-17109 is a medium-severity (CVSS 6.5) Path Traversal vulnerability in koji. A fix is available for koji — see the affected versions and patch details below.
koji hub allows arbitrary upload destinations
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
koji🐍koji🐍koji🐍koji🐍kojiReal-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 way that the hub code validates upload paths allows for an attacker to choose an arbitrary destination for the uploaded file. Uploading still requires login. However, an attacker with credentials could damage the integrity of the Koji system.
Workaround
There is no known workaround. All Koji admins are encouraged to update to a fixed version as soon as possible.
Fix
Koji versions 1.14.3, 1.15.3, 1.16.3, 1.17.1, and 1.18.1 all include patches to solve this vulnerability.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐍PyPI | koji | ≥ 1.14.0&&< 1.14.3 | 1.14.3pip install --upgrade 'koji==1.14.3' |
| 🐍PyPI | koji | ≥ 1.15.0&&< 1.15.3 | 1.15.3pip install --upgrade 'koji==1.15.3' |
| 🐍PyPI | koji | ≥ 1.16.0&&< 1.16.3 | 1.16.3pip install --upgrade 'koji==1.16.3' |
| 🐍PyPI | koji | ≥ 1.17.0&&< 1.17.1 | 1.17.1pip install --upgrade 'koji==1.17.1' |
| 🐍PyPI | koji | ≥ 1.18.0&&< 1.18.1 | 1.18.1pip install --upgrade 'koji==1.18.1' |
Affected Products
kojikoji_projectDetection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for koji, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update koji to 1.14.3 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2019-17109 is resolved across your whole dependency graph.
Workarounds
Resolve every user-supplied path to its canonical form and reject anything that escapes the intended directory, and run the component under an account that has no read or write access outside the directory it legitimately serves.
Frequently Asked Questions
Is CVE-2019-17109 in your dependencies?
Find it across PyPI, including transitive dependencies.