CVE-2017-3204 is a high-severity (CVSS 8.1) CWE-310 vulnerability in golang.org/x/crypto. A fix is available for golang.org/x/crypto — see the affected versions and patch details below.
golang.org/x/crypto/ssh Man-in-the-Middle attack
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
golang.org/x/cryptoReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.
Description
The Go SSH library (golang.org/x/crypto/ssh) by default does not verify host keys, facilitating man-in-the-middle attacks if ClientConfig.HostKeyCallback is not set. Default behavior changed in commit e4e2799 to require explicitly registering a hostkey verification mechanism.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐹Go | golang.org/x/crypto | all versions | 0.0.0-20170330155735-e4e2799dd7aago get golang.org/x/crypto@v0.0.0-20170330155735-e4e2799dd7aa |
Affected Products
cryptogolangDetection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for golang.org/x/crypto, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update golang.org/x/crypto to 0.0.0-20170330155735-e4e2799dd7aa or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2017-3204 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.
Frequently Asked Questions
Is CVE-2017-3204 in your dependencies?
Find it across Go, including transitive dependencies.