CVE-2026-34064
Full vulnerability record from the local CVENow database.
Description
nimiq-account contains account primitives to be used in Nimiq's Rust implementation. Prior to version 1.3.0, `VestingContract::can_change_balance` returns `AccountError::InsufficientFunds` when `new_balance < min_cap`, but it constructs the error using `balance: self.balance - min_cap`. `Coin::sub` panics on underflow, so if an attacker can reach a state where `min_cap > balance`, the node crashes while trying to return an error. The `min_cap > balance` precondition is attacker-reachable because the vesting contract creation data (32-byte format) allows encoding `total_amount` without validating `total_amount <= transaction.value` (the real contract balance). After creating such a vesting contract, the attacker can broadcast an outgoing transaction to trigger the panic during mempool admission and block processing. The patch for this vulnerability is included as part of v1.3.0. No known workarounds are available.
View original CVE JSON
{
"id": "CVE-2026-34064",
"sourceIdentifier": "[email protected]",
"published": "2026-04-22T20:16:40.900",
"lastModified": "2026-10-26T21:10:00.170",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "nimiq-account contains account primitives to be used in Nimiq's Rust implementation. Prior to version 1.3.0, `VestingContract::can_change_balance` returns `AccountError::InsufficientFunds` when `new_balance < min_cap`, but it constructs the error using `balance: self.balance - min_cap`. `Coin::sub` panics on underflow, so if an attacker can reach a state where `min_cap > balance`, the node crashes while trying to return an error. The `min_cap > balance` precondition is attacker-reachable because the vesting contract creation data (32-byte format) allows encoding `total_amount` without validating `total_amount <= transaction.value` (the real contract balance). After creating such a vesting contract, the attacker can broadcast an outgoing transaction to trigger the panic during mempool admission and block processing. The patch for this vulnerability is included as part of v1.3.0. No known workarounds are available."
},
{
"lang": "es",
"value": "nimiq-account contiene primitivas de cuenta para ser utilizadas en la implementación de Nimiq en Rust. Antes de la versión 1.3.0, “VestingContract::can_change_balance” devuelve “AccountError::InsufficientFunds” cuando “new_balance < min_cap”, pero construye el error usando “balance: self.balance - min_cap”. “Coin::sub” entra en pánico por desbordamiento negativo, así que si un atacante puede alcanzar un estado donde “min_cap > balance”, el nodo falla mientras intenta devolver un error. La precondición “min_cap > balance” es alcanzable por el atacante porque los datos de creación del contrato de vesting (formato de 32 bytes) permiten codificar “total_amount” sin validar “total_amount <= transaction.value” (el saldo real del contrato). Después de crear dicho contrato de vesting, el atacante puede difundir una transacción saliente para desencadenar el pánico durante la admisión en el mempool y el procesamiento de bloques. El parche para esta vulnerabilidad está incluido como parte de la v1.3.0. No se conocen soluciones alternativas disponibles."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "nimiq",
"product": "nimiq-account",
"versions": [
{
"version": "< 1.3.0",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "LOW",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 3.9,
"impactScore": 1.4
},
{
"source": "[email protected]",
"type": "Primary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H",
"baseScore": 8.2,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "LOW",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 3.9,
"impactScore": 4.2
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-04-23T13:06:41.242710Z",
"id": "CVE-2026-34064",
"options": [
{
"exploitation": "none"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-191"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:nimiq:nimiq_proof-of-stake:*:*:*:*:*:rust:*:*",
"versionEndExcluding": "1.3.0",
"matchCriteriaId": "CD0CAAD1-7626-4A4A-A6F8-9DC46FE50731"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/nimiq/core-rs-albatross/commit/4d01946f0b3d6c6e31786f91cdfb3eb902908da0",
"source": "[email protected]",
"tags": [
"Patch"
]
},
{
"url": "https://github.com/nimiq/core-rs-albatross/pull/3658",
"source": "[email protected]",
"tags": [
"Issue Tracking",
"Patch"
]
},
{
"url": "https://github.com/nimiq/core-rs-albatross/releases/tag/v1.3.0",
"source": "[email protected]",
"tags": [
"Release Notes"
]
},
{
"url": "https://github.com/nimiq/core-rs-albatross/security/advisories/GHSA-vc34-39q2-m6q3",
"source": "[email protected]",
"tags": [
"Patch",
"Vendor Advisory"
]
}
]
}