HIGH 7.5

CVE-2026-50170: Angular SSR Credential Caching & Data Leakage Vulnerability

Angular applications using Server-Side Rendering (SSR) with hydration are vulnerable to unintended credential caching and data leakage. When Angular's HttpTransferCache utility prepares responses for the client, it doesn't check whether those requests included credentials or sensitive cookies. This means user-specific data—like personalized account information—can end up cached in the TransferState payload that gets baked into the HTML. If a CDN, reverse proxy, or shared cache layer then caches that HTML page, the next user to request the same page could receive the previous user's private data. The vulnerability affects Angular versions prior to 22.0.0-rc.2, 21.2.15, 20.3.22, and 19.2.23.

Source data · NVD / CISA · public domain

CVSS
3.1 · 7.5 HIGH · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weaknesses (CWE)
CWE-524
Affected products
16 configuration(s)
Published / Modified
2026-06-22 / 2026-07-09

NVD description (verbatim)

Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to 22.0.0-rc.2, 21.2.15, 20.3.22, and 19.2.23, a vulnerability was discovered in @angular/common when Server-Side Rendering (SSR) and hydration are enabled. The HttpTransferCache utility optimizes hydration by caching outgoing HTTP requests performed during SSR and transferring the cached state to the client-side application via TransferState. However, the caching mechanism fails to inspect the withCredentials flag or the Cookie header of outgoing requests. As a result, credentialed, user-specific responses may be cached by default in the shared TransferState payload. When these responses are serialized into the HTML, any caching layer (such as a CDN, reverse proxy, or shared server cache) that caches the SSR-rendered HTML page could inadvertently cache and leak one user's private data to other users, leading to a high-severity information disclosure vulnerability. This vulnerability is fixed in 22.0.0-rc.2, 21.2.15, 20.3.22, and 19.2.23.

2 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability resides in @angular/common's HttpTransferCache mechanism, which optimizes SSR hydration by serializing cached HTTP responses into the TransferState object embedded in the HTML document. The flaw is the absence of withCredentials flag inspection and Cookie header validation before caching. When a credentialed request executes during SSR—such as one bearing session cookies or Authorization headers—the response is cached and transferred without distinguishing it as user-specific. Upon HTML serialization, this cached state becomes part of the static markup. Any downstream cache that stores the rendered HTML (CDN, reverse proxy, browser cache headers permitting) will serve the same HTML—including the previous user's response data—to subsequent clients. This creates a cross-user information disclosure channel. The fix, available in the patched versions listed, enforces credential-aware caching decisions in the HttpTransferCache implementation.

Business impact

For organizations deploying Angular SSR applications, this vulnerability poses a direct risk to user privacy and data confidentiality. Customer-sensitive data—authentication tokens, personalized settings, PII—could leak from one user session to another if your infrastructure includes any caching layer between your Angular SSR server and clients. This exposure is particularly acute in multi-tenant environments or high-traffic sites where cache hit rates are common. Beyond regulatory fines under GDPR, CCPA, or similar frameworks, unauthorized data disclosure damages customer trust and creates incident response costs. Applications not using SSR or not enabling hydration are not at risk.

Affected systems

Angular applications running versions prior to 22.0.0-rc.2, 21.2.15, 20.3.22, or 19.2.23 are affected, but only if both Server-Side Rendering and hydration are enabled. Framework consumers using older Angular versions (19.x through 22.0.0-rc.1) without SSR/hydration enabled are not vulnerable. The @angular/common package is the affected component; all applications depending on it with SSR+hydration active should be assessed.

Exploitability

Exploitation requires no special technique or authentication—it is passive and automatic. Any credentialed HTTP request made during SSR is vulnerable to caching by default; no attacker action is needed to trigger the flaw. However, actual data leakage depends on presence of a caching layer between your SSR server and clients. In architectures without CDN, reverse proxy, or shared cache (direct server-to-browser delivery only), the risk is lower. In typical enterprise deployments with Cloudflare, Nginx reverse proxies, AWS CloudFront, or similar caching infrastructure, the vulnerability is easily exploitable and likely to manifest. The CVSS score of 7.5 reflects high-severity information disclosure with network-accessible attack vector, low attack complexity, and no privileges or user interaction required.

Remediation

Upgrade Angular to a patched version immediately: 22.0.0-rc.2 or later, 21.2.15 or later, 20.3.22 or later, or 19.2.23 or later, depending on your current minor version. Verify compatibility with your application before deploying to production. As an interim measure on unpatched systems, consider disabling client-side hydration if operationally feasible, or disable SSR entirely; however, these workarounds sacrifice performance benefits and should only be temporary. Review your caching policy: ensure that cache headers on SSR responses exclude credentialed responses or reduce cache TTL for authenticated traffic. Conduct a forensic review of application logs and cache logs to determine whether credentialed responses were cached and served to other users during the vulnerable period.

Patch guidance

Apply updates in order of availability: upgrade @angular/common and related Angular framework packages to one of the fixed versions (22.0.0-rc.2+, 21.2.15+, 20.3.22+, or 19.2.23+). Test in a staging environment, particularly validating that SSR and hydration still function correctly and that no performance regression occurs. For organizations on extended support or LTS versions, confirm your specific version is listed in the Angular security advisory. If your version is no longer receiving updates, plan a broader framework upgrade. Coordinate the release to minimize downtime if your application is high-traffic.

Detection guidance

Monitor for signs of credential leakage: review CDN and reverse proxy cache logs for patterns where the same HTML response (identifiable by content hash or ETag) is served to multiple users within a short timeframe. Audit TransferState serialization in your SSR output—inspect the HTML source for cached HTTP response bodies in the transfer state script tag and check whether those responses contain user-specific or sensitive fields (e.g., 'user', 'email', 'token', 'session'). Enable verbose logging on your HttpClient to track which requests include credentials (withCredentials: true) and correlate those with what appears in TransferState. Search application security logs and user reports for anomalies: users seeing other users' data, unexpected account details, or session leakage. Implement runtime instrumentation to flag when a credentialed request is about to be cached in TransferState.

Why prioritize this

This vulnerability should be patched urgently. The combination of high CVSS (7.5), ease of exploitation (automatic, no user action), broad applicability (any Angular SSR application), and severe impact (multi-user data leakage) creates immediate and material risk. Unlike vulnerabilities requiring attacker effort or rare conditions, this flaw is triggered by normal operation in common deployment architectures. The fact that it is not yet on the KEV catalog does not lower the actual risk; it reflects recency rather than severity. Apply patches within 1–2 weeks, and conduct a forensic review of production logs for evidence of exploitation during the vulnerable window.

Risk score, explained

The CVSS v3.1 score of 7.5 (HIGH) is assigned on the basis of: Attack Vector=Network (exploitation is trivial from the internet), Attack Complexity=Low (no special setup required), Privileges Required=None (unauthenticated attacker can trigger the leak), User Interaction=None (automatic during normal SSR operation), Scope=Unchanged (impact is limited to confidentiality of cached data), Confidentiality=High (user-specific private data is disclosed), Integrity=None (no data modification), Availability=None (no service disruption). The score does not account for the conditional nature of actual leakage (requires a caching layer), but reflects the intrinsic severity of the vulnerability itself.

Frequently asked questions

If we use Angular SSR but disable hydration, are we affected?

No. The vulnerability requires both SSR and hydration to be active. If you have disabled hydration, credentialed responses are not transferred to the client and cannot be cached in TransferState. However, disabling hydration negates performance benefits and is not recommended as a permanent fix; upgrade to a patched version instead.

Do we need to worry about this if we use an API gateway that strips credentials before caching?

If your architecture explicitly filters or re-issues credentialed requests such that they never reach your caching layer, the risk is substantially reduced. However, you should verify this design in code review. Many teams assume credentials are stripped when they are not; it is safer to patch and confirm correct behavior than to rely on architectural assumptions.

How can we tell if our cached HTML pages leaked user data before we patched?

Review your CDN and reverse proxy logs for cache hit rates on authenticated pages; a high hit rate to many unique users suggests credentialed responses may have been cached and shared. Inspect your WAF and application logs for anomalies such as users accessing or exfiltrating each other's data. If you have access to historical TransferState payloads in your application logs or browser error tracking, decode them and search for user-specific fields. Consider hiring forensic or incident response services if the scale of possible exposure is large.

Which Angular versions are affected?

Angular 19.x prior to 19.2.23, 20.x prior to 20.3.22, 21.x prior to 21.2.15, and 22.0.0-rc.1 and earlier. Versions 19.2.23, 20.3.22, 21.2.15, 22.0.0-rc.2, and later are patched. Verify your exact version with 'ng version' and consult the official Angular security advisory.

This analysis is based on publicly available vulnerability information and the official CVE record as of the publication date. For authoritative guidance, consult the Angular security advisory and vendor release notes. No exploit code or weaponized proof-of-concept is provided. Organizations must independently validate their infrastructure, verify patch applicability, and test in non-production environments before deployment. This content is for informational purposes and does not constitute legal or compliance advice. Actual risk and impact vary by deployment architecture and data sensitivity; conduct your own risk assessment in consultation with your security and engineering teams. Source: NVD (public-domain), retrieved 2026-07-28. Analysis generated by SEC.co (claude-haiku-4-5).