CVE-2024-45040 json
gnark's commitments to private witnesses in Groth16 as implemented break zero-knowledge property
published 2024-09-06 2 y ago modified 2026-06-17 4 mo ago also EUVD-2024-2765 , GHSA-9xcg-3q8v-7fq6 , GO-2024-3123
- cvss
- 5.9
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.4%
- EPSS 0.4% chance of exploitation in 30 days, percentile 37%
- public exploits
- 0
- none known
Summary
gnark is a fast zk-SNARK library that offers a high-level API to design circuits. Prior to version 0.11.0, commitments to private witnesses in Groth16 as implemented break the zero-knowledge property. The vulnerability affects only Groth16 proofs with commitments. Notably, PLONK proofs are not affected. The vulnerability affects the zero-knowledge property of the proofs - in case the witness (secret or internal) values are small, then the attacker may be able to enumerate all possible choices to deduce the actual value. If the possible choices for the variables to be committed is large or there are many values committed, then it would be computationally infeasible to enumerate all valid choices. It doesn't affect the completeness/soundness of the proofs. The vulnerability has been fixed in version 0.11.0. The patch to fix the issue is to add additional randomized value to the list of committed value at proving time to mask the rest of the values which were committed. As a workaround, the user can manually commit to a randomized value.
Patch / fix
- go github.com/consensys/gnark 0.11.0
- consensys gnark 0.11.0
- github.com/Consensys/gnark@afda68a commit
- github.com/Consensys/gnark#1245 pull request
CISA SSVC
- Exploitation
- Proof of concept is public
- Automatable
- no
- Technical impact
- partial
- Assessed
- 2 y ago
Exploit prediction
0.43% chance of exploitation in the next 30 days, higher than 37% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 5.9 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N |
| GitHub | 3.1 | 5.9 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N |
| NVD | 3.1 | 5.9 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| go | github.com/consensys/gnark | <0.11.0 |
0.11.0 |
Affected products
- Consensys gnark
Classification
- Weakness
-
- CWE-200 Exposure of Sensitive Information to an Unauthorized Actor
References
-
github.com
/Consensys/gnark/pull/1245
web, product, patch
-
github.com
/Consensys/gnark/commit/afda68a38acca37becb8ba6d8982d03fee9559a0
web, patch
-
github.com
/Consensys/gnark/security/advisories/GHSA-9xcg-3q8v-7fq6
web, third-party-advisory, advisory
-
nvd.nist.gov
/vuln/detail/CVE-2024-45040
advisory
-
github.com
/Consensys/gnark
package
-
pkg.go.dev
/vuln/GO-2024-3123
web
Sources
- CVE List CVE-2024-45040
- GitHub Advisory GHSA-9xcg-3q8v-7fq6
- NVD CVE-2024-45040
- OSV GO-2024-3123
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.