Microsoft Kiota: Path traversal in generated plugin manifest static_template.file reference (percent-encoding bypass)
Impact
Kiota generates AI plugin manifests from an OpenAPI description. When the description contains an x-ai-capabilities response semantics static_template (or the adaptive-card extension x-ai-adaptive-card), the file reference is written into the generated manifest's response_semantics.static_template.file and is later resolved by the AI host relative to the plugin package.
An attacker who controls or tampers with the OpenAPI description consumed by Kiota can supply a file reference that resolves outside the manifest package (e.g. ../../../../etc/passwd, an absolute path, or a file:// / http(s):// URI). When the generated manifest is deployed and consumed by an AI host, this can lead to inclusion or disclosure of files outside the intended package boundary (CWE-22 Path Traversal, CWE-829 Inclusion of Functionality from an Untrusted Control Sphere).
A mitigation shipped in v1.32.5 (ExtensionResponseSemanticsStaticTemplate.IsSafeFileReference) rejected literal traversal, rooted paths, drive-qualified paths, and absolute URIs. However, that check inspected the raw reference string, so percent-encoded payloads bypassed every check and were still emitted verbatim. Examples that were incorrectly accepted as safe:
| Input | Decodes to |
|---|---|
%2e%2e/card.json |
../card.json |
..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd |
../../../../../../etc/passwd |
file%3A%2F%2F%2Fetc%2Fpasswd |
file:///etc/passwd |
%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd |
../../../etc/passwd |
Multi-level (double) encoding such as %252e%252e%252fcard.json was also affected. A follow-up review found additional residual bypasses of the same validator: an embedded NUL byte (%00) that truncated the path and defeated the parent-directory segment check, encoding nested deeper than the decode budget (which failed open), and Unicode full-width homoglyphs (e.g. %EF%BC%8E%EF%BC%8E → ..).
Patches
- The percent-encoding bypass is fixed by decoding the reference (bounded multi-pass) before validation: https://github.com/microsoft/kiota/pull/7910
- Residual bypasses (NUL / control characters, decode-budget fail-open, Unicode homoglyphs) are fixed by failing closed on residual encoding, rejecting control characters, and NFKC-folding before validation: https://github.com/microsoft/kiota/pull/7913 (tracking issue https://github.com/microsoft/kiota/issues/7912)
Users should upgrade to the first released Microsoft.OpenApi.Kiota version that includes these fixes (the release following 1.33.0).
Workarounds
- Only generate clients/plugins from trusted OpenAPI descriptions.
- Review generated plugin manifests before deployment and reject any
response_semantics.static_template.filevalue that is not a simple relative path within theadaptiveCards/package folder (no.., no rooted/absolute paths, no URIs, no percent-encoded separators).
References
- CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
- CWE-829: Inclusion of Functionality from an Untrusted Control Sphere
- Affected code:
src/Kiota.Builder/OpenApiExtensions/OpenApiAiCapabilitiesExtension.cs(IsSafeFileReference) and enforcement insrc/Kiota.Builder/Plugins/PluginsGenerationService.cs.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| .NET (NuGet) | Microsoft.OpenApi.Kiota | >= 1.30.0, < 1.34.0, < 1.29.1 | 1.34.0, 1.29.1 |
Odnośniki
- https://github.com/microsoft/kiota/security/advisories/GHSA-p5rm-jg5c-8c77
- https://github.com/microsoft/kiota/issues/7912
- https://github.com/microsoft/kiota/pull/7910
- https://github.com/microsoft/kiota/pull/7913
- https://github.com/microsoft/kiota/commit/430008e9d700b3fe80f206c672415cfbd8e830e7
- https://github.com/microsoft/kiota/commit/de3d18d9fe31ced4ac749728d3a2f94811f59268
- https://github.com/microsoft/kiota
- https://github.com/microsoft/kiota/releases/tag/v1.34.0
- Wektor CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N- Słabość (CWE)
CWE-22, CWE-829- Platforma
- .NET (NuGet)
- Paczka
Microsoft.OpenApi.Kiota- Ujawniono
- 24.07.2026
- Aktualizacja
- 11.10.2026 11:23
Źródła i licencje
OSV / GitHub Advisory Database - GHSA-p5rm-jg5c-8c77 - CC BY 4.0
Historia podatności: Microsoft.OpenApi.Kiota
Wszystkie opisane podatności tej paczki (.NET (NuGet)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
- Wszystkich wpisów
- 13
- Pierwsza → ostatnia
- 04.2026 10.2026
- Bez poprawki
- 0
- Wykorzystywana w atakach
- 0
Rozkład istotności
- Krytyczna 2
- Wysoka 9
- Średnia 1
- Niska 1
Ujawnienia w latach
- 2026: 13
-
Microsoft Kiota: Path traversal in generated plugin manifest static_template.file reference (percent-encoding bypass) ten wpis
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.