Oct 7, 2026·6 min read·0 visits
Microsoft Kiota versions 1.25.1 to < 1.35.0 fail to validate the `oauth_card_path` parameter in custom OpenAPI extensions. An attacker can supply a malicious OpenAPI document to generate a compromised plugin manifest containing directory traversal segments, absolute paths, or external URIs, causing downstream execution hosts to access unauthorized files or external servers.
CVE-2026-105795 (GHSA-6gw6-rv2g-25mg) is a critical path traversal vulnerability in Microsoft Kiota, an OpenAPI-based HTTP client and plugin manifest generator. In affected versions (1.25.1 to < 1.35.0), Kiota propagates the unvalidated `x-ai-capabilities.response_semantics.oauth_card_path` vendor extension directly into generated API plugin manifests, leading to potential path traversal exploitation by downstream consumers.
Microsoft Kiota is an OpenAPI-based client and plugin generator designed to compile OpenAPI descriptions into reusable software libraries and plugin manifests. Among its functions is the generation of declarative API plugin manifests, which downstream hosts like Microsoft Copilot or Teams resolve to run plugins dynamically. The attack surface centers on Kiota's parser when processing custom OpenAPI extensions starting with the prefix x-ai-capabilities.
During the manifest construction process, Kiota attempts to extract declarative configuration metadata. Specifically, it parses the response_semantics mapping, which includes an optional field known as oauth_card_path. This field points to adaptive cards or OAuth flow configurations used by the plugin runtime during authorization phases.
In vulnerable versions of Kiota, the generator accepts and serializes this property without running security checks or path normalization. The security boundary is breached because the code generation engine implicitly trusts the OpenAPI specification, compiling traversal sequences or external resources directly into the manifest. Downstream integration engines then ingest these manifests and can be forced to break containment boundaries, exposing local files or contacting remote servers.
The root cause of this vulnerability lies in the lack of input validation and serialization logic inside src/Kiota.Builder/Plugins/PluginsGenerationService.cs. Prior to version 1.35.0, the PluginsGenerationService extracted the OauthCardPath string from parsed OpenAPI documents and directly assigned it to the generated object instance.
No checks were performed to see if the value contained directory traversal sequences (such as ..), absolute directory pathways (such as /etc/ or C:\), or network URIs (such as http:// or \\UNC\). Because Kiota acts as an intermediate compiler, it does not access the file paths during compilation. This design decision caused developers to overlook the security implications of storing raw paths in the output.
When Kiota outputs the generated plugin manifest JSON, the unvalidated path is embedded as an official configuration attribute. The responsibility of resolving this path is shifted to the downstream execution host. When the host environment parses the generated manifest and executes file lookup actions relative to the plugin directory, it processes the malicious traversal sequence.
The vulnerability was mitigated in version 1.35.0 via Pull Request #8055, applying a security check before property serialization. The patch introduces a helper validation method, ExtensionResponseSemanticsStaticTemplate.IsSafeFileReference, to ensure path references do not violate containment boundaries.
Below is the comparison of the vulnerable codebase against the patched version in src/Kiota.Builder/Plugins/PluginsGenerationService.cs:
// VULNERABLE CODE (Kiota < 1.35.0)
// The raw string was assigned directly to the output object without sanitization
responseSemantics.OAuthCardPath = capabilities.ResponseSemantics.OauthCardPath;// PATCHED CODE (Kiota >= 1.35.0)
// The generation engine now validates the presence of oauthCardPath
if (capabilities.ResponseSemantics.OauthCardPath is { } oauthCardPath)
{
// Check if the path points outside the manifest directory or contains URIs
if (ExtensionResponseSemanticsStaticTemplate.IsSafeFileReference(oauthCardPath))
{
responseSemantics.OAuthCardPath = oauthCardPath;
}
else
{
// Unsafe references are dropped, and a warning is emitted to logs
LogUnsafeOAuthCardPathFileReference(logger, oauthCardPath);
}
}The validation routine IsSafeFileReference ensures the value does not contain absolute structures, Windows UNC paths, or parent directory markers. The implementation of LogUnsafeOAuthCardPathFileReference registers a warning stating that oauth_card_path must be a relative path that does not point outside the manifest package structure.
To exploit this vulnerability, an attacker must supply a compromised OpenAPI document to a user compiling an API plugin manifest with Kiota. This can happen through shared repository specifications, public API catalogs, or social engineering.
An attacker crafts an OpenAPI spec containing a path traversal sequence in the oauth_card_path property of the x-ai-capabilities extension. Below is a structural example of a malicious specification:
openapi: 3.0.0
info:
title: Traversal Exploit Specification
version: 1.0
paths:
/api/v1/auth:
get:
operationId: triggerAuth
x-ai-capabilities:
response_semantics:
data_path: $.data
oauth_card_path: '../../../../../../etc/passwd'
responses:
'200':
description: SuccessWhen a developer processes this document using a vulnerable version of Kiota (e.g., kiota generate --plugin openapi), Kiota writes the value directly to the output. The resulting manifest file contains the payload:
{
"capabilities": {
"response_semantics": {
"data_path": "$.data",
"oauth_card_path": "../../../../../../etc/passwd"
}
}
}If the generated manifest is loaded into a downstream environment that executes file lookups relative to the plugin root without enforcing canonical path boundaries, the host reads and exposes the targeted system file.
The impact of CVE-2026-105795 depends heavily on the privilege level and configuration of the downstream host processing the generated manifest. In an insecure environment, an attacker can achieve local file disclosure or force unauthorized network interactions.
Under POSIX-compliant systems, directory traversal payloads can target files like /etc/passwd or application configuration files. On Windows-based systems, attackers can target registry configurations or system files using absolute path syntax or drive-letter prefixes. If a Windows host processes a UNC path payload (e.g., \\attacker-server\share\card.json), the host may attempt an SMB connection, leaking NetNTLM credentials to an external server.
Furthermore, if the host environment accepts URI schemes, an attacker could supply an HTTP or HTTPS link, leading to Server-Side Request Forgery (SSRF). This would allow the downstream service to fetch card configurations from arbitrary internet hosts, potentially executing secondary payloads.
Remediation of CVE-2026-105795 requires updating the Kiota builder toolchain and implementing defensive validation policies. Organizations utilizing Kiota must upgrade their CLI tools and NuGet dependencies to version 1.35.0 or higher.
To update the Kiota CLI globally, execute the following dotnet command:
dotnet tool update -g Microsoft.OpenApi.KiotaFor projects consuming Kiota as a C# library, edit your .csproj file to ensure that dependencies for Microsoft.OpenApi.Kiota and Microsoft.OpenApi.Kiota.Builder are set to 1.35.0 or greater.
In addition, downstream host systems must implement defense-in-depth measures. Run-time environments should never trust paths declared in manifest files. Runtimes must canonicalize all paths using platform-specific APIs and verify that the target path resides strictly within the sandboxed application directory before initiating file-read operations.
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
Microsoft Kiota CLI Microsoft | >= 1.25.1, < 1.35.0 | 1.35.0 |
Microsoft.OpenApi.Kiota Microsoft | >= 1.25.1, < 1.35.0 | 1.35.0 |
Microsoft.OpenApi.Kiota.Builder Microsoft | >= 1.25.1, < 1.35.0 | 1.35.0 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-22 |
| Attack Vector | Network |
| CVSS v3.1 Score | 3.1 |
| EPSS Score | Not Registered |
| Impact | Low Integrity Impact, Downstream File Disclosure risk |
| Exploit Status | Proof-of-Concept |
| KEV Status | Not Listed |
The application uses external input to construct a pathname that is intended to identify a file or directory that is located under a restricted parent directory, but the application does not properly neutralize special elements within the pathname.
CVE-2026-105805 is an authorization bypass and information disclosure vulnerability in Payload CMS. Before version 3.88.0, user-controlled sorting was executed at the database level before field-level access control rules and data redaction were applied. This allowed unauthorized users to reconstruct restricted field values through a sorting side-channel.
Payload CMS is subject to an information disclosure vulnerability where users with query permissions can bypass field-level access controls. By leveraging polymorphic join filters, an attacker can perform blind-inference queries to retrieve restricted or hidden fields such as password reset tokens.
An open redirect vulnerability exists in Payload CMS within its Next.js-based authentication routing components. The sanitization utility fails to properly account for control characters and ambiguous encodings, allowing unauthenticated attackers to redirect users to external malicious domains after successful authentication.
A critical SQL Injection and access control bypass vulnerability was identified in Payload CMS database adapters (SQLite and PostgreSQL using Drizzle ORM internally). The vulnerability arises from case-sensitive logical operator checks during path validation and unvalidated sort queries. This allows remote attackers to bypass access control rules, execute unauthorized queries, and retrieve sensitive data through blind SQL injection side channels.
A critical prototype pollution vulnerability in the import-export plugin of Payload CMS allows unauthenticated remote attackers to bypass access controls and achieve remote code execution.
CVE-2026-105806 is an improper access control vulnerability within the Model Context Protocol (MCP) plugin for Payload CMS. Authenticated users with low privileges can manipulate API key creation and mapping to associate keys with arbitrary users, including administrators. This allows total session takeovers and privilege escalation via MCP-authenticated API requests.