Skip to main content

DigiDoc CVE-2026-103902

| EUVDEUVD-2026-97323 HIGH
Improper Verification of Cryptographic Signature (CWE-347)
2026-10-12 ENISA GHSA-jjqw-f3cg-gjjw
7.5
CVSS 3.1 · Vendor: ENISA
View

Attack ChainAIDerived

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

  1. Access
    Craft forged XAdES digital signature
  2. Exploit
    Deliver signed document to relying party
  3. Execution
    DigiDoc verifies signature without certificate binding
  4. Impact
    Forged signature displayed as valid

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
Exploitation Conditions

Exploitation requires an attacker to construct a document with a forged XAdES signature and have it validated by an affected, unpatched DigiDoc component - libdigidocpp 4.0.0-before 4.5.0, DigiDoc4 4.6.0-before 4.11.0, or DigiDoc Android/iOS 2.7.0-before 3.1.0 - where XMLDocument::verifySignature performs signature checking without binding to the signing certificate's public key. No authentication is required (PR:N) and no special non-default feature toggle is needed, since the defective verification path is the standard validation routine. The principal limiting factor is that the victim/relying party must use an affected version to validate the forged document; patched versions (which pass the X509 certificate into verification and reject a missing cert) display the forgery as invalid.

Impact

This is a CWE-347 improper cryptographic signature verification flaw scored CVSS 7.5 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N), a pure integrity impact (I:H, C:N, A:N) consistent with signature forgery rather than data theft. The source diff in vendor PR #735 confirms the root cause: XMLDocument::verifySignature() validated the XAdES signature without binding it to the signer's X509 certificate public key, so a signature could verify against an attacker-chosen key embedded in the document - the fix threads signingCertificate()/signingCert() into verification and rejects when no cert is present. No EPSS score, KEV listing, SSVC decision, or POC was provided, so exploitation status is 'no public exploit identified at time of analysis' and real-world exploitation is unproven. Despite the network vector and low complexity, practical risk is tempered because the payoff is forging legally-meaningful signatures on documents a relying party then validates with an affected version - high impact in the Estonian eID trust context, but not a mass-automatable internet-facing RCE. Treat as a high-priority patch for any workflow that legally relies on DigiDoc signature validation; de-prioritize relative to actively-exploited KEV items given the absence of exploitation signals.

Exploit ScenarioDerived

An attacker crafts a document bearing a forged XAdES digital signature whose embedded key does not belong to the claimed signer. Because affected DigiDoc software verifies the signature without binding it to the signer's trusted certificate, the victim's client (or a backend validation service using libdigidocpp) displays the forged signature as valid, enabling repudiation or fraud on contracts and official documents. No public exploit was identified, but the patch diff (PR #735) clearly reveals the exploitable missing certificate binding.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 12, 2026

Improper verification of cryptographic signatures across the DigiDoc suite lets an attacker craft a document carrying a forged XAdES signature that affected software displays as valid, undermining the integrity of electronically signed documents (CVSS 7.5, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - pure integrity impact with no confidentiality or availability effect). The defect is reachable by unauthenticated remote attackers (PR:N) with no user privilege or special configuration, but exploitation still requires a relying party to validate the forged file with an unpatched build: libdigidocpp before 4.5.0, DigiDoc4 before 4.11.0, or DigiDoc for Android/iOS before 3.1.0. Vendor fixes are available per the ENISA-referenced disclosure and upstream PR; no public exploit code has been identified at time of analysis, and no active exploitation is confirmed.

RemediationAI

Vendor-released patch: upgrade libdigidocpp to 4.5.0 or later (upstream fix in https://github.com/open-eid/libdigidocpp/pull/735, which extends XMLDocument::verifySignature to take an X509Cert, reject a missing certificate, and adopt the signer's public key into the xmlsec context), DigiDoc4 to 4.11.0 or later, and DigiDoc for Android and iOS to 3.1.0 or later; the vendor release announcement is at https://www.id.ee/en/article/id-tarkvara-uus-versioon-267-on-avalikustatud/. There is no configuration toggle that restores safe behavior, because the defective verification routine is the standard validation path rather than an optional feature, so upgrading the validating software is the only reliable fix. As a compensating control until upgrades complete, treat signature-validity status from affected DigiDoc builds as untrusted for integrity-critical decisions and re-verify suspect XAdES/BDoc containers with a patched libdigidocpp 4.5.0+ build or an independent XMLDSig validator that is explicitly pinned to a trusted signing certificate; the trade-off is operational friction and possible acceptance delays for legitimate signatures. Deployments that pin or mirror the vendor TSL should also refresh trust-list data alongside the upgrade, since TSL::validate() used the same defective verification path.

Affected VersionsENISA

DigiDoc4 4.6.0 <4.11.0
DigiDoc iOS 2.7.0 <3.1.0
DigiDoc Android 2.7.0 <3.1.0
libdigidocpp 4.0.0 <4.5.0

Affected Packages

euvd digidoc4 fix: 4.11.0
euvd digidoc_android fix: 3.1.0
euvd digidoc_ios fix: 3.1.0
euvd libdigidocpp fix: 4.5.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 4 packages in euvd

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

Technical ContextAI · show details

The root cause is CWE-347 (Improper Verification of Cryptographic Signature). libdigidocpp is the core C++ library behind Estonia's DigiDoc/BDoc digital-signature ecosystem, and the vulnerable code path lives in the XML/XAdES container handling implemented with xmlsec + OpenSSL. In the pre-fix code, XMLDocument::verifySignature(signature) performed XMLDSig/XAdES verification without being handed the signer's certificate, so the library effectively validated the signature against key material referenced inside the signed document itself rather than binding it to a trusted signing certificate - the classic XML signature wrapping / key-substitution weakness. Upstream PR 735 changes the API to verifySignature(signature, const X509Cert&), returns false outright when the certificate is absent, then derives the public key with X509_get_pubkey and adopts it into the xmlsec key context via xmlSecOpenSSLEvpKeyAdopt before verification. The same fix is applied to TSL::validate() (the ETSI trusted-list verification path in src/crypto/TSL.cpp), and the test fixture test/data/EE_T.xml was refreshed with a newer TSL sequence number and a TEST of SK ID Solutions EID-Q 2024E CA certificate, confirming the trust-list signature path is part of the affected surface. The CVE's automated tag set includes 'JWT Attack', but the actual patch diff concerns XMLDSig/XAdES and xmlsec key handling rather than JWT processing, so that tag should be treated as generic classifier noise rather than a description of the exploited mechanism.

Know when Libdigidocpp 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 (ENISA) PRIMARY 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
vuln.today AI 7.5 HIGH

Forged signatures validate remotely with no auth or special config (AV:N/AC:L/PR:N); impact is integrity-only (I:H), with no confidentiality or availability effect and no scope change.

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

Primary rating from Vendor (ENISA).

CVSS VectorVendor: ENISA

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
None

DescriptionCVE.org

Improper verification of cryptographic signature vulnerability in DigiDoc libdigidocpp, DigiDoc DigiDoc4, DigiDoc DigiDoc Android, and DigiDoc DigiDoc iOS. The vulnerability allows an attacker to create forged digital signatures that are displayed a valid by affected DigiDoc software.This issue affects libdigidocpp: from 4.0.0 before 4.5.0; DigiDoc4: from 4.6.0 before 4.11.0; DigiDoc Android: from 2.7.0 before 3.1.0; DigiDoc iOS: from 2.7.0 before 3.1.0.

Executive ViewAI

Why It Matters

A signature-verification flaw in the DigiDoc suite allows forged XAdES-signed documents to appear valid on unpatched builds of libdigidocpp, DigiDoc4, and DigiDoc mobile apps, directly undermining the integrity of electronic signatures that organizations and citizens rely on. Because the issue is remotely reachable by unauthenticated attackers and only requires a relying party to validate a malicious file, it creates trust, legal, and compliance risks for any workflow using these tools. Leadership should prioritize patching because the vulnerability affects the assurance of signed records, not just application stability.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Low
national eID signature software for Estonia, globally niche footprint
Data Quality
5 sources
Confidence: Medium

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 HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
High

Priority Score

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

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