CVE-2026-40070
Full vulnerability record from the local CVENow database.
Description
BSV Ruby SDK is the Ruby SDK for the BSV blockchain. From 0.3.1 to before 0.8.2, BSV::Wallet::WalletClient#acquire_certificate persists certificate records to storage without verifying the certifier's signature over the certificate contents. In acquisition_protocol: 'direct', the caller supplies all certificate fields (including signature:) and the record is written to storage verbatim. In acquisition_protocol: 'issuance', the client POSTs to a certifier URL and writes whatever signature the response body contains, also without verification. An attacker who can reach either API (or who controls a certifier endpoint targeted by the issuance path) can forge identity certificates that subsequently appear authentic to list_certificates and prove_certificate.
View original CVE JSON
{
"id": "CVE-2026-40070",
"sourceIdentifier": "[email protected]",
"published": "2026-04-09T18:17:03.203",
"lastModified": "2026-10-26T21:10:00.170",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "BSV Ruby SDK is the Ruby SDK for the BSV blockchain. From 0.3.1 to before 0.8.2, BSV::Wallet::WalletClient#acquire_certificate persists certificate records to storage without verifying the certifier's signature over the certificate contents. In acquisition_protocol: 'direct', the caller supplies all certificate fields (including signature:) and the record is written to storage verbatim. In acquisition_protocol: 'issuance', the client POSTs to a certifier URL and writes whatever signature the response body contains, also without verification. An attacker who can reach either API (or who controls a certifier endpoint targeted by the issuance path) can forge identity certificates that subsequently appear authentic to list_certificates and prove_certificate."
},
{
"lang": "es",
"value": "BSV Ruby SDK es el SDK de Ruby para la cadena de bloques BSV. Desde la versión 0.3.1 hasta antes de la 0.8.2, BSV::Wallet::WalletClient#acquire_certificate persiste los registros de certificados en el almacenamiento sin verificar la firma del certificador sobre el contenido del certificado. En acquisition_protocol: ’direct’, el llamador proporciona todos los campos del certificado (incluyendo signature:) y el registro se escribe en el almacenamiento textualmente. En acquisition_protocol: ’issuance’, el cliente realiza una solicitud POST a una URL de certificador y escribe cualquier firma que contenga el cuerpo de la respuesta, también sin verificación. Un atacante que puede alcanzar cualquiera de las API (o que controla un endpoint de certificador dirigido por la ruta de emisión) puede falsificar certificados de identidad que posteriormente parecen auténticos para list_certificates y prove_certificate."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "sgbett",
"product": "bsv-ruby-sdk",
"versions": [
{
"version": ">= 0.3.1, < 0.8.2",
"status": "affected"
}
]
},
{
"vendor": "sgbett",
"product": "bsv-sdk",
"versions": [
{
"version": ">= 0.3.1, < 0.8.2",
"status": "affected"
}
]
},
{
"vendor": "sgbett",
"product": "bsv-wallet",
"versions": [
{
"version": ">= 0.1.2, < 0.3.4",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N",
"baseScore": 8.1,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "LOW",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 2.8,
"impactScore": 5.2
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-04-13T15:29:59.716749Z",
"id": "CVE-2026-40070",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-347"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:sgbett:bsv-wallet:*:*:*:*:*:ruby:*:*",
"versionStartIncluding": "0.1.2",
"versionEndExcluding": "0.3.4",
"matchCriteriaId": "64FDA9B4-4B7C-41B0-9736-991D19533DF6"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:a:sgbett:bsv_ruby_sdk:*:*:*:*:*:ruby:*:*",
"versionStartIncluding": "0.3.1",
"versionEndExcluding": "0.8.2",
"matchCriteriaId": "634CB7F0-563B-42FC-BCF4-3F222AA63921"
}
]
}
]
}
],
"references": [
{
"url": "https://brc.dev/52",
"source": "[email protected]",
"tags": [
"Not Applicable"
]
},
{
"url": "https://github.com/sgbett/bsv-ruby-sdk/commit/4992e8a265fd914a7eeb0405c69d1ff0122a84cc",
"source": "[email protected]",
"tags": [
"Release Notes"
]
},
{
"url": "https://github.com/sgbett/bsv-ruby-sdk/issues/305",
"source": "[email protected]",
"tags": [
"Issue Tracking"
]
},
{
"url": "https://github.com/sgbett/bsv-ruby-sdk/pull/306",
"source": "[email protected]",
"tags": [
"Issue Tracking"
]
},
{
"url": "https://github.com/sgbett/bsv-ruby-sdk/security/advisories/GHSA-hc36-c89j-5f4j",
"source": "[email protected]",
"tags": [
"Exploit",
"Patch",
"Vendor Advisory"
]
},
{
"url": "https://github.com/sgbett/bsv-ruby-sdk/security/advisories/GHSA-hc36-c89j-5f4j",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"tags": [
"Exploit",
"Patch",
"Vendor Advisory"
]
}
]
}