ZAC: Missing per-zaaktype authorization on by-ID decision and process reads
Affects ZAC (dimpact-zaakafhandelcomponent) up to and including 5.1.0 for authenticated users with at least one application role. Fixed in 5.2.0.
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- How many real-world setups can hit the bug, from the vendor's advisory and CISA data. It does not know your setup.What do these mean? →
- Specific setups only
- Fix
- Fixed in 5.2.0
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
ZAC, an open-source case management component used by Dutch municipalities, is affected by a missing authorization check on several by-ID read endpoints. An authenticated user with low privileges who knows a case or decision identifier could view decisions, their audit history, workflow diagrams, and mailbox configuration for case types they are not permitted to access.
Summarized by anthropic/claude-haiku-5.5. Verify details against the original sources.
Read the original description
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.
Timeline
- CVE published
- First seen by cve.now
Affected versions
- infonl dimpact-zaakafhandelcomponent
fixed in 5.2.0
References 6
GitHub · infonl/dimpact-zaakafhandelcomponent
Questions about CVE-2026-55551
What does this mean?
An authenticated low-privileged municipal user can read decision and process data for case types they are not authorized for, provided they know the case or decision UUID. The data includes decision types, dates, free-text notes, audit history and workflow state.Source: github.com
Am I affected, and how do I check?
Versions of ZAC up to and including 5.1.0 are affected. The platform check only requires at least one application role on any zaaktype, not on the target case's zaaktype. Check the installed ZAC version against that range.Source: github.com
What should I do about it?
Upgrade to ZAC 5.2.0 or later, which contains the fix. The facts list no workaround, so upgrading is the stated remedy.Source: github.com
Is it being exploited?
It is not in CISA's Known Exploited Vulnerabilities catalog, and CISA's SSVC assessment does not mark exploitation as active. That does not mean it has not been attacked: vendors and researchers can report attacks before CISA lists them. No public exploit code is tracked.Source: cve.now feed data