# Dapr v1.17.19

> Orchestration & Management · 2026-10-31

A security-focused maintenance release fixes access-control, authentication, isolation, denial-of-service, and data-integrity issues. It also changes public metadata writes and limits gRPC metadata, which may affect applications using the public port, gRPC APIs, or the listed state and outbox features.

## Action needed
- **[security]** `id_prefix_match` scope for job target keys
  - The Scheduler now always terminates the key prefix for job targets with the delimiter, so `id_prefix_match` applies only to actor reminder IDs as documented by the API.
- **[security]** Sentry host value parsing
  - Sentry now parses the host value from `X-Forwarded-Host` or the `Host` header once. The change covers host validation used by `--oidc-allowed-hosts`, `--jwt-issuer`, and `--oidc-jwks-uri`.

## Check if affected
- **[security · medium]** `DAPR_API_TOKEN` validation for encoded health check paths
  - Applies if you use a percent-encoded health check path.
  - The API token middleware now compares the escaped path matched by the router, so a percent-encoded health check path requires the API token. This fixes GHSA-59m6-82qm-vqgj.
- **[security]** HTTP app service invocation access control
  - Applies if you run HTTP apps.
  - For HTTP apps, service invocation access control now matches policies against the routed method after decoding percent-encoded characters once and lowercasing it.
- **[security]** `WatchJobs` internal actor validation
  - Applies if you use `WatchJobs` with an internal actor type (`dapr.internal.*`) that does not belong to the calling app and namespace.
  - The Scheduler rejects a `WatchJobs` stream with `PermissionDenied` when it declares an internal actor type such as `dapr.internal.*` that does not belong to the calling app and namespace.
- **[security]** Internal-port gRPC proxy target restriction
  - Applies if you use the internal port.
  - On the internal port, the gRPC proxy serves only calls addressed to the local app and returns `PermissionDenied` for other targets.
- **[security]** Read-only `--dapr-public-port` endpoints
  - Applies if you configure `--dapr-public-port`.
  - The public port now serves only read-only `GET` endpoints: `GET /v1.0/metadata`, `GET /v1.0/healthz`, and `GET /v1.0/healthz/outbound`. `PUT /v1.0/metadata/{key}` remains available on the main API port.
- **[security]** `primaryEncryptionKey` suffix handling
  - Applies if you configure `primaryEncryptionKey`.
  - Decryption now handles values whose `primaryEncryptionKey`-related key does not end with the `||<key name>` suffix that Dapr appends on write.
- **[security]** Short ciphertext handling in `GetState` and `GetBulkState`
  - Applies if you use `GetState` or `GetBulkState`.
  - Decryption now handles ciphertext shorter than the nonce. Over the gRPC API, `GetState` and `GetBulkState` no longer cause a sidecar panic, while the HTTP request failure is handled.
- **[security]** Transactional outbox event publication
  - Applies if you use the transactional outbox.
  - The transactional outbox now prevents a message's own message from being published to the business topic as an outbox event of the target app.
- **[security]** gRPC metadata size limit
  - Applies if you use the gRPC API.
  - This breaking change limits gRPC calls to the Dapr API, including gRPC proxying, to metadata of 64 KiB or the value of `--read-buffer-size` when it is larger. Calls exceeding that limit now fail with gRPC `Internal`.

[Full analysis](https://ratatosk.io/en/releases/dapr/v1.17.19)

[Original release notes](https://github.com/dapr/dapr/releases/tag/v1.17.19)
