The GitHub Actions job "Required Checks" on 
texera.git/gh-readonly-queue/main/pr-8492-577bc408d66802f9ad8905458728ed1526068ca5
 has failed.
Run started by GitHub user xuang7 (triggered by xuang7).

Head commit for run:
02efe7ac037c037eeca1922cd1e944b89f274816 / Mend Renovate <[email protected]>
fix(deps, frontend): update dependency @angular/common to v21.2.20 (#8492)

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@angular/common](https://redirect.github.com/angular/angular)
([source](https://redirect.github.com/angular/angular/tree/HEAD/packages/common))
| [`21.2.19` →
`21.2.20`](https://renovatebot.com/diffs/npm/@angular%2fcommon/21.2.19/21.2.20)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@angular%2fcommon/21.2.20?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@angular%2fcommon/21.2.19/21.2.20?slim=true)
|

---

### Angular: Information Leak via `HttpTransferCache` Bypass When Using
`withRequestsMadeViaParent`
[CVE-2026-88059](https://nvd.nist.gov/vuln/detail/CVE-2026-88059) /
[GHSA-p297-fm68-3q8c](https://redirect.github.com/advisories/GHSA-p297-fm68-3q8c)

<details>
<summary>More information</summary>

#### Details
A security bypass vulnerability was discovered in `@angular/common` when
Server-Side Rendering (SSR) and hydration are enabled in applications
using a hierarchical `HttpClient` configuration with
`withRequestsMadeViaParent()`.

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` (serialized as JSON in
`<script id="ng-state">`). Following the remediation of
[CVE-2026-50170](https://redirect.github.com/angular/angular/security/advisories/GHSA-q6f4-qqrg-jv6x),
`HttpTransferCache` automatically skips caching requests that contain
authentication headers or credentials (`Authorization`, `Cookie`,
`withCredentials`, etc.).

However, when a child `HttpClient` delegates to a parent client via
`withRequestsMadeViaParent()`, the child's `TransferCache` interceptor
evaluates whether the request is eligible for caching **before**
delegating to the parent client's interceptor chain.

If an outgoing request originates as anonymous from the child client,
the child `TransferCache` marks the request as cacheable. When the
request reaches a parent interceptor that injects sensitive
authentication credentials (such as an `Authorization` header or API
token), the parent `TransferCache` correctly skips caching the
authenticated request. However, when the backend returns the private,
authenticated response, the child `TransferCache` still stores the
response in `TransferState` based on its initial pre-delegation
evaluation.

##### Impact

Successful exploitation allows sensitive, user-specific information
belonging to an authenticated user to be leaked to unauthenticated or
unauthorized users. This occurs when:

1. During SSR, a child `HttpClient` initiates an unauthenticated request
that is subsequently authenticated by a parent interceptor.
2. The authenticated response body is cached into the SSR-rendered HTML
page (`TransferState`).
3. The rendered HTML page is stored by a shared caching layer (e.g.,
CDN, edge cache, or reverse proxy) or served across user sessions.
4. Subsequent visitors requesting the same page receive the cached HTML
containing the previous user's private data.

##### Attack Preconditions & Vulnerable Configurations

An application is affected only if **all** of the following conditions
are met:

* **SSR and Hydration Enabled:** The application uses Server-Side
Rendering with hydration enabled (e.g., via `provideClientHydration()`).
* **Hierarchical `HttpClient` with Delegation:** The application
configures a child `HttpClient` using `withRequestsMadeViaParent()`.
* **Parent-Level Authentication Injection:** Authentication credentials
(such as `Authorization` headers, session cookies, or custom API tokens
filtered via `withHttpTransferCacheOptions`) are attached by an
interceptor in the **parent** injector chain rather than on the initial
child request.
* **Shared HTML Caching:** The SSR HTML responses are cached by a shared
caching layer (CDN, reverse proxy, or application-level HTML cache).

##### Vulnerable Code Pattern Example

```ts
// Parent Injector / Application Config
export const appConfig: ApplicationConfig = {
  providers: [
    provideHttpClient(
      // Parent interceptor attaches sensitive Authorization header
      withInterceptors([
        (req, next) => next(req.clone({ setHeaders: { Authorization: `Bearer 
${getToken()}` } }))
      ])
    ),
  ],
};

// Child Injector / Feature or Component Config
const childClient = createEnvironmentInjector(
  [
    // Child delegates to parent; TransferCache evaluates req BEFORE parent 
auth interceptor runs
    provideHttpClient(withRequestsMadeViaParent()),
  ],
  parentInjector
).get(HttpClient);

// Request originates without auth headers -> marked cacheable by child 
TransferCache
childClient.get('/api/user/profile').subscribe();
```

##### Patches

The issue is resolved by updating `@angular/common` to run root
interceptors in the terminal request chain so that delegated clients
leave inherited root interceptors to the parent chain, preventing
duplicate execution and ensuring `HttpTransferCache` evaluates cache
eligibility after parent request interceptors run.

* `22.1.1`
* `21.2.20`
* `20.3.28`

##### Workarounds & Mitigations

For applications that cannot immediately upgrade to a patched version,
use one of the following mitigations:

1. **Attach Credentials Before or Within the Child Client:** Ensure
authentication headers (e.g., `Authorization`) are attached directly
when constructing the request or via an interceptor configured directly
on the child `HttpClient`, rather than relying solely on parent
interceptors.
2. **Apply Explicit Cache Filters on the Child Client:** Configure
`withHttpTransferCacheOptions` with a filter on the child client that
explicitly excludes endpoints returning user-specific or sensitive data:
   ```ts
   provideClientHydration(
     withHttpTransferCacheOptions({
       filter: (req) => !req.url.includes('/api/private/'),
     })
   )
   ```
3. **Disable HTTP Transfer Cache for Sensitive Routes:** If specific SSR
routes handle user-authenticated data, disable transfer caching for
those requests or ensure the SSR response sets `Cache-Control: no-store`
/ `private` headers at your edge/CDN layer so personalized HTML is never
shared.

#### Severity
- CVSS Score: 4.0 / 10 (Medium)
- Vector String: `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N`

#### References
-
[https://github.com/angular/angular/security/advisories/GHSA-p297-fm68-3q8c](https://redirect.github.com/angular/angular/security/advisories/GHSA-p297-fm68-3q8c)
-
[https://github.com/angular/angular/issues/69777](https://redirect.github.com/angular/angular/issues/69777)
-
[https://github.com/angular/angular/pull/69778](https://redirect.github.com/angular/angular/pull/69778)
-
[https://github.com/angular/angular/commit/c45028e44f5f3c1e0006eaccf86642deca51b2af](https://redirect.github.com/angular/angular/commit/c45028e44f5f3c1e0006eaccf86642deca51b2af)
-
[https://github.com/angular/angular/commit/caf616670fd20d528aa69e0131cc17d60f0cc27d](https://redirect.github.com/angular/angular/commit/caf616670fd20d528aa69e0131cc17d60f0cc27d)
-
[https://github.com/angular/angular/commit/e4c416c20a1cb222ce73d29c035452b257380c56](https://redirect.github.com/angular/angular/commit/e4c416c20a1cb222ce73d29c035452b257380c56)
-
[https://github.com/angular/angular/releases/tag/v20.3.28](https://redirect.github.com/angular/angular/releases/tag/v20.3.28)
-
[https://github.com/angular/angular/releases/tag/v21.2.20](https://redirect.github.com/angular/angular/releases/tag/v21.2.20)
-
[https://github.com/angular/angular/releases/tag/v22.1.1](https://redirect.github.com/angular/angular/releases/tag/v22.1.1)
-
[https://github.com/advisories/GHSA-p297-fm68-3q8c](https://redirect.github.com/advisories/GHSA-p297-fm68-3q8c)

This data is provided by the [GitHub Advisory
Database](https://redirect.github.com/advisories/GHSA-p297-fm68-3q8c)
([CC-BY
4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)).
</details>

---

### Angular: Information Leak via `HttpTransferCache` Bypass When Using
`withRequestsMadeViaParent`
[CVE-2026-88059](https://nvd.nist.gov/vuln/detail/CVE-2026-88059) /
[GHSA-p297-fm68-3q8c](https://redirect.github.com/advisories/GHSA-p297-fm68-3q8c)

<details>
<summary>More information</summary>

#### Details
A security bypass vulnerability was discovered in `@angular/common` when
Server-Side Rendering (SSR) and hydration are enabled in applications
using a hierarchical `HttpClient` configuration with
`withRequestsMadeViaParent()`.

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` (serialized as JSON in
`<script id="ng-state">`). Following the remediation of
[CVE-2026-50170](https://redirect.github.com/angular/angular/security/advisories/GHSA-q6f4-qqrg-jv6x),
`HttpTransferCache` automatically skips caching requests that contain
authentication headers or credentials (`Authorization`, `Cookie`,
`withCredentials`, etc.).

However, when a child `HttpClient` delegates to a parent client via
`withRequestsMadeViaParent()`, the child's `TransferCache` interceptor
evaluates whether the request is eligible for caching **before**
delegating to the parent client's interceptor chain.

If an outgoing request originates as anonymous from the child client,
the child `TransferCache` marks the request as cacheable. When the
request reaches a parent interceptor that injects sensitive
authentication credentials (such as an `Authorization` header or API
token), the parent `TransferCache` correctly skips caching the
authenticated request. However, when the backend returns the private,
authenticated response, the child `TransferCache` still stores the
response in `TransferState` based on its initial pre-delegation
evaluation.

##### Impact

Successful exploitation allows sensitive, user-specific information
belonging to an authenticated user to be leaked to unauthenticated or
unauthorized users. This occurs when:

1. During SSR, a child `HttpClient` initiates an unauthenticated request
that is subsequently authenticated by a parent interceptor.
2. The authenticated response body is cached into the SSR-rendered HTML
page (`TransferState`).
3. The rendered HTML page is stored by a shared caching layer (e.g.,
CDN, edge cache, or reverse proxy) or served across user sessions.
4. Subsequent visitors requesting the same page receive the cached HTML
containing the previous user's private data.

##### Attack Preconditions & Vulnerable Configurations

An application is affected only if **all** of the following conditions
are met:

* **SSR and Hydration Enabled:** The application uses Server-Side
Rendering with hydration enabled (e.g., via `provideClientHydration()`).
* **Hierarchical `HttpClient` with Delegation:** The application
configures a child `HttpClient` using `withRequestsMadeViaParent()`.
* **Parent-Level Authentication Injection:** Authentication credentials
(such as `Authorization` headers, session cookies, or custom API tokens
filtered via `withHttpTransferCacheOptions`) are attached by an
interceptor in the **parent** injector chain rather than on the initial
child request.
* **Shared HTML Caching:** The SSR HTML responses are cached by a shared
caching layer (CDN, reverse proxy, or application-level HTML cache).

##### Vulnerable Code Pattern Example

```ts
// Parent Injector / Application Config
export const appConfig: ApplicationConfig = {
  providers: [
    provideHttpClient(
      // Parent interceptor attaches sensitive Authorization header
      withInterceptors([
        (req, next) => next(req.clone({ setHeaders: { Authorization: `Bearer 
${getToken()}` } }))
      ])
    ),
  ],
};

// Child Injector / Feature or Component Config
const childClient = createEnvironmentInjector(
  [
    // Child delegates to parent; TransferCache evaluates req BEFORE parent 
auth interceptor runs
    provideHttpClient(withRequestsMadeViaParent()),
  ],
  parentInjector
).get(HttpClient);

// Request originates without auth headers -> marked cacheable by child 
TransferCache
childClient.get('/api/user/profile').subscribe();
```

##### Patches

The issue is resolved by updating `@angular/common` to run root
interceptors in the terminal request chain so that delegated clients
leave inherited root interceptors to the parent chain, preventing
duplicate execution and ensuring `HttpTransferCache` evaluates cache
eligibility after parent request interceptors run.

* `22.1.1`
* `21.2.20`
* `20.3.28`

##### Workarounds & Mitigations

For applications that cannot immediately upgrade to a patched version,
use one of the following mitigations:

1. **Attach Credentials Before or Within the Child Client:** Ensure
authentication headers (e.g., `Authorization`) are attached directly
when constructing the request or via an interceptor configured directly
on the child `HttpClient`, rather than relying solely on parent
interceptors.
2. **Apply Explicit Cache Filters on the Child Client:** Configure
`withHttpTransferCacheOptions` with a filter on the child client that
explicitly excludes endpoints returning user-specific or sensitive data:
   ```ts
   provideClientHydration(
     withHttpTransferCacheOptions({
       filter: (req) => !req.url.includes('/api/private/'),
     })
   )
   ```
3. **Disable HTTP Transfer Cache for Sensitive Routes:** If specific SSR
routes handle user-authenticated data, disable transfer caching for
those requests or ensure the SSR response sets `Cache-Control: no-store`
/ `private` headers at your edge/CDN layer so personalized HTML is never
shared.

#### Severity
- CVSS Score: 4.0 / 10 (Medium)
- Vector String: `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N`

#### References
-
[https://github.com/angular/angular/security/advisories/GHSA-p297-fm68-3q8c](https://redirect.github.com/angular/angular/security/advisories/GHSA-p297-fm68-3q8c)
-
[https://github.com/angular/angular/issues/69777](https://redirect.github.com/angular/angular/issues/69777)
-
[https://github.com/angular/angular/pull/69778](https://redirect.github.com/angular/angular/pull/69778)
-
[https://github.com/angular/angular/commit/c45028e44f5f3c1e0006eaccf86642deca51b2af](https://redirect.github.com/angular/angular/commit/c45028e44f5f3c1e0006eaccf86642deca51b2af)
-
[https://github.com/angular/angular/commit/caf616670fd20d528aa69e0131cc17d60f0cc27d](https://redirect.github.com/angular/angular/commit/caf616670fd20d528aa69e0131cc17d60f0cc27d)
-
[https://github.com/angular/angular/commit/e4c416c20a1cb222ce73d29c035452b257380c56](https://redirect.github.com/angular/angular/commit/e4c416c20a1cb222ce73d29c035452b257380c56)
-
[https://github.com/angular/angular](https://redirect.github.com/angular/angular)
-
[https://github.com/angular/angular/releases/tag/v20.3.28](https://redirect.github.com/angular/angular/releases/tag/v20.3.28)
-
[https://github.com/angular/angular/releases/tag/v21.2.20](https://redirect.github.com/angular/angular/releases/tag/v21.2.20)
-
[https://github.com/angular/angular/releases/tag/v22.1.1](https://redirect.github.com/angular/angular/releases/tag/v22.1.1)

This data is provided by
[OSV](https://osv.dev/vulnerability/GHSA-p297-fm68-3q8c) and the [GitHub
Advisory Database](https://redirect.github.com/github/advisory-database)
([CC-BY
4.0](https://redirect.github.com/github/advisory-database/blob/main/LICENSE.md)).
</details>

---

### Release Notes

<details>
<summary>angular/angular (@&#8203;angular/common)</summary>

###
[`v21.2.20`](https://redirect.github.com/angular/angular/blob/HEAD/CHANGELOG.md#21220-2026-08-12)

[Compare
Source](https://redirect.github.com/angular/angular/compare/v21.2.19...v21.2.20)

##### core

| Commit | Type | Description |
|
------------------------------------------------------------------------------------------------
| ---- | ---------------------------------------- |
|
[6afe6fa781](https://redirect.github.com/angular/angular/commit/6afe6fa781c2f0931f0aedd729b9884a8fe212ee)
| fix | sanitize host bindings on concrete hosts |

##### http

| Commit | Type | Description |
|
------------------------------------------------------------------------------------------------
| ---- | --------------------------------------------------- |
|
[fec5977df4](https://redirect.github.com/angular/angular/commit/fec5977df4dda3a10d5ce2923e3e06d86ba11ee7)
| fix | match header values exactly when deleting |
|
[e33d69a71c](https://redirect.github.com/angular/angular/commit/e33d69a71c5beb8fe5785b53fd6b37658334e8e0)
| fix | preserve immutability of materialized clones |
|
[caf616670f](https://redirect.github.com/angular/angular/commit/caf616670fd20d528aa69e0131cc17d60f0cc27d)
| fix | run root interceptors in the terminal request chain |

<!-- CHANGELOG SPLIT MARKER -->

</details>

---

### Configuration

📅 **Schedule**: (in timezone Etc/UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/apache/texera).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC43OS4xIiwidXBkYXRlZEluVmVyIjoiNDQuNzkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicmVsZWFzZS92MS4yIiwic2VjdXJpdHkiXX0=-->

---------

Co-authored-by: mengw15 <[email protected]>
Co-authored-by: Xuan Gu <[email protected]>

Report URL: https://github.com/apache/texera/actions/runs/35951167216

With regards,
GitHub Actions via GitBox

Reply via email to