CVE-2026-54266: Angular HttpTransferCache Hash Collision Vulnerability
Angular's server-side rendering (SSR) feature uses a weak caching mechanism to avoid repeating HTTP requests during client hydration. The cache relies on a 32-bit hash to identify which responses belong to which requests. Because this hash is weak, an attacker can craft a specially constructed URL with a query parameter that produces the same hash value as a sensitive endpoint. When a victim visits the attacker's link, both requests execute, but due to the collision, the wrong response gets cached and returned to the user. This could expose sensitive data like profile information by replacing it with attacker-controlled content, or vice versa.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 6.1 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Weaknesses (CWE)
- CWE-328, CWE-345
- Affected products
- 1 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.1, 21.2.17, and 20.3.25, Angular's HttpTransferCache caches HTTP requests made during Server-Side Rendering (SSR) so that they can be reused during client-side hydration. This avoids repeating the same HTTP requests on the client. The cached responses are stored in TransferState using a cache key generated by hashing request properties (method, response type, mapped URL, serialized body, and sorted query parameters). The cache keys are generated using a weak 32-bit DJB2-like polynomial rolling hash. The 32-bit hash space is extremely small, allowing attackers to find hash collisions. An attacker can easily find a query parameter string (e.g., q=aaCAZMMM for a search request) that produces the exact same 32-bit hash as a sensitive endpoint (e.g., /api/user/profile). When a victim visits a crafted link containing the colliding parameter, the SSR process executes both the search request and the profile request. Due to the hash collision, the search response overwrites the profile response in the TransferState cache. This vulnerability is fixed in 22.0.1, 21.2.17, and 20.3.25.
3 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
Angular's HttpTransferCache hashes request properties—method, response type, mapped URL, serialized body, and query parameters—using a 32-bit DJB2-like polynomial rolling hash to generate cache keys stored in TransferState. The hash space is cryptographically weak and vulnerable to precomputed collisions. An attacker can discover a query parameter string that collides with the hash of a sensitive endpoint, causing the SSR process to execute both requests but store the colliding response in the cache, overwriting the intended one. The vulnerability affects Angular versions prior to 22.0.1, 21.2.17, and 20.3.25.
Business impact
Applications using Angular SSR could serve incorrect cached responses to users, potentially exposing sensitive data or returning stale search results instead of profile information. This is especially damaging if the sensitive endpoint contains personal, financial, or authentication-related data. An attacker needs only to craft a URL and social engineer a victim into clicking it; no special access is required. The impact is confidentiality and integrity of cached HTTP responses during the critical hydration phase.
Affected systems
Angular applications using server-side rendering (SSR) with HttpTransferCache are affected. Specifically: Angular 20.x versions prior to 20.3.25, Angular 21.x versions prior to 21.2.17, and Angular 22.x versions prior to 22.0.1. Applications that do not use SSR or do not rely on HttpTransferCache for caching responses are not impacted.
Exploitability
Exploitation is straightforward: an attacker discovers a hash collision offline, crafts a malicious URL containing the colliding query parameter, and tricks a user into visiting it. No authentication, special privileges, or active network positioning are required. The attack relies only on user interaction (clicking a link), making it practical for phishing or watering hole campaigns. The 32-bit hash space is small enough that collisions can be found with modest computational effort.
Remediation
Upgrade to Angular 22.0.1, 21.2.17, or 20.3.25 or later, which replace the weak 32-bit hash with a stronger hashing algorithm for cache key generation. Organizations should prioritize patching applications that expose sensitive user endpoints or handle confidential data via SSR.
Patch guidance
Review your Angular version against the affected ranges: pre-20.3.25, pre-21.2.17, and pre-22.0.1. If your application uses SSR, upgrade to the patched version in your version line. Test thoroughly in a staging environment to ensure hydration and caching behavior remains correct after patching. For teams unable to upgrade immediately, consider disabling HttpTransferCache for sensitive endpoints as a temporary mitigation, though this degrades performance.
Detection guidance
Monitor for hash collision attempts by logging cache hits that involve requests to different endpoints producing identical cache keys. Review application logs and TransferState behavior during SSR for anomalies such as unexpected response data serving. In the client-side application, audit any cases where cached responses appear mismatched to the request that prompted them. Network-level detection is difficult without deep inspection of query parameters and hashes.
Why prioritize this
Although the CVSS score is MEDIUM (6.1), the vulnerability should be prioritized if your application (1) uses Angular SSR, (2) handles sensitive user data via HTTP endpoints, (3) allows any user-controlled query parameters, or (4) is publicly accessible. The attack surface is broad because victims need only click a link, and hash collisions are precomputable. Applications with lower-sensitivity data or those not using SSR can deprioritize.
Risk score, explained
The CVSS 3.1 score of 6.1 reflects low attack complexity (AC:L) and no special privileges required (PR:N), balanced against user interaction (UI:R) and limited scope change (S:C) with only partial confidentiality and integrity impact (C:L/I:L) and no availability loss. The score appropriately captures the practical threat: while exploitation is easy and requires only a phishing vector, the impact is confined to cached response poisoning rather than system compromise or mass data exposure.
Frequently asked questions
Do I need to patch if my Angular app doesn't use server-side rendering?
No. The vulnerability is specific to Angular's SSR feature and HttpTransferCache. Client-side-only applications are not affected.
Can this vulnerability be exploited without social engineering?
The attack requires a victim to visit a specially crafted URL, which typically means social engineering, phishing, or placing the link on a trusted site. There is no automatic exploitation vector.
What is the actual impact if an attacker collides my login endpoint with a search query?
The user's search request response would overwrite the login response in the cache. If the search is less sensitive, the victim might see search results instead of login data. More critically, if an attacker controls what data is in the colliding response, they could inject malicious content or steal cached user data.
Is there a workaround if I can't patch immediately?
Temporarily disable HttpTransferCache for sensitive endpoints using Angular's configuration options, but this will impact performance since requests won't be cached across hydration. Prioritize patching as soon as possible.
This analysis is provided for informational purposes. Patch version numbers, KEV status, and CVSS scores are sourced from official CVE and vendor data. Always verify vendor advisories before patching. SEC.co assumes no liability for misapplication of guidance or incomplete patching. Organizations must assess their specific Angular configurations and data sensitivity to determine true risk. Source: NVD (public-domain), retrieved 2026-07-28. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-10814MEDIUMWeak Hash Implementation in Milvus Grantee ID Handler
- CVE-2026-11479MEDIUMWeak Hash in grepai Qdrant Backend – Detection & Patch Guidance
- CVE-2026-46538MEDIUMMicrosoft UFO Cross-Device Task Result Injection (CVSS 5.9)
- CVE-2026-46539MEDIUMNimiq BlockInclusionProof Logic Flaw Enables Forged Block Headers
- CVE-2026-47155MEDIUMvLLM Revision Pinning Supply-Chain Integrity Bypass (CVSS 6.5)
- CVE-2026-47696MEDIUMWWBN AVideo AuthorizeNet Payment Bypass—Wallet Fraud Vulnerability
- CVE-2026-48096MEDIUMOpenFGA Cache Collision Vulnerability: Impact, Patching & Detection
- CVE-2026-48783MEDIUMPostiz Unauthenticated Token Validation Flaw in /public/modify-subscription