Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Attacker must control or manipulate a cross-origin redirect target (non-trivial), justifying AC:H; impact is token disclosure only, so C:L with no I or A impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
4DescriptionCVE.org
@microsoft/kiota-http-fetchlibrary provides TypeScript libraries for Kiota-generated API clients. In versions 1.0.0-preview.97 through 1.0.0-preview.101, @microsoft/kiota-http-fetchlibrary's RedirectHandler is documented as stripping Authorization and Cookie from cross-origin redirect targets, but the default scrubSensitiveHeaders callback in RedirectHandlerOptions uses case-sensitive property deletion (delete headers.Authorization, delete headers.Cookie) on a headers object that FetchRequestAdapter.getRequestFromRequestInformation has already lower-cased. The delete therefore targets keys that do not exist, the scrub is a no-op, and any Bearer token or Cookie attached by a kiota-generated SDK is forwarded to an attacker-controlled host across a 30x redirect. This is reachable in the default middleware chain (MiddlewareFactory.getDefaultMiddlewares) with no custom configuration, and applies to every kiota-generated TypeScript SDK that uses BaseBearerTokenAuthenticationProvider or any other authentication provider that sets the Authorization request header. Version 1.0.0-preview.102 patches the issue.
AnalysisAI
Credential leakage in @microsoft/kiota-http-fetchlibrary versions 1.0.0-preview.97 through 1.0.0-preview.101 causes Bearer tokens and session cookies to be forwarded to attacker-controlled cross-origin redirect destinations because the default RedirectHandler's header-scrubbing logic silently fails: FetchRequestAdapter lowercases all header keys before the middleware sees them, but scrubSensitiveHeaders performs PascalCase deletes (delete headers.Authorization), targeting keys that no longer exist. This flaw is present in the default middleware chain with no opt-in configuration required, affecting every kiota-generated TypeScript SDK - including Microsoft Graph clients - that uses BaseBearerTokenAuthenticationProvider or any auth provider that sets the Authorization header. Proof-of-concept code exists (CVSS 4.0 E:P), and a vendor patch is available in version 1.0.0-preview.102; no active exploitation has been confirmed in the CISA KEV at time of analysis.
Technical ContextAI
The affected package is @microsoft/kiota-http-fetchlibrary, part of the kiota-typescript ecosystem (CPE: cpe:2.3:a:microsoft:kiota-typescript:*:*:*:*:*:*:*:*). The root cause is CWE-178 (Improper Handling of Case Sensitivity): FetchRequestAdapter.getRequestFromRequestInformation normalizes all HTTP request header keys to lowercase before the headers object reaches any middleware, so by the time RedirectHandler executes, the Authorization header is stored as authorization and Cookie as cookie. The default scrubSensitiveHeaders callback in RedirectHandlerOptions used static property deletion - delete headers.Authorization and delete headers.Cookie - which targets non-existent PascalCase keys, making the scrub a complete and silent no-op. The bug was introduced in this window of preview versions and is embedded in MiddlewareFactory.getDefaultMiddlewares, making it universally active in default SDK setups. The fix in commit 09f8bd9b replaces static deletes with a case-insensitive loop over Object.keys() matching against lowercased comparisons, and also extends coverage to proxy-authorization, which was previously unaddressed.
RemediationAI
Upgrade @microsoft/kiota-http-fetchlibrary to version 1.0.0-preview.102, which fixes the case-sensitivity bug in scrubSensitiveHeaders and also extends the scrub to cover proxy-authorization. The patch is detailed in commit 09f8bd9b34d68bf412a9b78f6ca7e7961ef14974 and the GitHub advisory at https://github.com/microsoft/kiota-typescript/security/advisories/GHSA-396q-4vc8-28x9. If an immediate upgrade is not feasible, a targeted workaround is to supply a custom scrubSensitiveHeaders callback in RedirectHandlerOptions that iterates header keys case-insensitively (replicating the fix locally) - this avoids disrupting redirect-dependent API flows while closing the exposure. A more disruptive but complete compensating control is to configure the middleware chain with maxRedirects: 0 to disable automatic redirect following entirely; this eliminates the leakage path but will break any API calls that depend on legitimate server-side redirects, requiring callers to handle redirects manually. Given the default-on exposure path, upgrading to 1.0.0-preview.102 is strongly preferred over workarounds.
Same weakness CWE-178 – Improper Handling of Case Sensitivity
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-38061
GHSA-396q-4vc8-28x9