Microsoft Kiota: Generation-time SSRF + remote/local file inclusion via unrestricted $ref
Summary
Microsoft Kiota resolved OpenAPI $refs by fetching remote http(s) URLs and reading local files
(including absolute / out-of-tree paths), inlining the referenced schema into the generated client.
Running kiota generate on a spec whose $ref pointed at an attacker/internal URL or an arbitrary
local file yielded SSRF, remote file inclusion, and local file inclusion. Verified on 1.32.3 / 1.32.4.
Details
$ref: http://attacker/internal-evil.json#/...→ build host fetches the URL (SSRF) and inlines the remote schema (RFI); confirmed propertyREMOTE_KIOTA_PROPin the generated client.$ref: /abs/path.json#/...or../../secret.json#/...→ Kiota reads the out-of-tree local file and inlines its schema (LFI); confirmedLeakedschema in the generated client. Resolution is transitive across nesting levels.
Kiota escapes its output sinks (comments/strings/identifiers), so attacker-controlled remote/local content cannot break out into code — no RCE. The chain stops at SSRF + RFI + LFI.
Impact
Build-time SSRF (CWE-918) from the developer or CI host, disclosure of arbitrary local files (CWE-22), and inclusion of untrusted remote content (CWE-829), from running the generator on an attacker-controlled or attacker-influenced OpenAPI description. No code execution. Notable because Kiota is otherwise the hardened generator (it resists the code-injection class).
The relevant threat is not "change the generated output" (an attacker who fully controls the description can already do that) but the side effects on the build host: outbound requests from inside the CI network (cloud metadata, internal-only services) and reads of local files the attacker never possessed, whose contents are then inlined into the generated — and typically committed/published — client. It also bypasses controls that review the description document but not externally-referenced content.
Patches
Fixed in 1.29.1 and 1.32.5 (https://github.com/microsoft/kiota/pull/7888). External reference resolution is now
default-deny: a new AllowedExternalOriginsStreamLoader refuses to load any external $ref — remote
http(s) URLs and local file paths alike — unless its origin/path is explicitly allow-listed. A new
--allowed-external-origins parameter (added to the commands that load OpenAPI descriptions) opts specific
origins back in, accepting *, full URIs, URI patterns, full paths, relative paths, or path patterns
(wildcards supported). With no allow-list entries, external references are not loaded at all.
Remediation
Upgrade to Kiota 1.29.1, 1.32.5, or later. External references now require explicit opt-in via
--allowed-external-origins; add only trusted origins/paths.
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| .NET (NuGet) | Microsoft.OpenApi.Kiota | >= 1.30.0, < 1.32.5, < 1.29.1 | 1.32.5, 1.29.1 |
| .NET (NuGet) | Microsoft.OpenApi.Kiota.Builder | >= 1.30.0, < 1.32.5, < 1.29.1 | 1.32.5, 1.29.1 |
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
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:N- Weakness (CWE)
CWE-22, CWE-829, CWE-918- Platform
- .NET (NuGet)
- Package
Microsoft.OpenApi.Kiota, Microsoft.OpenApi.Kiota.Builder- Disclosed
- 24.07.2026
- Updated
- 11.10.2026 11:23
Sources and licenses
OSV / GitHub Advisory Database - GHSA-rg4h-fpcp-2qm8 - CC BY 4.0
Vulnerability history: Microsoft.OpenApi.Kiota
All published vulnerabilities of this package (.NET (NuGet)), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 13
- First → latest
- 04.2026 10.2026
- Without a fix
- 0
- Exploited in attacks
- 0
Severity breakdown
- Critical 2
- High 9
- Medium 1
- Low 1
Disclosures per year
- 2026: 13
-
Microsoft Kiota: Generation-time SSRF + remote/local file inclusion via unrestricted $ref this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.