Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged municipal ZAC user
-
ExploitObtain target case or besluit UUID
-
ExecutionCall by-id besluit/process read endpoint lacking assertPolicy
-
ImpactRead unauthorized cross-zaaktype decision, audit, and workflow data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization verification
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires (1) an authenticated ZAC account holding at least one application role on at least one zaaktype - i.e. any low-privileged municipal user, since RequestAuthorizationFilter/hasAnyApplicationRole does not check the target case's zaaktype - and (2) knowledge of a valid target zaak or besluit UUID, because the affected endpoints load strictly by id. Exploitation is limited to the by-id read cluster listBesluitenForZaakUUID (GET /rest/zaken/besluit/zaakUuid/{uuid}), listBesluitHistorie (GET /rest/zaken/besluit/{uuid}/historie), downloadProcessDiagram (GET /rest/zaken/{uuid}/process-diagram), and listAfzendersVoorZaak (zaak/{uuid}/afzender) on versions <= 5.1.0; the search/_zoek path is correctly authorization-filtered and is NOT affected. Limiting factors for defenders: valid credentials are mandatory, UUIDs are 128-bit and not readily guessable, impact is read-only confidentiality of decision/process/audit/mailbox metadata, and upgrading to 5.2.0 fully remediates. |
| Impact | This is a genuine but moderate-priority issue rather than a high-urgency emergency. The input CVSS is 6.5 with vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N - network-reachable, low attack complexity, but requiring an authenticated low-privileged account and yielding confidentiality impact only (no integrity or availability loss). The vuln.today decision label is 'this_month', consistent with a steady patch priority rather than act_now/emergency. No EPSS score and no CISA KEV status were provided in the input, so there is no signal of widespread or active exploitation - treat exploitation likelihood as unquantified, not zero. A public PoC reference exists (the GHSA advisory documents a locally reproduced verification test showing policyService is never called); it is not verified as working weaponized exploit code. The most important real-world qualifier, which the raw CVSS does not capture, is that exploitation requires the attacker to already hold a valid municipal ZAC account AND to know a specific non-guessable case/besluit UUID; this makes the practical confidentiality exposure narrower than the input's C:H implies, which is why my independent assessment lowers C to Low. Net: a real broken-authorization (IDOR) defect worth patching on the vendor's 'this_month' cadence, but gated by authentication and per-case UUID knowledge rather than being an unauthenticated internet-wide risk. |
| Exploit ScenarioDerived | An authenticated low-privileged municipal employee who legitimately works only certain case types (zaaktypen) obtains or guesses the UUID of a case outside their authorization scope and calls GET /rest/zaken/besluit/zaakUuid/{uuid}, /rest/zaken/besluit/{uuid}/historie, or /rest/zaken/{uuid}/process-diagram. Because these by-id read endpoints never invoke assertPolicy, the server returns decision details, free-text toelichting, audit old/new values, and BPMN workflow state for case types the user is not entitled to see. The GitHub advisory documents a reproduced verification test confirming the missing policy call, so a public PoC reference exists, though it is not distributed as turnkey exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
Dimpact ZAC prior to 5.2.0 exposes decision, audit-history, BPMN process-diagram, and afzender mailbox metadata for zaken outside a user's authorized zaaktypes to any authenticated low-privileged municipal user who knows a valid zaak or besluit UUID. The flaw is a cross-zaaktype IDOR (CWE-285/CWE-639) caused by missing assertPolicy checks on by-id read endpoints while the platform filter only requires an application role on any zaaktype; the advisory includes a local proof-of-concept reproduction (a public PoC reference exists; it is not verified as working exploit code). No CISA KEV active-exploitation confirmation is available, the impact is read-only confidentiality, and upgrading to 5.2.0 remediates; overall priority is moderate.
RemediationAI
Upgrade Dimpact ZAC to 5.2.0, the fixed release (https://github.com/infonl/dimpact-zaakafhandelcomponent/releases/tag/v5.2.0); the security advisory is https://github.com/infonl/dimpact-zaakafhandelcomponent/security/advisories/GHSA-cv9m-35q4-cxfm. The fix adds assertPolicy(policyService.readZaakRechten(zaak).lezen) to the affected by-id read handlers, supported by PRs #6225 and #6229 and commits 7b90586be658cec9fa5c98c0838636237f40931f and d050f247301a1bcfb867015725a693c540a06f5a. The advisory recommends a defence-in-depth filter-level check that the caller's zaaktypen include the target zaak's zaaktype; no configuration-only workaround is documented in the available data, so the complete remediation is the 5.2.0 upgrade, and any interim code-level control has the trade-off of requiring development and deployment effort.
Affected VersionsENISA
Affected Packages
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
ZAC is an open-source Common Ground case-management component for Dutch municipalities, implemented as a Kotlin REST service with an OPA/Rego policy layer. The affected CPE is cpe:2.3:a:infonl:dimpact-zaakafhandelcomponent:*:*:*:*:*:*:*:* for versions <=5.1.0. The root cause is CWE-285 improper authorization, manifesting as CWE-639 IDOR: RequestAuthorizationFilter and hasAnyApplicationRole only verify that the caller holds at least one application role on at least one zaaktype, while the target zaaktype boundary (zaaktype_allowed in zaak-rechten.rego) is enforced only when assertPolicy(policyService.readZaakRechten(zaak).lezen) is called. The by-id read handlers in ZaakRestService.kt-listBesluitenForZaakUUID, listBesluitHistorie, downloadProcessDiagram, and listAfzendersVoorZaak-omit that call, so data is returned for UUIDs outside the caller's authorized zaaktypes; search/_zoek is correctly authorization-filtered and is not part of this cluster. Exploitation requires valid credentials and knowledge of a 128-bit zaak or besluit UUID, which limits practical reach.
Know when Dimpact Zaakafhandelcomponent 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
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Authenticated low-privileged user over the network (PR:L, AV:N, AC:L); read-only exposure of a bounded set of per-case metadata gated by knowing a specific UUID justifies C:L, I:N, A:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
ZAC is an open-source, workflow-based Common Ground component for Dutch municipal case management. Prior to 5.2.0, by-id read endpoints in src/main/kotlin/nl/info/zac/app/zaak/ZaakRestService.kt omit assertPolicy(policyService.readZaakRechten(zaak).lezen) authorization. RequestAuthorizationFilter and hasAnyApplicationRole require only an application role on any zaaktype, not the target case's type, while zaak-rechten.rego enforces the actual zaaktype_allowed boundary only when invoked. An authenticated low-privileged municipal user who knows a case or decision UUID can use GET /rest/zaken/besluit/zaakUuid/{uuid} (listBesluitenForZaakUUID) to read decisions including types, dates, and free-text toelichting; GET /rest/zaken/besluit/{uuid}/historie (listBesluitHistorie) to read audit old/new values; and GET /rest/zaken/{uuid}/process-diagram (downloadProcessDiagram) to read BPMN workflow state across unauthorized zaaktypes. The advisory also identifies zaak/{uuid}/afzender (listAfzendersVoorZaak) as exposing zaaktype mailbox configuration without a policy check. The search/_zoek path is correctly authorization-filtered and is not part of this by-id read cluster. This issue is fixed in version 5.2.0.
Threat Intelligence Overview
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.
EUVD-2026-114196
NVD
CVE.org
EPSS
GitHub
Exploit-DB