# CVE-2020-0601: Microsoft Windows CryptoAPI Spoofing

> Attackers can spoof code-signing certificates to make malicious executables appear trusted, bypassing Windows CryptoAPI validation.

- **Severity:** High 8.1 (`CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N`)
- **Exploited in the wild:** Yes, since 3 Nov 2021 (CISA KEV)
- **Login needed:** Not needed
- **Attackable:** Over the internet
- **Victim action needed:** A user has to click or open something
- **Fix available:** Yes
- **Published:** 14 Jan 2020
- **Updated:** 21 Oct 2025
- **Also known as:** BIT-golang-2020-0601, CLEANSTART-2025-WA86088, GHSA-82jc-cv6x-r223, GO-2022-0535

## What is CVE-2020-0601?

CVE-2020-0601 is a high-severity vulnerability in Golang Go, published on 14 Jan 2020. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.

### Official description

A spoofing vulnerability exists in the way Windows CryptoAPI (Crypt32.dll) validates Elliptic Curve Cryptography (ECC) certificates.An attacker could exploit the vulnerability by using a spoofed code-signing certificate to sign a malicious executable, making it appear the file was from a trusted, legitimate source, aka 'Windows CryptoAPI Spoofing Vulnerability'.

Weakness: CWE-295 (Improper Certificate Validation)

## Which versions are affected by CVE-2020-0601?

2 open source packages ship an affected version, including golang and stdlib. It affects 13 products.


| Package | Ecosystem | Affected | Fixed in |
| --- | --- | --- | --- |
| `golang` | Bitnami | From 1.12.0 | 1.12.16, 1.13.7 |
| `stdlib` | Go | All versions | 1.12.16, 1.13.7 |

Products: Golang Go, Microsoft Windows 10 1507, Microsoft Windows 10 1607, Microsoft Windows 10 1709, Microsoft Windows 10 1803, Microsoft Windows 10 1809, Microsoft Windows 10 1903, Microsoft Windows 10 1909, Microsoft Windows Server 1803, Microsoft Windows Server 1903, Microsoft Windows Server 1909, Microsoft Windows Server 2016, Microsoft Windows Server 2019.

## How do I fix CVE-2020-0601?

Upgrade golang to a fixed version for your release line: 1.12.16 or 1.13.7. US federal agencies must fix it by 3 May 2022.

## Is CVE-2020-0601 being exploited?

Yes. Attackers have exploited CVE-2020-0601 in the wild since at least 3 Nov 2021.

Public exploit code:

- PoC for CVE-2020-0601- Windows CryptoAPI (Crypt32.dll) (github_poc): https://github.com/ly4k/CurveBall
- A PoC for CVE-2020-0601 (github_poc): https://github.com/kudelskisecurity/chainoffools
- CVE-2020-0601 #curveball - Alternative Key Calculator (github_poc): https://github.com/gentilkiwi/curveball
- Proof of Concept for CVE-2020-0601 (github_poc): https://github.com/saleemrashid/badecparams
- Zeek package to detect CVE-2020-0601 (github_poc): https://github.com/0xxon/cve-2020-0601
- 这资源是作者复现微软签字证书漏洞CVE-2020-0601，结合相关资源及文章实现。推荐大家结合作者博客，理解ECC算法、Windows验证机制，并尝试自己复现可执行文件签名证书和HTTPS劫持的例子。作为网络安全初学者，自己确实很菜，但希望坚持下去，加油！ (github_poc): https://github.com/eastmountyxz/CVE-2020-0601-EXP

## Other vulnerabilities in Golang Go

- [CVE-2026-27143](https://insights.sbomify.com/CVE-2026-27143/): Missing bound checks can lead to memory corruption in safe Go in cmd/compile (critical 9.8)
- [CVE-2024-24790](https://insights.sbomify.com/CVE-2024-24790/): Unexpected behavior from Is methods for IPv4-mapped IPv6 addresses in net/netip (critical 9.8)
- [CVE-2023-39320](https://insights.sbomify.com/CVE-2023-39320/): Arbitrary code execution via go.mod toolchain directive in cmd/go (critical 9.8)
- [CVE-2023-24540](https://insights.sbomify.com/CVE-2023-24540/): Improper handling of JavaScript whitespace in html/template (critical 9.8)
- [CVE-2023-24538](https://insights.sbomify.com/CVE-2023-24538/): Backticks not treated as string delimiters in html/template (critical 9.8)

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2020-0601 and fix it if it is affected.

What it is: CVE-2020-0601 is a high-severity vulnerability in Golang Go, published on 14 Jan 2020. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.
Exploitation: Yes. Attackers have exploited CVE-2020-0601 in the wild since at least 3 Nov 2021.

Affected packages and fixed versions:
- golang (Bitnami): affected from 1.12.0; fixed in 1.12.16, 1.13.7
- stdlib (Go): affected all versions; fixed in 1.12.16, 1.13.7

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2020-0601/ (Markdown: https://insights.sbomify.com/CVE-2020-0601/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2020-0601
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2020-0601
- OSV: https://osv.dev/vulnerability/CVE-2020-0601

---
From sbomify Insights: https://insights.sbomify.com/CVE-2020-0601/
Summaries are generated and may contain mistakes; the official description above is the record.
