CVE-2025-59052 (GCVE-0-2025-59052)
Vulnerability from cvelistv5
Published
2025-09-10 20:13
Modified
2025-09-10 20:25
Severity ?
VLAI Severity ?
EPSS score ?
CWE
- CWE-362 - Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
Summary
Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Angular uses a DI container (the "platform injector") to hold request-specific state during server-side rendering. For historical reasons, the container was stored as a JavaScript module-scoped global variable. When multiple requests are processed concurrently, they could inadvertently share or overwrite the global injector state. In practical terms, this can lead to one request responding with data meant for a completely different request, leaking data or tokens included on the rendered page or in response headers. As long as an attacker had network access to send any traffic that received a rendered response, they may have been able to send a large number of requests and then inspect the responses for information leaks. The APIs `bootstrapApplication`, `getPlatform`, and `destroyPlatform` were vulnerable and required SSR-only breaking changes.
The issue has been patched in all active release lines as well as in the v21 prerelease. Patched packages include `@angular/platform-server` 21.0.0-next.3, 20.3.0, 19.2.15, and 18.2.14 and `@angular/ssr` 21.0.0-next.3, 20.3.0, 19.2.16, and 18.2.21. Several workarounds are available. Disable SSR via Server Routes or builder options, remove any asynchronous behavior from custom `bootstrap` functions, remove uses of `getPlatform()` in application code, and/or ensure that the server build defines `ngJitMode` as false.
References
Impacted products
Vendor | Product | Version | ||
---|---|---|---|---|
angular | angular |
Version: @angular/platform-server >= 16.0.0-next.0, < 18.2.14 Version: @angular/platform-server >= 20.0.0-next.0, < 20.3.0 Version: @angular/platform-server >= 19.0.0-next.0, < 19.2.15 Version: @angular/platform-server >= 21.0.0-next.0, < 21.0.0-next.3 Version: @angular/ssr >= 17.0.0-next.0, < 18.2.21 Version: @angular/ssr >= 19.0.0-next.0, < 19.2.16 Version: @angular/ssr >= 20.0.0-next.0, < 20.3.0 Version: @angular/ssr >= 21.0.0-next.0, < 21.0.0-next.3 Version: @nguniversal/common >= 16.0.0-next.0, <= 16.2.0 |
{ "containers": { "adp": [ { "metrics": [ { "other": { "content": { "id": "CVE-2025-59052", "options": [ { "Exploitation": "none" }, { "Automatable": "yes" }, { "Technical Impact": "partial" } ], "role": "CISA Coordinator", "timestamp": "2025-09-10T20:24:52.001731Z", "version": "2.0.3" }, "type": "ssvc" } } ], "providerMetadata": { "dateUpdated": "2025-09-10T20:25:32.147Z", "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP" }, "title": "CISA ADP Vulnrichment" } ], "cna": { "affected": [ { "product": "angular", "vendor": "angular", "versions": [ { "status": "affected", "version": "@angular/platform-server \u003e= 16.0.0-next.0, \u003c 18.2.14" }, { "status": "affected", "version": "@angular/platform-server \u003e= 20.0.0-next.0, \u003c 20.3.0" }, { "status": "affected", "version": "@angular/platform-server \u003e= 19.0.0-next.0, \u003c 19.2.15" }, { "status": "affected", "version": "@angular/platform-server \u003e= 21.0.0-next.0, \u003c 21.0.0-next.3" }, { "status": "affected", "version": "@angular/ssr \u003e= 17.0.0-next.0, \u003c 18.2.21" }, { "status": "affected", "version": "@angular/ssr \u003e= 19.0.0-next.0, \u003c 19.2.16" }, { "status": "affected", "version": "@angular/ssr \u003e= 20.0.0-next.0, \u003c 20.3.0" }, { "status": "affected", "version": "@angular/ssr \u003e= 21.0.0-next.0, \u003c 21.0.0-next.3" }, { "status": "affected", "version": "@nguniversal/common \u003e= 16.0.0-next.0, \u003c= 16.2.0" } ] } ], "descriptions": [ { "lang": "en", "value": "Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Angular uses a DI container (the \"platform injector\") to hold request-specific state during server-side rendering. For historical reasons, the container was stored as a JavaScript module-scoped global variable. When multiple requests are processed concurrently, they could inadvertently share or overwrite the global injector state. In practical terms, this can lead to one request responding with data meant for a completely different request, leaking data or tokens included on the rendered page or in response headers. As long as an attacker had network access to send any traffic that received a rendered response, they may have been able to send a large number of requests and then inspect the responses for information leaks. The APIs `bootstrapApplication`, `getPlatform`, and `destroyPlatform` were vulnerable and required SSR-only breaking changes.\nThe issue has been patched in all active release lines as well as in the v21 prerelease. Patched packages include `@angular/platform-server` 21.0.0-next.3, 20.3.0, 19.2.15, and 18.2.14 and `@angular/ssr` 21.0.0-next.3, 20.3.0, 19.2.16, and 18.2.21. Several workarounds are available. Disable SSR via Server Routes or builder options, remove any asynchronous behavior from custom `bootstrap` functions, remove uses of `getPlatform()` in application code, and/or ensure that the server build defines `ngJitMode` as false." } ], "metrics": [ { "cvssV4_0": { "attackComplexity": "LOW", "attackRequirements": "NONE", "attackVector": "NETWORK", "baseScore": 7.1, "baseSeverity": "HIGH", "privilegesRequired": "NONE", "subAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "userInteraction": "PASSIVE", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N", "version": "4.0", "vulnAvailabilityImpact": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "LOW" } } ], "problemTypes": [ { "descriptions": [ { "cweId": "CWE-362", "description": "CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization (\u0027Race Condition\u0027)", "lang": "en", "type": "CWE" } ] } ], "providerMetadata": { "dateUpdated": "2025-09-10T20:13:56.965Z", "orgId": "a0819718-46f1-4df5-94e2-005712e83aaa", "shortName": "GitHub_M" }, "references": [ { "name": "https://github.com/angular/angular/security/advisories/GHSA-68x2-mx4q-78m7", "tags": [ "x_refsource_CONFIRM" ], "url": "https://github.com/angular/angular/security/advisories/GHSA-68x2-mx4q-78m7" }, { "name": "https://github.com/angular/angular-cli/pull/31108", "tags": [ "x_refsource_MISC" ], "url": "https://github.com/angular/angular-cli/pull/31108" }, { "name": "https://github.com/angular/angular/pull/63562", "tags": [ "x_refsource_MISC" ], "url": "https://github.com/angular/angular/pull/63562" } ], "source": { "advisory": "GHSA-68x2-mx4q-78m7", "discovery": "UNKNOWN" }, "title": "Angular SSR: Global Platform Injector Race Condition Leads to Cross-Request Data Leakage" } }, "cveMetadata": { "assignerOrgId": "a0819718-46f1-4df5-94e2-005712e83aaa", "assignerShortName": "GitHub_M", "cveId": "CVE-2025-59052", "datePublished": "2025-09-10T20:13:56.965Z", "dateReserved": "2025-09-08T16:19:26.172Z", "dateUpdated": "2025-09-10T20:25:32.147Z", "state": "PUBLISHED" }, "dataType": "CVE_RECORD", "dataVersion": "5.1", "vulnerability-lookup:meta": { "nvd": "{\"cve\":{\"id\":\"CVE-2025-59052\",\"sourceIdentifier\":\"security-advisories@github.com\",\"published\":\"2025-09-10T21:15:37.283\",\"lastModified\":\"2025-09-11T17:14:10.147\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Angular uses a DI container (the \\\"platform injector\\\") to hold request-specific state during server-side rendering. For historical reasons, the container was stored as a JavaScript module-scoped global variable. When multiple requests are processed concurrently, they could inadvertently share or overwrite the global injector state. In practical terms, this can lead to one request responding with data meant for a completely different request, leaking data or tokens included on the rendered page or in response headers. As long as an attacker had network access to send any traffic that received a rendered response, they may have been able to send a large number of requests and then inspect the responses for information leaks. The APIs `bootstrapApplication`, `getPlatform`, and `destroyPlatform` were vulnerable and required SSR-only breaking changes.\\nThe issue has been patched in all active release lines as well as in the v21 prerelease. Patched packages include `@angular/platform-server` 21.0.0-next.3, 20.3.0, 19.2.15, and 18.2.14 and `@angular/ssr` 21.0.0-next.3, 20.3.0, 19.2.16, and 18.2.21. Several workarounds are available. Disable SSR via Server Routes or builder options, remove any asynchronous behavior from custom `bootstrap` functions, remove uses of `getPlatform()` in application code, and/or ensure that the server build defines `ngJitMode` as false.\"}],\"metrics\":{\"cvssMetricV40\":[{\"source\":\"security-advisories@github.com\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"4.0\",\"vectorString\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/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\",\"baseScore\":7.1,\"baseSeverity\":\"HIGH\",\"attackVector\":\"NETWORK\",\"attackComplexity\":\"LOW\",\"attackRequirements\":\"NONE\",\"privilegesRequired\":\"NONE\",\"userInteraction\":\"PASSIVE\",\"vulnConfidentialityImpact\":\"HIGH\",\"vulnIntegrityImpact\":\"LOW\",\"vulnAvailabilityImpact\":\"NONE\",\"subConfidentialityImpact\":\"NONE\",\"subIntegrityImpact\":\"NONE\",\"subAvailabilityImpact\":\"NONE\",\"exploitMaturity\":\"NOT_DEFINED\",\"confidentialityRequirement\":\"NOT_DEFINED\",\"integrityRequirement\":\"NOT_DEFINED\",\"availabilityRequirement\":\"NOT_DEFINED\",\"modifiedAttackVector\":\"NOT_DEFINED\",\"modifiedAttackComplexity\":\"NOT_DEFINED\",\"modifiedAttackRequirements\":\"NOT_DEFINED\",\"modifiedPrivilegesRequired\":\"NOT_DEFINED\",\"modifiedUserInteraction\":\"NOT_DEFINED\",\"modifiedVulnConfidentialityImpact\":\"NOT_DEFINED\",\"modifiedVulnIntegrityImpact\":\"NOT_DEFINED\",\"modifiedVulnAvailabilityImpact\":\"NOT_DEFINED\",\"modifiedSubConfidentialityImpact\":\"NOT_DEFINED\",\"modifiedSubIntegrityImpact\":\"NOT_DEFINED\",\"modifiedSubAvailabilityImpact\":\"NOT_DEFINED\",\"Safety\":\"NOT_DEFINED\",\"Automatable\":\"NOT_DEFINED\",\"Recovery\":\"NOT_DEFINED\",\"valueDensity\":\"NOT_DEFINED\",\"vulnerabilityResponseEffort\":\"NOT_DEFINED\",\"providerUrgency\":\"NOT_DEFINED\"}}]},\"weaknesses\":[{\"source\":\"security-advisories@github.com\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"CWE-362\"}]}],\"references\":[{\"url\":\"https://github.com/angular/angular-cli/pull/31108\",\"source\":\"security-advisories@github.com\"},{\"url\":\"https://github.com/angular/angular/pull/63562\",\"source\":\"security-advisories@github.com\"},{\"url\":\"https://github.com/angular/angular/security/advisories/GHSA-68x2-mx4q-78m7\",\"source\":\"security-advisories@github.com\"}]}}", "vulnrichment": { "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2025-59052\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"yes\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2025-09-10T20:24:52.001731Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2025-09-10T20:24:58.361Z\"}}], \"cna\": {\"title\": \"Angular SSR: Global Platform Injector Race Condition Leads to Cross-Request Data Leakage\", \"source\": {\"advisory\": \"GHSA-68x2-mx4q-78m7\", \"discovery\": \"UNKNOWN\"}, \"metrics\": [{\"cvssV4_0\": {\"version\": \"4.0\", \"baseScore\": 7.1, \"attackVector\": \"NETWORK\", \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N\", \"userInteraction\": \"PASSIVE\", \"attackComplexity\": \"LOW\", \"attackRequirements\": \"NONE\", \"privilegesRequired\": \"NONE\", \"subIntegrityImpact\": \"NONE\", \"vulnIntegrityImpact\": \"LOW\", \"subAvailabilityImpact\": \"NONE\", \"vulnAvailabilityImpact\": \"NONE\", \"subConfidentialityImpact\": \"NONE\", \"vulnConfidentialityImpact\": \"HIGH\"}}], \"affected\": [{\"vendor\": \"angular\", \"product\": \"angular\", \"versions\": [{\"status\": \"affected\", \"version\": \"@angular/platform-server \u003e= 16.0.0-next.0, \u003c 18.2.14\"}, {\"status\": \"affected\", \"version\": \"@angular/platform-server \u003e= 20.0.0-next.0, \u003c 20.3.0\"}, {\"status\": \"affected\", \"version\": \"@angular/platform-server \u003e= 19.0.0-next.0, \u003c 19.2.15\"}, {\"status\": \"affected\", \"version\": \"@angular/platform-server \u003e= 21.0.0-next.0, \u003c 21.0.0-next.3\"}, {\"status\": \"affected\", \"version\": \"@angular/ssr \u003e= 17.0.0-next.0, \u003c 18.2.21\"}, {\"status\": \"affected\", \"version\": \"@angular/ssr \u003e= 19.0.0-next.0, \u003c 19.2.16\"}, {\"status\": \"affected\", \"version\": \"@angular/ssr \u003e= 20.0.0-next.0, \u003c 20.3.0\"}, {\"status\": \"affected\", \"version\": \"@angular/ssr \u003e= 21.0.0-next.0, \u003c 21.0.0-next.3\"}, {\"status\": \"affected\", \"version\": \"@nguniversal/common \u003e= 16.0.0-next.0, \u003c= 16.2.0\"}]}], \"references\": [{\"url\": \"https://github.com/angular/angular/security/advisories/GHSA-68x2-mx4q-78m7\", \"name\": \"https://github.com/angular/angular/security/advisories/GHSA-68x2-mx4q-78m7\", \"tags\": [\"x_refsource_CONFIRM\"]}, {\"url\": \"https://github.com/angular/angular-cli/pull/31108\", \"name\": \"https://github.com/angular/angular-cli/pull/31108\", \"tags\": [\"x_refsource_MISC\"]}, {\"url\": \"https://github.com/angular/angular/pull/63562\", \"name\": \"https://github.com/angular/angular/pull/63562\", \"tags\": [\"x_refsource_MISC\"]}], \"descriptions\": [{\"lang\": \"en\", \"value\": \"Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Angular uses a DI container (the \\\"platform injector\\\") to hold request-specific state during server-side rendering. For historical reasons, the container was stored as a JavaScript module-scoped global variable. When multiple requests are processed concurrently, they could inadvertently share or overwrite the global injector state. In practical terms, this can lead to one request responding with data meant for a completely different request, leaking data or tokens included on the rendered page or in response headers. As long as an attacker had network access to send any traffic that received a rendered response, they may have been able to send a large number of requests and then inspect the responses for information leaks. The APIs `bootstrapApplication`, `getPlatform`, and `destroyPlatform` were vulnerable and required SSR-only breaking changes.\\nThe issue has been patched in all active release lines as well as in the v21 prerelease. Patched packages include `@angular/platform-server` 21.0.0-next.3, 20.3.0, 19.2.15, and 18.2.14 and `@angular/ssr` 21.0.0-next.3, 20.3.0, 19.2.16, and 18.2.21. Several workarounds are available. Disable SSR via Server Routes or builder options, remove any asynchronous behavior from custom `bootstrap` functions, remove uses of `getPlatform()` in application code, and/or ensure that the server build defines `ngJitMode` as false.\"}], \"problemTypes\": [{\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-362\", \"description\": \"CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization (\u0027Race Condition\u0027)\"}]}], \"providerMetadata\": {\"orgId\": \"a0819718-46f1-4df5-94e2-005712e83aaa\", \"shortName\": \"GitHub_M\", \"dateUpdated\": \"2025-09-10T20:13:56.965Z\"}}}", "cveMetadata": "{\"cveId\": \"CVE-2025-59052\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2025-09-10T20:25:32.147Z\", \"dateReserved\": \"2025-09-08T16:19:26.172Z\", \"assignerOrgId\": \"a0819718-46f1-4df5-94e2-005712e83aaa\", \"datePublished\": \"2025-09-10T20:13:56.965Z\", \"assignerShortName\": \"GitHub_M\"}", "dataType": "CVE_RECORD", "dataVersion": "5.1" } } }
Loading…
Loading…
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…