{"id":"CVE-2026-59867","revision":null,"records":[{"revision":"fb3d5659d2fd4cc39b12772f2c96d263","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-59867","aliases":[],"title":"Kiota: Generation-time SSRF + remote/local file inclusion via unrestricted $ref","description":"Kiota is an OpenAPI based HTTP Client code generator. Prior to 1.29.1 and 1.32.5, Kiota resolved OpenAPI $ref values by fetching remote http(s) URLs and reading local absolute or out-of-tree file paths, allowing `kiota generate` on an attacker-controlled or attacker-influenced description to perform build-time SSRF, remote file inclusion, and local file inclusion by inlining external schemas such as REMOTE_KIOTA_PROP or Leaked into generated clients. This issue is fixed in version 1.29.1 and 1.32.5 by AllowedExternalOriginsStreamLoader and the --allowed-external-origins option.","state":0,"publishedAt":"2026-07-16T14:48:11.958+00:00","modifiedAt":"2026-08-17T15:03:35.538+00:00","affected":[{"ecosystem":"Vendor product","name":"kiota","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"microsoft\",\n                    \"product\": \"kiota\",\n                    \"versions\": [\n                        {\n                            \"version\": \">= 1.30.0, < 1.31.1\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \"< 1.29.1\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N","score":7.1,"severity":"HIGH"}],"references":["https://github.com/microsoft/kiota/security/advisories/GHSA-rg4h-fpcp-2qm8","https://github.com/microsoft/kiota/pull/7888","https://github.com/microsoft/kiota/commit/cccd798027f0a20db796b3df6c64f9897a39d7b1","https://github.com/microsoft/kiota/releases/tag/v1.32.5"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-59867","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-59867","identifiers":["CVE-2026-59867"]},"retained":false,"historicalAffected":[]},{"revision":"cacca6b5bb434e549ccb2f72e572eae7","observedAt":"2026-10-25T14:19:22.811+00:00","statement":{"source":"nvd","id":"CVE-2026-59867","aliases":[],"title":"Kiota is an OpenAPI based HTTP Client code generator. Prior to 1.29.1 and 1.32.5, Kiota resolved OpenAPI $ref values by fetching remote http(s) URLs and reading local absolute or out-of-tree file paths, allowing `kiota generate` on an attac…","description":"Kiota is an OpenAPI based HTTP Client code generator. Prior to 1.29.1 and 1.32.5, Kiota resolved OpenAPI $ref values by fetching remote http(s) URLs and reading local absolute or out-of-tree file paths, allowing `kiota generate` on an attacker-controlled or attacker-influenced description to perform build-time SSRF, remote file inclusion, and local file inclusion by inlining external schemas such as REMOTE_KIOTA_PROP or Leaked into generated clients. This issue is fixed in version 1.29.1 and 1.32.5 by AllowedExternalOriginsStreamLoader and the --allowed-external-origins option.","state":0,"publishedAt":"2026-07-16T16:19:15.62+00:00","modifiedAt":"2026-10-24T20:10:00.137+00:00","affected":[],"metrics":[{"system":"CVSS 3.1 · security-advisories@github.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N","score":7.1,"severity":"HIGH"}],"references":["https://github.com/microsoft/kiota/commit/cccd798027f0a20db796b3df6c64f9897a39d7b1","https://github.com/microsoft/kiota/pull/7888","https://github.com/microsoft/kiota/releases/tag/v1.32.5","https://github.com/microsoft/kiota/security/advisories/GHSA-rg4h-fpcp-2qm8"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-59867","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Deferred","weaknesses":["CWE-22","CWE-829","CWE-918"],"productCriteria":[],"sourceDates":{"published":"2026-07-16T16:19:15.620","lastModified":"2026-10-24T20:10:00.137"},"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-59867","identifiers":["CVE-2026-59867"]},"retained":false,"historicalAffected":[]},{"revision":"8fbf2d492b82412fac19063e404ce529","observedAt":"2026-10-23T16:01:25.029+00:00","statement":{"source":"osv","id":"GHSA-rg4h-fpcp-2qm8","aliases":["CVE-2026-59867"],"title":"Microsoft Kiota: Generation-time SSRF + remote/local file inclusion via unrestricted $ref","description":"## Summary\n\nMicrosoft Kiota resolved OpenAPI `$ref`s by fetching remote `http(s)` URLs and reading local files\n(including absolute / out-of-tree paths), inlining the referenced schema into the generated client.\nRunning `kiota generate` on a spec whose `$ref` pointed at an attacker/internal URL or an arbitrary\nlocal file yielded SSRF, remote file inclusion, and local file inclusion. Verified on **1.32.3 / 1.32.4**.\n\n### Details\n\n- `$ref: http://attacker/internal-evil.json#/...` → build host fetches the URL (SSRF) and inlines the\n  remote schema (RFI); confirmed property `REMOTE_KIOTA_PROP` in the generated client.\n- `$ref: /abs/path.json#/...` or `../../secret.json#/...` → Kiota reads the out-of-tree local file and\n  inlines its schema (LFI); confirmed `Leaked` schema in the generated client. Resolution is transitive\n  across nesting levels.\n\nKiota **escapes** its output sinks (comments/strings/identifiers), so attacker-controlled remote/local\ncontent cannot break out into code — no RCE. The chain stops at SSRF + RFI + LFI.\n\n### Impact\n\nBuild-time SSRF (CWE-918) from the developer or CI host, disclosure of arbitrary local files (CWE-22), and\ninclusion of untrusted remote content (CWE-829), from running the generator on an attacker-controlled or\nattacker-influenced OpenAPI description. No code execution. Notable because Kiota is otherwise the hardened\ngenerator (it resists the code-injection class).\n\nThe relevant threat is not \"change the generated output\" (an attacker who fully controls the description can\nalready do that) but the **side effects on the build host**: outbound requests from inside the CI network\n(cloud metadata, internal-only services) and reads of local files the attacker never possessed, whose contents\nare then inlined into the generated — and typically committed/published — client. It also bypasses controls\nthat review the description document but not externally-referenced content.\n\n### Patches\n\nFixed in **1.29.1 and 1.32.5** (https://github.com/microsoft/kiota/pull/7888). External reference resolution is now\n**default-deny**: a new `AllowedExternalOriginsStreamLoader` refuses to load any external `$ref` — remote\n`http(s)` URLs and local file paths alike — unless its origin/path is explicitly allow-listed. A new\n`--allowed-external-origins` parameter (added to the commands that load OpenAPI descriptions) opts specific\norigins back in, accepting `*`, full URIs, URI patterns, full paths, relative paths, or path patterns\n(wildcards supported). With no allow-list entries, external references are not loaded at all.\n\n### Remediation\n\nUpgrade to Kiota **1.29.1, 1.32.5,** or later. External references now require explicit opt-in via\n`--allowed-external-origins`; add only trusted origins/paths.","state":0,"publishedAt":"2026-07-24T16:10:17+00:00","modifiedAt":"2026-08-17T15:00:08.0664497+00:00","affected":[{"ecosystem":"NuGet","name":"Microsoft.OpenApi.Kiota","ranges":[{"type":"ECOSYSTEM","events":[{"kind":"introduced","version":"1.30.0"},{"kind":"fixed","version":"1.32.5"}]}],"versions":["1.30.0","1.31.0","1.31.1","1.32.0","1.32.1","1.32.2","1.32.3","1.32.4"],"rawVersionEvidence":null},{"ecosystem":"NuGet","name":"Microsoft.OpenApi.Kiota.Builder","ranges":[{"type":"ECOSYSTEM","events":[{"kind":"introduced","version":"1.30.0"},{"kind":"fixed","version":"1.32.5"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"NuGet","name":"Microsoft.OpenApi.Kiota","ranges":[{"type":"ECOSYSTEM","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"1.29.1"}]}],"versions":["0.1.0-preview","0.1.1-preview","0.1.2-preview","0.1.3-preview","0.10.0-preview","0.11.0-preview","0.11.1-preview","0.2.0-preview","0.2.1-preview","0.3.0-preview","0.4.0-preview","0.5.0-preview","0.5.1-preview","0.6.0-preview","0.7.1-preview","0.8.3-preview","0.9.0-preview","1.0.0","1.0.1","1.1.0","1.1.1","1.1.2","1.1.3","1.10.0","1.10.1","1.11.0","1.11.1","1.12.0","1.13.0","1.14.0","1.15.0","1.16.0","1.17.0","1.18.0","1.19.0","1.19.1","1.2.0","1.2.1","1.20.0","1.21.0","1.22.0","1.22.1","1.22.2","1.22.3","1.23.0","1.24.0","1.24.1","1.24.2","1.24.3","1.25.1","1.26.0","1.26.1","1.27.0","1.28.0","1.29.0","1.3.0","1.4.0","1.5.0","1.5.1","1.6.1","1.7.0","1.8.0","1.8.1","1.8.2","1.9.0","1.9.1"],"rawVersionEvidence":null},{"ecosystem":"NuGet","name":"Microsoft.OpenApi.Kiota.Builder","ranges":[{"type":"ECOSYSTEM","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"1.29.1"}]}],"versions":["0.2.0-preview","0.3.0-preview","0.4.0-preview","0.5.0-preview","0.5.1-preview","0.6.0-preview","0.7.1-preview","1.0.0","1.0.1","1.1.0","1.1.1","1.1.2","1.1.3","1.10.0","1.10.1","1.11.0","1.11.1","1.12.0","1.13.0","1.14.0","1.15.0","1.16.0","1.17.0","1.18.0","1.19.0","1.19.1","1.2.0","1.2.1","1.20.0","1.21.0","1.22.0","1.22.1","1.22.2","1.22.3","1.23.0","1.3.0","1.4.0","1.5.0","1.5.1","1.6.1","1.7.0","1.8.0","1.8.1","1.8.2","1.9.0","1.9.1"],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/microsoft/kiota/security/advisories/GHSA-rg4h-fpcp-2qm8","https://nvd.nist.gov/vuln/detail/CVE-2026-59867","https://github.com/microsoft/kiota/pull/7888","https://github.com/microsoft/kiota/commit/cccd798027f0a20db796b3df6c64f9897a39d7b1","https://github.com/microsoft/kiota","https://github.com/microsoft/kiota/releases/tag/v1.32.5"],"sourceUrl":"https://github.com/advisories/GHSA-rg4h-fpcp-2qm8","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-rg4h-fpcp-2qm8","identifiers":["GHSA-rg4h-fpcp-2qm8","CVE-2026-59867"]},"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-10-27T10:09:34.0172509+00:00","complete":true,"records":1758,"lastAttemptAt":"2026-10-27T10:09:34.0172509+00:00","lastSuccessAt":"2026-10-27T10:09:34.2036502+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:09:34.203653+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-187d2b72c94ceb8c4417f1032ec3109a3a3a7b730abadb561d8cdd2a96e04d27-58bd20eb1c173e279bc77b11e82554c8e98062750684c6e9d920fc51991f5484","complete":true,"records":414891,"lastAttemptAt":"2026-10-27T10:09:33.4404255+00:00","lastSuccessAt":"2026-10-27T10:09:33.4069739+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:09:33.4404255+00:00","snapshotPublishedAt":"2026-10-27T09:30:40+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":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-43321610382942b8ad8c85917eab1546","complete":false,"records":4735,"lastAttemptAt":"2026-10-27T10:10:21.532529+00:00","lastSuccessAt":"2026-10-24T23:18:49.862+00:00","error":"InvalidDataException","lastVerifiedAt":"2026-10-24T23:18:49.862+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":0,"expectedIdentifiers":13477},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-10-27T10:09:34.0172509+00:00","complete":true,"records":1093,"lastAttemptAt":"2026-10-27T10:09:34.0172509+00:00","lastSuccessAt":"2026-10-27T10:09:34.2047822+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:09:34.204783+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":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-1cf3dd00f71445ea951a915a8c2765a8","complete":true,"records":13416,"lastAttemptAt":"2026-10-27T10:10:19.5433878+00:00","lastSuccessAt":"2026-10-27T10:10:19.54+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:10:19.54+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13477,"expectedIdentifiers":13477},{"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-c3121b113ecd88f1c92ccfa0ec9757ddc8386e4c12afd2597450b815744f800a","complete":true,"records":9779,"lastAttemptAt":"2026-10-27T10:09:33.9651012+00:00","lastSuccessAt":"2026-10-26T15:37:14.3083004+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:09:33.9651012+00:00","snapshotPublishedAt":"2026-10-26T14:48:41+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-bad5d31e7f6a5e3d338e11d8789069b63620a403f927730769688b42f768e4f6","complete":true,"records":1965,"lastAttemptAt":"2026-10-27T10:09:33.594221+00:00","lastSuccessAt":"2026-10-26T16:35:43.1460623+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:09:33.594221+00:00","snapshotPublishedAt":"2026-10-26T16:18:29+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":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-a393d8fe0ae8408f3e4cab413b76047090c8e4a3c0a186c79edf33c9a3d3af95","complete":true,"records":2995,"lastAttemptAt":"2026-10-27T10:09:33.9810013+00:00","lastSuccessAt":"2026-10-26T14:35:47.9640893+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:09:33.9810013+00:00","snapshotPublishedAt":"2026-10-26T14:18:55+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":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-513066461af8d030bad8efab4fea81eabd246acd525512aa7469c95ccf02c320","complete":true,"records":230813,"lastAttemptAt":"2026-10-27T10:09:33.7755937+00:00","lastSuccessAt":"2026-10-27T09:02:44.9044939+00:00","error":null,"lastVerifiedAt":"2026-10-27T10:09:33.7755937+00:00","snapshotPublishedAt":"2026-10-27T08:48:32+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null}]}