---
id: "CVE-2026-55551"
kind: "vulnerability"
aliases: ["CVE-2026-55551"]
title: "ZAC: case read endpoints skip authorization checks, exposing other case types"
severity: "medium"
cvss: 6.5
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["case-management", "municipal", "package", "self-hosted", "zac"]
not_affected_if: ["single-zaaktype-deployment", "version-5.2.0-or-later"]
published_at: "2026-10-30T17:17:25+00:00"
first_seen_at: "2026-10-30T17:31:39+00:00"
updated_at: "2026-10-30T17:32:06+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-55551", "first_seen_at": "2026-10-30T17:31:39+00:00"}]
---

# ZAC: case read endpoints skip authorization checks, exposing other case types

ZAC is a workflow case management component used by Dutch municipalities. Several by-ID REST endpoints for cases and decisions omit the policy check, so an authenticated low-privileged user who knows a case UUID can read decisions, audit history, workflow diagrams and mailbox configuration for case types they should not access.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the ZAC version in use; the sources say versions before `5.2.0` are affected.
- Review whether users with only an application role can reach `/rest/zaken/besluit/zaakUuid/{uuid}`, `/rest/zaken/besluit/{uuid}/historie`, `/rest/zaken/{uuid}/process-diagram` and `/rest/zaken/{uuid}/afzender`.

## Fix

- Upgrade ZAC to `5.2.0` or later, as stated by the sources.

## Timeline

- 2026-10-30T17:31:39+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-55551

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
