{"id":"GHSA-85gx-3qv6-4463","revision":null,"records":[{"revision":"89e177a6773345278678c6c98fdc09c2","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-41491","aliases":[],"title":"Dapr: Service Invocation path traversal ACL bypass","description":"Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge. From versions 1.3.0 to before 1.15.14, 1.16.0-rc.1 to before 1.16.14, and 1.17.0-rc.1 to before 1.17.5, a vulnerability has been found in Dapr that allows bypassing access control policies for service invocation using reserved URL characters and path traversal sequences in method paths. The ACL normalized the method path independently from the dispatch layer, so the ACL evaluated one path while the target application received a different one. This issue has been patched in versions 1.15.14, 1.16.14, and 1.17.5.","state":0,"publishedAt":"2026-05-08T13:11:13.128+00:00","modifiedAt":"2026-05-08T13:58:57.832+00:00","affected":[{"ecosystem":"Vendor product","name":"dapr","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"dapr\",\n                    \"product\": \"dapr\",\n                    \"versions\": [\n                        {\n                            \"version\": \">= 1.3.0, < 1.15.14\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 1.16.0-rc.1, < 1.16.14\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 1.17.0-rc.1, < 1.17.5\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","score":8.1,"severity":"HIGH"}],"references":["https://github.com/dapr/dapr/security/advisories/GHSA-85gx-3qv6-4463","https://github.com/dapr/dapr/pull/9589"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-41491","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-41491","identifiers":["CVE-2026-41491"]},"retained":false,"historicalAffected":[]},{"revision":"c63cb67da12544f68d673dbe109e8feb","observedAt":"2026-11-13T12:00:59.231+00:00","statement":{"source":"euvd","id":"EUVD-2026-28553","aliases":["CVE-2026-41491"],"title":"Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge. From versions 1.3.0 to before 1.15.14, 1.16.0-rc.1 to before 1.16.14, and 1.17.0-rc.1 to before 1.17.5, a vulnerability has been found in…","description":"Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge. From versions 1.3.0 to before 1.15.14, 1.16.0-rc.1 to before 1.16.14, and 1.17.0-rc.1 to before 1.17.5, a vulnerability has been found in Dapr that allows bypassing access control policies for service invocation using reserved URL characters and path traversal sequences in method paths. The ACL normalized the method path independently from the dispatch layer, so the ACL evaluated one path while the target application received a different one. This issue has been patched in versions 1.15.14, 1.16.14, and 1.17.5.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","score":8.1,"severity":null}],"references":["https://github.com/dapr/dapr/security/advisories/GHSA-85gx-3qv6-4463","https://github.com/dapr/dapr/pull/9589"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-28553","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"May 8, 2026, 1:11:13 PM","dateUpdated":"May 8, 2026, 1:58:57 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-28553","identifiers":["EUVD-2026-28553","CVE-2026-41491"]},"retained":false,"historicalAffected":[]},{"revision":"aac51c7f15e44c79885b1fb00c0ae72c","observedAt":"2026-11-12T15:19:01.832+00:00","statement":{"source":"nvd","id":"CVE-2026-41491","aliases":[],"title":"Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge. From versions 1.3.0 to before 1.15.14, 1.16.0-rc.1 to before 1.16.14, and 1.17.0-rc.1 to before 1.17.5, a vulnerability has been found in…","description":"Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge. From versions 1.3.0 to before 1.15.14, 1.16.0-rc.1 to before 1.16.14, and 1.17.0-rc.1 to before 1.17.5, a vulnerability has been found in Dapr that allows bypassing access control policies for service invocation using reserved URL characters and path traversal sequences in method paths. The ACL normalized the method path independently from the dispatch layer, so the ACL evaluated one path while the target application received a different one. This issue has been patched in versions 1.15.14, 1.16.14, and 1.17.5.","state":0,"publishedAt":"2026-05-08T14:16:33.407+00:00","modifiedAt":"2026-11-11T20:10:00.273+00:00","affected":[],"metrics":[{"system":"CVSS 3.1 · security-advisories@github.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","score":8.1,"severity":"HIGH"}],"references":["https://github.com/dapr/dapr/pull/9589","https://github.com/dapr/dapr/security/advisories/GHSA-85gx-3qv6-4463"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-41491","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Analyzed","weaknesses":["CWE-22","CWE-284","NVD-CWE-noinfo"],"productCriteria":["cpe:2.3:a:linuxfoundation:dapr:*:*:*:*:*:*:*:*"],"sourceDates":{"published":"2026-05-08T14:16:33.407","lastModified":"2026-11-11T20:10:00.273"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-41491","identifiers":["CVE-2026-41491"]},"retained":false,"historicalAffected":[]},{"revision":"6ac3e179313a4263a667a1614e2c8dce","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-85gx-3qv6-4463","aliases":["CVE-2026-41491","GO-2026-5242"],"title":"Dapr: Service Invocation path traversal ACL bypass","description":"### Summary\n\nA vulnerability has been found in Dapr that allows bypassing access control policies for service invocation using reserved URL characters and path traversal sequences in method paths. The ACL normalized the method path independently from the dispatch layer, so the ACL evaluated one path while the target application received a different one.\n\nUsers who have configured access control policies for service invocation are strongly encouraged to upgrade Dapr to the respective patch version `1.17.5`, `1.16.14`, and `1.15.14`.\n\n### Impact\n\nThis vulnerability impacts Dapr users who have configured access control policies for service invocation. An attacker who can reach the Dapr HTTP or gRPC API could:\n\n- Use encoded path traversal (ex: `admin%2F..%2Fpublic`) to reach an allowed path while the method started from a denied prefix.\n- Use encoded fragment (`%23`) or query (`%3F`) characters to cause the ACL to evaluate a different path than what was delivered to the target application.\n\n### Patches\n\nUsers should upgrade immediately to their respective Dapr version `1.17.5`, `1.16.14`, and `1.15.14`.\n\n### Details\n\nDapr supports access control policies for service invocation, which allow operators to restrict which methods an application is permitted to call on a target app. When a request arrives, Dapr evaluates the method path against the configured policy before dispatching to the target.\n\nPrior to this fix, the ACL and the dispatch layer normalized the method path independently. The ACL used `purell.NormalizeURLString`, which decoded `%XX` sequences, resolved `../`, and stripped `#` and `?` as URL delimiters. The dispatch layer used the raw method string. This mismatch meant the ACL authorized one path while the target application received a different one.\n\nFor example, a method of `admin%2F..%2Fpublic` was normalized by the ACL to public (allowed), but the target application received `admin/../public`. \n\nThe gRPC API was the more dangerous vector because gRPC passes method strings raw — `#`, `?`, `../`, and control characters were all delivered literally with no client-side sanitization.\n\n### References\n\n[This PR](https://github.com/dapr/dapr/pull/9589) signaled to us about the CVE, special thanks to @dbconfession78 for the efforts here and the original PR.","state":0,"publishedAt":"2026-04-17T22:20:40+00:00","modifiedAt":"2026-09-10T03:51:01.0430822+00:00","affected":[{"ecosystem":"Go","name":"github.com/dapr/dapr","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"1.17.0-rc.1"},{"kind":"fixed","version":"1.17.5"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/dapr/dapr","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"1.16.0-rc.1"},{"kind":"fixed","version":"1.16.14"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/dapr/dapr","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"1.3.0"},{"kind":"fixed","version":"1.15.14"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/dapr/dapr/security/advisories/GHSA-85gx-3qv6-4463","https://nvd.nist.gov/vuln/detail/CVE-2026-41491","https://github.com/dapr/dapr/pull/9589","https://github.com/dapr/dapr"],"sourceUrl":"https://github.com/advisories/GHSA-85gx-3qv6-4463","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-85gx-3qv6-4463","identifiers":["GHSA-85gx-3qv6-4463","CVE-2026-41491","GO-2026-5242"]},"retained":false,"historicalAffected":[]},{"revision":"8b9c1d1a1d9e4c0e85a0bec2f0f991e3","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GO-2026-5242","aliases":["CVE-2026-41491","GHSA-85gx-3qv6-4463"],"title":"Dapr: Service Invocation path traversal ACL bypass in github.com/dapr/dapr","description":"Dapr: Service Invocation path traversal ACL bypass in github.com/dapr/dapr","state":0,"publishedAt":"2026-06-25T18:43:15+00:00","modifiedAt":"2026-06-25T19:45:21.1336292+00:00","affected":[{"ecosystem":"Go","name":"github.com/dapr/dapr","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"1.3.0"},{"kind":"fixed","version":"1.15.14"},{"kind":"introduced","version":"1.16.0-rc.1"},{"kind":"fixed","version":"1.16.14"},{"kind":"introduced","version":"1.17.0-rc.1"},{"kind":"fixed","version":"1.17.5"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://github.com/dapr/dapr/security/advisories/GHSA-85gx-3qv6-4463","https://nvd.nist.gov/vuln/detail/CVE-2026-41491","https://github.com/dapr/dapr/pull/9589"],"sourceUrl":"https://osv.dev/vulnerability/GO-2026-5242","license":"OSV · upstream source license applies","key":"osv:GO-2026-5242","identifiers":["GO-2026-5242","CVE-2026-41491","GHSA-85gx-3qv6-4463"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-15T07:30:54.3562129+00:00","complete":true,"records":1781,"lastAttemptAt":"2026-11-15T07:30:54.3562129+00:00","lastSuccessAt":"2026-11-15T07:30:54.5204338+00:00","error":null,"lastVerifiedAt":"2026-11-15T07:30:54.5204347+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-7de4d7559a5263003f03d9f70577ab06f92ba4178309f26fce53e22a4a959294-576973bd2a8c36ed3d013750ca82fcede7b10fe95f071dbe9a6a4dd94759ab84","complete":true,"records":425782,"lastAttemptAt":"2026-11-15T07:30:53.2515651+00:00","lastSuccessAt":"2026-11-15T07:30:53.2350398+00:00","error":null,"lastVerifiedAt":"2026-11-15T07:30:53.2515651+00:00","snapshotPublishedAt":"2026-11-15T07:28:26+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-51c4fdbdf1b54dc7b4fe83e6e1ed4b96","complete":false,"records":13821,"lastAttemptAt":"2026-11-15T07:46:53.2479496+00:00","lastSuccessAt":"2026-11-15T07:46:53.241+00:00","error":"82 identifier lookups failed; latest failures include AccessDenied (HTTP 403). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-15T07:46:53.241+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13488,"expectedIdentifiers":13874,"failedIdentifiers":82},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-15T07:30:54.3562129+00:00","complete":true,"records":1125,"lastAttemptAt":"2026-11-15T07:30:54.3562129+00:00","lastSuccessAt":"2026-11-15T07:30:54.5213705+00:00","error":null,"lastVerifiedAt":"2026-11-15T07:30:54.5213739+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-35abf047bdfe46089a52c4c139c37942","complete":false,"records":13833,"lastAttemptAt":"2026-11-15T07:31:01.665293+00:00","lastSuccessAt":"2026-11-15T05:33:23.837+00:00","error":"12 identifier lookups failed; latest failures include HttpError (HTTP 503). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-15T05:33:23.837+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13862,"expectedIdentifiers":13874,"failedIdentifiers":12},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-64eea06dbd27de8464d5dbce1b78cc794cc59e2d901516ae0d3ea76e624cdae0","complete":true,"records":9955,"lastAttemptAt":"2026-11-15T07:30:53.9403022+00:00","lastSuccessAt":"2026-11-14T13:57:23.1208135+00:00","error":null,"lastVerifiedAt":"2026-11-15T07:30:53.9403022+00:00","snapshotPublishedAt":"2026-11-14T13:17:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-f4424d7d4861b1af1404bd15abcb83f295dcd003412a9340ca99dc8200aa148a","complete":true,"records":2014,"lastAttemptAt":"2026-11-15T07:30:53.3921516+00:00","lastSuccessAt":"2026-11-13T19:57:08.2864435+00:00","error":null,"lastVerifiedAt":"2026-11-15T07:30:53.3921516+00:00","snapshotPublishedAt":"2026-11-13T19:33:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-012aff9b2fb349d53e2c4bace6ca57956b6f5f9d82c1dc9fdc1c9b3c738f8977","complete":true,"records":3148,"lastAttemptAt":"2026-11-15T07:30:54.2664324+00:00","lastSuccessAt":"2026-11-14T04:57:03.8279646+00:00","error":null,"lastVerifiedAt":"2026-11-15T07:30:54.2664324+00:00","snapshotPublishedAt":"2026-11-14T03:02:50+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-878f718ccd076f540460423958c8e379b139b997b45858275573ecc4d702fe9a","complete":true,"records":232474,"lastAttemptAt":"2026-11-15T07:30:53.7776854+00:00","lastSuccessAt":"2026-11-15T05:33:06.8241102+00:00","error":null,"lastVerifiedAt":"2026-11-15T07:30:53.7776854+00:00","snapshotPublishedAt":"2026-11-15T04:33:08+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}