{"url":"http://public2.vulnerablecode.io/api/packages/24156?format=json","purl":"pkg:pypi/tuf@0.14.0","type":"pypi","namespace":"","name":"tuf","version":"0.14.0","qualifiers":{},"subpath":"","is_vulnerable":true,"next_non_vulnerable_version":"0.19.0","latest_non_vulnerable_version":"7.0.0","affected_by_vulnerabilities":[{"url":"http://public2.vulnerablecode.io/api/vulnerabilities/109114?format=json","vulnerability_id":"VCID-b51v-cru2-t3de","summary":"Python-TUF vulnerable to incorrect threshold signature computation for new root metadata\n### Impact\n\nThe function `_verify_root_self_signed()`, introduced in [v0.14.0](https://github.com/theupdateframework/tuf/releases/tag/v0.14.0), and which verifies self-signatures in a new root metadata file, counted multiple signatures by any new root key towards the new threshold. That is, any single new root key could theoretically provide enough signatures to meet the threshold for new key self-signatures required during root metadata update.\n\nA scenario where this attack could be relevant is amazingly unlikely in practice to the point where labeling this issue as a security advisory is potentially overstating the impact of the issue. Given that new root keys only become trusted by the client after a successful root metadata update, which also requires the quorum of signatures from old trusted root keys, this issue has been evaluated as low in severity.\n\nIn particular, in order to exploit this vulnerability, an attacker must:\n\n1. Control one new root key.\n2. Craft a new root metadata file such that there is a number of signatures by this new root key greater than or equal to the new threshold.\n3. Cause a valid threshold of the old root keys to sign this new root metadata file.\n4. Cause this new root metadata file to be published on the repository.\n5. Cause clients to rotate to this new root metadata file.\n\n### Patches\nA [fix](https://github.com/theupdateframework/tuf/commit/83ac7be525b733f79a7e9bc573ec580ec835f179) is available since [version 0.16.0](https://github.com/theupdateframework/tuf/releases/tag/v0.16.0).\n\n### Workarounds\nNo workarounds are known for this issue.\n\n### References\n* Pull request resolving the issue [PR 1218](https://github.com/theupdateframework/tuf/pull/1218)\n* Pull request which introduced the faulty computation of signature threshold on new root metadata [PR 1101](https://github.com/theupdateframework/tuf/pull/1101)\n* A similar previous issue with incorrectly computed signature thresholds in tuf is described in [GHSA-pwqf-9h7j-7mv8](https://github.com/theupdateframework/tuf/security/advisories/GHSA-pwqf-9h7j-7mv8)","references":[{"reference_url":"https://github.com/theupdateframework/python-tuf","reference_id":"","reference_type":"","scores":[{"value":"LOW","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf"},{"reference_url":"https://github.com/theupdateframework/python-tuf/pull/1218","reference_id":"","reference_type":"","scores":[{"value":"LOW","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf/pull/1218"},{"reference_url":"https://github.com/theupdateframework/python-tuf/security/advisories/GHSA-pwqf-9h7j-7mv8","reference_id":"","reference_type":"","scores":[{"value":"LOW","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf/security/advisories/GHSA-pwqf-9h7j-7mv8"},{"reference_url":"https://github.com/theupdateframework/python-tuf/security/advisories/GHSA-r7vq-6425-j94w","reference_id":"","reference_type":"","scores":[{"value":"LOW","scoring_system":"cvssv3.1_qr","scoring_elements":""},{"value":"LOW","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf/security/advisories/GHSA-r7vq-6425-j94w"},{"reference_url":"https://github.com/theupdateframework/tuf/pull/1101","reference_id":"","reference_type":"","scores":[{"value":"LOW","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/tuf/pull/1101"},{"reference_url":"https://github.com/advisories/GHSA-r7vq-6425-j94w","reference_id":"GHSA-r7vq-6425-j94w","reference_type":"","scores":[{"value":"LOW","scoring_system":"cvssv3.1_qr","scoring_elements":""}],"url":"https://github.com/advisories/GHSA-r7vq-6425-j94w"}],"fixed_packages":[{"url":"http://public2.vulnerablecode.io/api/packages/24158?format=json","purl":"pkg:pypi/tuf@0.16.0","is_vulnerable":true,"affected_by_vulnerabilities":[{"vulnerability":"VCID-px54-yh8d-5bbc"}],"resource_url":"http://public2.vulnerablecode.io/packages/pkg:pypi/tuf@0.16.0"}],"aliases":["GHSA-r7vq-6425-j94w","GMS-2022-4197"],"risk_score":1.4,"exploitability":"0.5","weighted_severity":"2.7","resource_url":"http://public2.vulnerablecode.io/vulnerabilities/VCID-b51v-cru2-t3de"},{"url":"http://public2.vulnerablecode.io/api/vulnerabilities/35897?format=json","vulnerability_id":"VCID-px54-yh8d-5bbc","summary":"python-tuf is a Python reference implementation of The Update Framework (TUF). In both clients (`tuf/client` and `tuf/ngclient`), there is a path traversal vulnerability that in the worst case can overwrite files ending in `.json` anywhere on the client system on a call to `get_one_valid_targetinfo()`. It occurs because the rolename is used to form the filename, and may contain path traversal characters (ie `../../name.json`). The impact is mitigated by a few facts: It only affects implementations that allow arbitrary rolename selection for delegated targets metadata, The attack requires the ability to A) insert new metadata for the path-traversing role and B) get the role delegated by an existing targets metadata, The written file content is heavily restricted since it needs to be a valid, signed targets file. The file extension is always .json. A fix is available in version 0.19 or newer. There are no workarounds that do not require code changes. Clients can restrict the allowed character set for rolenames, or they can store metadata in files named in a way that is not vulnerable: neither of these approaches is possible without modifying python-tuf.","references":[{"reference_url":"https://api.first.org/data/v1/epss?cve=CVE-2021-41131","reference_id":"","reference_type":"","scores":[{"value":"0.00644","scoring_system":"epss","scoring_elements":"0.71081","published_at":"2026-06-05T12:55:00Z"},{"value":"0.00644","scoring_system":"epss","scoring_elements":"0.71039","published_at":"2026-06-04T12:55:00Z"}],"url":"https://api.first.org/data/v1/epss?cve=CVE-2021-41131"},{"reference_url":"https://github.com/pypa/advisory-database/tree/main/vulns/tuf/PYSEC-2021-376.yaml","reference_id":"","reference_type":"","scores":[{"value":"7.5","scoring_system":"cvssv3.1","scoring_elements":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N"},{"value":"6.9","scoring_system":"cvssv4","scoring_elements":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N"},{"value":"MODERATE","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/pypa/advisory-database/tree/main/vulns/tuf/PYSEC-2021-376.yaml"},{"reference_url":"https://github.com/theupdateframework/python-tuf","reference_id":"","reference_type":"","scores":[{"value":"7.5","scoring_system":"cvssv3.1","scoring_elements":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N"},{"value":"6.9","scoring_system":"cvssv4","scoring_elements":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N"},{"value":"MODERATE","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf"},{"reference_url":"https://github.com/theupdateframework/python-tuf/commit/4ad7ae48fda594b640139c3b7eae21ed5155a102","reference_id":"","reference_type":"","scores":[{"value":"7.5","scoring_system":"cvssv3.1","scoring_elements":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N"},{"value":"6.9","scoring_system":"cvssv4","scoring_elements":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N"},{"value":"MODERATE","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf/commit/4ad7ae48fda594b640139c3b7eae21ed5155a102"},{"reference_url":"https://github.com/theupdateframework/python-tuf/issues/1527","reference_id":"","reference_type":"","scores":[{"value":"7.5","scoring_system":"cvssv3.1","scoring_elements":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N"},{"value":"6.9","scoring_system":"cvssv4","scoring_elements":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N"},{"value":"MODERATE","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf/issues/1527"},{"reference_url":"https://github.com/theupdateframework/python-tuf/security/advisories/GHSA-wjw6-2cqr-j4qr","reference_id":"","reference_type":"","scores":[{"value":"7.5","scoring_system":"cvssv3.1","scoring_elements":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N"},{"value":"6.9","scoring_system":"cvssv4","scoring_elements":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N"},{"value":"MODERATE","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://github.com/theupdateframework/python-tuf/security/advisories/GHSA-wjw6-2cqr-j4qr"},{"reference_url":"https://nvd.nist.gov/vuln/detail/CVE-2021-41131","reference_id":"CVE-2021-41131","reference_type":"","scores":[{"value":"7.5","scoring_system":"cvssv3.1","scoring_elements":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:H/A:N"},{"value":"6.9","scoring_system":"cvssv4","scoring_elements":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:H/SA:N"},{"value":"MODERATE","scoring_system":"generic_textual","scoring_elements":""}],"url":"https://nvd.nist.gov/vuln/detail/CVE-2021-41131"},{"reference_url":"https://github.com/advisories/GHSA-wjw6-2cqr-j4qr","reference_id":"GHSA-wjw6-2cqr-j4qr","reference_type":"","scores":[],"url":"https://github.com/advisories/GHSA-wjw6-2cqr-j4qr"}],"fixed_packages":[{"url":"http://public2.vulnerablecode.io/api/packages/24162?format=json","purl":"pkg:pypi/tuf@0.19.0","is_vulnerable":false,"affected_by_vulnerabilities":[],"resource_url":"http://public2.vulnerablecode.io/packages/pkg:pypi/tuf@0.19.0"}],"aliases":["CVE-2021-41131","GHSA-wjw6-2cqr-j4qr","PYSEC-2021-376"],"risk_score":3.4,"exploitability":"0.5","weighted_severity":"6.8","resource_url":"http://public2.vulnerablecode.io/vulnerabilities/VCID-px54-yh8d-5bbc"}],"fixing_vulnerabilities":[],"risk_score":"3.4","resource_url":"http://public2.vulnerablecode.io/packages/pkg:pypi/tuf@0.14.0"}