● ● ●
=== Remediation Plan ===
3 path(s) generated: minimum breakage 3/17 · maximum coverage 16/17 · balanced 8/17.
1. [Minimum Breakage] Exposure: 0.54 Breakage: 0.15 Confidence: ~ MEDIUM
This path performs a single upgrade (urllib3 → 2.6.3) that addresses all high-severity issues while keeping probable breakage low. It is the smallest change that materially reduces the most critical exposure. The known pip CVE has no available fix and remains in cves_no_fix; consider runtime hardening or replacing/pinning pip usage where possible.
| ↑ | urllib3 | 2.5.0 → 2.6.3 | (fixes GHSA-2xpw-w6gg-jr37, GHSA-38jv-5279-wg99, GHSA-gm62-xv2j-4w53) |
Resolves: GHSA-2xpw-w6gg-jr37, GHSA-38jv-5279-wg99, GHSA-gm62-xv2j-4w53
Open: GHSA-29vq-49wr-vm6x, GHSA-3936-cmfr-pm3m, GHSA-5239-wwwm-4pmq, GHSA-597g-3phw-6986, GHSA-68rp-wp8r-4726, GHSA-6vgw-5pg2-w6jp, GHSA-6w46-j5rx-g56g, GHSA-87hc-h4r5-73f7, GHSA-gc5v-m9x4-r6x2, GHSA-hgf8-39gv-g3f2, GHSA-mf9w-mj56-hr94, GHSA-qmgc-5h2g-mvrw, GHSA-w853-jp5j-5j7f
No fix: GHSA-58qw-9mgm-455v
2. [Maximum Coverage] Exposure: 0.04 Breakage: 0.50 Confidence: ~ MEDIUM
This path upgrades every package for which a fixed candidate exists, resolving the largest number of CVEs. It accepts higher breakage (notably pytest's major upgrade) to minimize exposure across the board. The pip CVE without a fix remains and should be mitigated by pinning, isolating pip usage, or applying runtime/workflow mitigations.
| ↑ | python-dotenv | 1.2.1 → 1.2.2 | (fixes GHSA-mf9w-mj56-hr94) |
| ↑ | flask | 3.1.2 → 3.1.3 | (fixes GHSA-68rp-wp8r-4726) |
| ↑ | requests | 2.32.5 → 2.33.0 | (fixes GHSA-gc5v-m9x4-r6x2) |
| ↑ | urllib3 | 2.5.0 → 2.6.3 | (fixes GHSA-2xpw-w6gg-jr37, GHSA-38jv-5279-wg99, GHSA-gm62-xv2j-4w53) |
| ↑ | pip | 25.3 → 26.0 | (fixes GHSA-6vgw-5pg2-w6jp) |
| ↑ | black | 25.9.0 → 26.3.1 | (fixes GHSA-3936-cmfr-pm3m) |
| ↑ | Werkzeug | 3.1.3 → 3.1.8 | (fixes GHSA-29vq-49wr-vm6x, GHSA-87hc-h4r5-73f7, GHSA-hgf8-39gv-g3f2) |
| ↑ | pytest | 8.4.2 → 9.0.3 | (fixes GHSA-6w46-j5rx-g56g) |
| ↑ | Pygments | 2.19.2 → 2.20.0 | (fixes GHSA-5239-wwwm-4pmq) |
| ↑ | filelock | 3.20.0 → 3.29.0 | (fixes GHSA-qmgc-5h2g-mvrw, GHSA-w853-jp5j-5j7f) |
| ↑ | virtualenv | 20.35.4 → 20.36.1 | (fixes GHSA-597g-3phw-6986) |
Resolves: GHSA-29vq-49wr-vm6x, GHSA-2xpw-w6gg-jr37, GHSA-38jv-5279-wg99, GHSA-3936-cmfr-pm3m, GHSA-5239-wwwm-4pmq, GHSA-597g-3phw-6986, GHSA-68rp-wp8r-4726, GHSA-6vgw-5pg2-w6jp, GHSA-6w46-j5rx-g56g, GHSA-87hc-h4r5-73f7, GHSA-gc5v-m9x4-r6x2, GHSA-gm62-xv2j-4w53, GHSA-hgf8-39gv-g3f2, GHSA-mf9w-mj56-hr94, GHSA-qmgc-5h2g-mvrw, GHSA-w853-jp5j-5j7f
No fix: GHSA-58qw-9mgm-455v
3. [Balanced] Exposure: 0.24 Breakage: 0.15 Confidence: ~ MEDIUM
This plan targets high-severity issues and low-risk patch/minor upgrades to reduce exposure while keeping probable breakage moderate. It avoids higher-risk major upgrades (e.g., pytest) but includes low-impact fixes (black, requests, python-dotenv, urllib3) to get good coverage for little disruption. The pip CVE without a fix remains; mitigate by limiting automated pip operations, pinning or isolating pip in CI/runtime.
| ↑ | urllib3 | 2.5.0 → 2.6.3 | (fixes GHSA-2xpw-w6gg-jr37, GHSA-38jv-5279-wg99, GHSA-gm62-xv2j-4w53) |
| ↑ | black | 25.9.0 → 26.3.1 | (fixes GHSA-3936-cmfr-pm3m) |
| ↑ | requests | 2.32.5 → 2.33.0 | (fixes GHSA-gc5v-m9x4-r6x2) |
| ↑ | python-dotenv | 1.2.1 → 1.2.2 | (fixes GHSA-mf9w-mj56-hr94) |
| ↑ | Werkzeug | 3.1.3 → 3.1.4 | (fixes GHSA-hgf8-39gv-g3f2) |
| ↑ | filelock | 3.20.0 → 3.20.1 | (fixes GHSA-w853-jp5j-5j7f) |
Resolves: GHSA-2xpw-w6gg-jr37, GHSA-38jv-5279-wg99, GHSA-3936-cmfr-pm3m, GHSA-gc5v-m9x4-r6x2, GHSA-gm62-xv2j-4w53, GHSA-hgf8-39gv-g3f2, GHSA-mf9w-mj56-hr94, GHSA-w853-jp5j-5j7f
Open: GHSA-29vq-49wr-vm6x, GHSA-5239-wwwm-4pmq, GHSA-597g-3phw-6986, GHSA-68rp-wp8r-4726, GHSA-6vgw-5pg2-w6jp, GHSA-6w46-j5rx-g56g, GHSA-87hc-h4r5-73f7, GHSA-qmgc-5h2g-mvrw
No fix: GHSA-58qw-9mgm-455v
=== No Fix Available ===
⚠ GHSA-58qw-9mgm-455v (MEDIUM) in pip — no fix version known. Consider replacing, pinning below the affected range, or accepting the risk.