Skip to main content

snark-verifier CVE-2026-61618

| EUVDEUVD-2026-114397 MEDIUM
Improper Input Validation (CWE-20)
2026-10-30 security-advisories@github.com
6.9
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach verifier public-input boundary
  2. Delivery
    Submit non-canonical accumulator limbs
  3. Exploit
    Limbs decoded without canonical bound check
  4. Execution
    Native path hits assert/unwrap panic
  5. Impact
    Verifier crashes (denial of service)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

Exploitation requires the ability to supply accumulator public-instance values (the scalars selected by accumulator_indices and passed to AccumulatorEncoding::from_repr) to a KZG-based SNARK verifier built from snark-verifier prior to 0.2.5. The concrete prerequisite is a deployment where accumulator limbs are NOT already constrained in-circuit before the verifier boundary: the vendor states that standard SDK aggregation circuits constrain these limbs beforehand, which is the primary limiting factor on real-world exploitability. The crash/DoS specifically affects the native verifier path (snark-verifier/src/pcs/kzg/accumulator.rs) via assertion/unwrap-based decoding; the EVM loader path (ec_point_from_limbs) instead accepted non-canonical encodings because validate_ec_point checked the reconstructed affine point rather than the original limb bounds. No authentication or user interaction is indicated by the vector (PR:N/UI:N).

Impact

This is a moderate, defense-in-depth hardening fix rather than a high-urgency emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) scores 6.9 and indicates a vulnerable system impact only to integrity (VI:L), with no confidentiality or availability metric set, yet the tags and the advisory itself describe a denial-of-service crash on the native verifier path - so the input signals are internally inconsistent about whether the primary impact is integrity (accepting non-canonical encodings) or availability (a panic/crash). No EPSS score, no CISA KEV listing, and no working PoC are present in the input; the only references are the fix commit, the v0.2.5 release, and the GHSA advisory. The vuln.today decision label is 'this_month' (not act_now/emergency), which is consistent with the vendor's own statement that standard SDK aggregation circuits constrain accumulator limbs before the verifier boundary, materially limiting practical exploitability. Net: treat as a scheduled-patch item, not a drop-everything priority - the network/unauthenticated reachability is real, but the real-world impact is bounded to deployments that feed unconstrained accumulator public inputs into the native verifier.

Exploit ScenarioDerived

An attacker who can supply the public-instance values to a KZG-based SNARK verifier crafts accumulator limbs that exceed the configured canonical limb bound. On the native verifier path these malformed limbs reach assertion/unwrap-based decoding and panic, crashing the verifier instead of returning a clean verification error; on the EVM path non-canonical encodings pass limb checking before point validation. No public exploit code is identified in the input, and exploitation requires a deployment that does not already constrain accumulator limbs in-circuit before this boundary.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

The Rust snark-verifier library before 0.2.5 accepts non-canonical KZG accumulator limb encodings at the verifier boundary, and its native verifier path can be panicked by malformed accumulator public inputs rather than returning a verification error. Deployments are only exposed where accumulator limbs are not already constrained in-circuit before the verifier boundary: the vendor states standard SDK aggregation circuits do so, which is the primary limit on practical exploitability. No public exploit code and no confirmed active exploitation were identified at time of analysis; the issue is fixed in version 0.2.5.

RemediationAI

Upgrade to snark-verifier 0.2.5, the vendor-released fix, per https://github.com/axiom-crypto/snark-verifier/releases/tag/v0.2.5; the corresponding change is commit d6aaf66d4706f5317cf61d5dbe00c14e7fbdbb70 and the advisory is https://github.com/axiom-crypto/snark-verifier/security/advisories/GHSA-265x-v3qf-ff6p. After upgrading, regenerate any prebuilt EVM verifier code emitted by the loader so it includes the new per-limb bound checks, and rebuild native verifiers so malformed accumulator limbs return Error::InvalidInstances rather than panicking. If the upgrade cannot be applied immediately, the vendor's stated limiting factor can be turned into a control: ensure the aggregation circuit constrains every accumulator public-instance limb to the configured limb bound before the values reach AccumulatorEncoding::from_repr, which standard SDK aggregation circuits already do, so custom circuits that omit this constraint are the ones needing the added in-circuit range check (the trade-off is additional circuit constraints and proving cost). Where a native verifier processes untrusted public inputs and cannot be patched, run it in an isolated process with panic containment and restart supervision so that malformed inputs cause a contained verification failure rather than taking down the surrounding service; this does not correct the underlying accept/reject behaviour and adds operational overhead. No patch beyond 0.2.5 is required, and no further vendor workaround is documented.

Affected VersionsENISA

snark-verifier < 0.2.5

Affected Packages

euvd snark_verifier fix: 0.2.5

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

snark-verifier is a generic (S)NARK verifier implemented in Rust, with both a native path (snark-verifier/src/pcs/kzg/accumulator.rs) and an EVM code-generation path (snark-verifier/src/loader/evm/loader.rs). In a KZG-based proof system, the accumulator is an elliptic-curve point whose coordinates are supplied as public-instance scalars; PlonkProof::read selects those scalars via accumulator_indices and hands them to AccumulatorEncoding::from_repr, where LimbsEncoding::from_repr splits each coordinate into fixed-width limbs. The root cause is CWE-20 (Improper Input Validation): the EVM loader reconstructed each coordinate from limbs using shl and add and then applied validate_ec_point to the resulting affine point, so the check covered the reconstructed point but never the original limb bounds; limbs wider than the configured BITS therefore slipped through as non-canonical encodings. The native path had a related robustness defect in which malformed limb encodings reached assertion- and unwrap-based decoding and caused a panic instead of a verification error. The upstream fix in commit d6aaf66d adds a limb_bound_check_code helper that emits a per-limb lt(limb, shl(bound_bits, 1)) (or iszero for zero-width remainder) check into the generated verifier code before reconstruction, and replaces the native decode with fe_from_limbs_checked, which validates the limb count, rejects any limb >= 2^BITS, rejects a composed value >= the field modulus, and converts the former asserts and unwraps into Error::InvalidInstances returns.

Know when Canonical gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (github) PRIMARY 6.9 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 6.5 MEDIUM

Untrusted public inputs reach the verifier remotely with no auth or interaction (AV:N/AC:L/PR:N/UI:N); impact is limited to accepting non-canonical encodings (I:L) and a native-verifier panic (A:L), both bounded by in-circuit limb constraints.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Oct 30, 2026 - 21:18 EUVD

DescriptionCVE.org

SNARK Verifier is a generic (S)NARK verifier. Prior to 0.2.5, KZG accumulator public-instance limbs are decoded without consistently enforcing canonical limb bounds before elliptic-curve coordinate reconstruction. PlonkProof::read selects scalars using accumulator_indices and passes them to AccumulatorEncoding::from_repr. For the EVM loader, LimbsEncoding::from_repr forwards them to EvmLoader::ec_point_from_limbs in snark-verifier/src/loader/evm/loader.rs, where shl and add reconstruct coordinates before validate_ec_point checks the resulting affine point rather than the original limb bounds. The related native path in snark-verifier/src/pcs/kzg/accumulator.rs can reach assertion- or unwrap-based decoding and panic instead of returning a verification error. This allows noncanonical encodings at the verifier boundary and can crash the native verifier. Standard SDK aggregation circuits are expected to constrain accumulator limbs before this boundary, which limits practical exploitability. This issue is fixed in version 0.2.5.

Threat Intelligence Overview

EPSS Score
0.4%
Top 69% exploitable
Prevalence
Low
niche zk/cryptography Rust library (axiom-crypto snark-verifier), limited deployment footprint
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2014-6271 CRITICAL POC
9.8 Sep 24

GNU Bash through 4.3 processes trailing strings after function definitions in the values of environment variables, which

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2016-3714 HIGH POC
8.4 May 05

The (1) EPHEMERAL, (2) HTTPS, (3) MVG, (4) MSL, (5) TEXT, (6) SHOW, (7) WIN, and (8) PLT coders in ImageMagick before 6.

CVE-2017-12617 HIGH POC
8.1 Oct 04

When running Apache Tomcat versions 9.0.0.M1 to 9.0.0, 8.5.0 to 8.5.22, 8.0.0.RC1 to 8.0.46 and 7.0.0 to 7.0.81 with HTT

CVE-2016-8735 CRITICAL POC
9.8 Apr 06

Remote code execution is possible with Apache Tomcat before 6.0.48, 7.x before 7.0.73, 8.x before 8.0.39, 8.5.x before 8

CVE-2014-7169 CRITICAL POC
9.8 Sep 25

GNU Bash through 4.3 bash43-025 processes trailing strings after certain malformed function definitions in the values of

CVE-2014-0160 HIGH POC
7.5 Apr 07

The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packe

CVE-2016-5195 HIGH POC
7.0 Nov 10

Race condition in mm/gup.c in the Linux kernel 2.x through 4.x before 4.8.3 allows local users to gain privileges by lev

CVE-2013-2423 LOW POC
3.7 Apr 17

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 17 and earlier, and

CVE-2023-4911 HIGH POC
7.8 Oct 03

Local privilege escalation in the GNU C Library (glibc) dynamic loader ld.so allows unprivileged local users on affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy