Bollettino 2026/0255

[TLP:CLEAR]

bollettino di sicurezza 2026/0255

Aggiornamenti Angular

27-10-2026

angular, server-side-rendering, denial-of-service, open-redirect, angular-router, devtools

Aggiornamenti Angular

descrizione

Angular ha pubblicato sei avvisi di sicurezza relativi ad altrettante vulnerabilità dei suoi prodotti.

Le 6 vulnerabilità analizzate riguardano i componenti di server-side rendering (SSR), router e DevTools di Angular e si articolano nelle seguenti tipologie:

- Denial of service per consumo incontrollato di risorse: quattro vulnerabilità (CVE-2026-101895, CVE-2026-101896, CVE-2026-111751, CVE-2026-111752) nel parser SSR e nel router, sfruttabili tramite input HTML/URL malformati che causano loop infiniti o allocazione eccessiva di heap/CPU nel worker Node.js.
- Denial of service per confused deputy / validazione dell'origine assente: una vulnerabilità (CVE-2026-101897) in Angular DevTools, in cui un messaggio non verificato diretto all'extension worker può bloccare l'esecuzione JavaScript in un tab target.
- Open redirect: una vulnerabilità (CVE-2026-111754) in @angular/platform-server SSR, in cui la normalizzazione URL WHATWG può produrre un header Location che punta a un dominio esterno arbitrario.

2 CVE hanno priorità operativa critical.

Al momento della pubblicazione di questo bollettino, non risultano CVE nel catalogo CISA KEV né exploit in the wild. L'advisory del vendor relativo a CVE-2026-101895 include una dimostrazione di riproduzione (proof of concept).

note

Vettori di attacco e condizioni di sfruttamento

Tutte le CVE sono sfruttabili via rete (AV:N), senza privilegi richiesti (PR:N).

CVE-2026-101895, CVE-2026-101897 e CVE-2026-111754 non richiedono alcuna condizione aggiuntiva (AT:N). CVE-2026-101895 e CVE-2026-111754 hanno complessità di attacco bassa (AC:L); CVE-2026-101895 non richiede interazione dell'utente (UI:N), mentre CVE-2026-111754 la richiede (UI:A).

CVE-2026-101897 è l'unica con complessità di attacco elevata (AC:H) e richiede un'interazione parziale dell'utente (UI:P): l'attaccante deve ottenere un tabId valido della vittima prima di poter indirizzare l'extension worker.

CVE-2026-101896, CVE-2026-111751 e CVE-2026-111752 condividono AV:N/AC:L/AT:P/PR:N/UI:N: lo sfruttamento richiede una condizione specifica, diversa per ciascuna.

Per CVE-2026-101896 il router Angular deve analizzare direttamente l'URL della richiesta e i proxy upstream devono consentire il passaggio di semicoloni e segmenti di percorso multipli.

Per CVE-2026-111751 i link RouterLink devono usare queryParamsHandling con valore 'merge' o 'preserve', un reverse proxy o load balancer deve inoltrare query string lunghe e più richieste devono essere elaborate in contemporanea nello stesso worker.

Per CVE-2026-111752 deve esistere almeno una route con path vuoto o con outlet con nome, e i worker devono avere un heap ridotto rispetto al carico di richieste.

Analisi delle CVE con priorità operativa critical

CVE-2026-101895: il parser HTML di @angular/platform-server entra in un loop sincrono infinito quando riceve un DOCTYPE incompleto che termina con whitespace; il ciclo si verifica perché after_doctype_name_state emette i token doctype ed EOF senza avanzare il puntatore nextchar, permettendo a un attaccante remoto non autenticato di saturare il worker Node.js SSR tramite binding innerHTML o percorsi analoghi, esaurendo CPU e bloccando l'event loop.

CVE-2026-101896: il parser URL di @angular/router memorizza i nomi numerici dei parametri matrix e degli outlet come proprietà di oggetti JavaScript vuoti; V8 interpreta tali chiavi come indici di array e alloca backing store di dimensioni proporzionali al valore numerico, così richieste con segmenti path ripetuti contenenti parametri numerici alti causano un consumo di heap sproporzionato fino all'esaurimento dell'old-space Node.js e alla terminazione del worker SSR. Lo sfruttamento richiede che i proxy upstream consentano semicoloni e segmenti path multipli.

Scope e impatto

Le quattro CVE di denial of service sul componente SSR/router (CVE-2026-101895, CVE-2026-101896, CVE-2026-111751, CVE-2026-111752) presentano VA:H con SC:N/SI:N/SA:N: l'impatto è limitato alla disponibilità del sistema vulnerabile (worker SSR Node.js) senza propagazione ai sistemi successivi.

CVE-2026-101897 presenta un profilo distinto: VA:N, SI:L, SA:H — nessun impatto sulla disponibilità del sistema vulnerabile, ma impatto elevato sulla disponibilità del sistema successivo (tab browser target) e impatto limitato sulla sua integrità, coerente con la capacità di attivare breakpoint CDP e sospendere l'esecuzione JavaScript.

CVE-2026-111754 presenta SC:L/SI:L/SA:N: impatto limitato su riservatezza e integrità dei sistemi successivi, coerente con un redirect verso un dominio esterno arbitrario.

Remediation

Il vendor indica come corrette le seguenti versioni:

- Angular 22.x: 22.1.6 (CVE-2026-101895), 22.2.0 (CVE-2026-101896), 22.2.1 (CVE-2026-111751, CVE-2026-111752, CVE-2026-111754).
- Angular 21.x: 21.2.23 (CVE-2026-101895), 21.2.24 (CVE-2026-101896), 21.2.25 (CVE-2026-111751, CVE-2026-111752, CVE-2026-111754).
- Angular 20.x: 20.3.31 (CVE-2026-101895), 20.3.32 (CVE-2026-101896), 20.3.33 (CVE-2026-111752, CVE-2026-111754). CVE-2026-111751 non riguarda il ramo 20.x, perché colpisce solo dalla versione 21.2.0.
- Angular DevTools: 1.21.1 (CVE-2026-101897).

Per coprire tutte le CVE sui componenti del framework occorre la versione più alta indicata per ciascun ramo: 22.2.1, 21.2.25 oppure 20.3.33.

Versioni non più supportate (19.2.25 e precedenti)

Per le versioni fino alla 19.2.25 il vendor non indica alcuna versione corretta per CVE-2026-101895, CVE-2026-101896, CVE-2026-111752 e CVE-2026-111754. Per CVE-2026-111752 e CVE-2026-111754 dichiara esplicitamente che il supporto è terminato e che non saranno corrette. È necessario migrare a un ramo supportato. CVE-2026-111751 non riguarda queste versioni.

Mitigazioni indicate dal vendor

Per chi non può aggiornare subito:

- CVE-2026-101895: non associare input non attendibile a `[innerHTML]` nei template renderizzati lato server, usando l'interpolazione di testo o `[textContent]` dove non serve HTML grezzo. In alternativa, validare l'input prima del binding `[innerHTML]` lato server, rifiutando o rimuovendo le stringhe che iniziano con una dichiarazione DOCTYPE.
- CVE-2026-111751: evitare `merge` e `preserve` nei link renderizzati lato server, rimuovendo l'impostazione globale `defaultQueryParamsHandling` e associando solo i parametri necessari a ciascun link. Limitare la lunghezza della query string a livello di proxy, WAF o Node.js (il vendor suggerisce 2.048 byte). Aumentare `--max-old-space-size` alza la soglia di esaurimento ma non elimina il problema.
- CVE-2026-111752: a livello di middleware o WAF, rifiutare le richieste contenenti parentesi se l'applicazione non usa outlet con nome negli URL. Se li usa, rifiutare solo le sequenze di outlet con path vuoto (`:/(`, `(/(`, `///(`). Limitare la lunghezza dell'URL (il vendor suggerisce 2.048 byte) riduce l'amplificazione senza eliminarla, e aumentare `--max-old-space-size` alza solo il costo dell'attacco.
- CVE-2026-111754: bloccare a livello di reverse proxy o WAF i percorsi che contengono `/.//`, `/..//` o `/.;/`, e riscrivere o bloccare gli header `Location` con URL protocol-relative (`//`) provenienti dal server SSR.

CVE

CVE CVSS EPSS priority 0-day
CVE-2026-101895 4.0: 8.7/high 0.872% | 58.68% 15.4/critical no
CVE-2026-101896 4.0: 8.2/high 0.756% | 54.93% 14.3/critical no
CVE-2026-111751 4.0: 8.2/high 0.000% | 0.00% 8.2/high no
CVE-2026-111752 4.0: 8.2/high 0.000% | 0.00% 8.2/high no
CVE-2026-101897 4.0: 5.1/medium 0.353% | 28.79% 7.5/high no
CVE-2026-111754 4.0: 5.1/medium 0.000% | 0.00% 5.1/medium no

NOTA: Le vulnerabilità sono ordinate per priorità operativa, calcolata combinando la gravità teorica (CVSS) con la probabilità reale di sfruttamento (EPSS). Se il dato EPSS non è ancora disponibile, la priorità è calcolata sul solo score CVSS.
Approfondisci

elenco vulnerabilità

CWE descrizione
CWE-400 Uncontrolled Resource Consumption
CWE-835 Loop with Unreachable Exit Condition ('Infinite Loop')
CWE-770 Allocation of Resources Without Limits or Throttling
CWE-346 Origin Validation Error
CWE-441 Unintended Proxy or Intermediary ('Confused Deputy')
CWE-940 Improper Verification of Source of a Communication Channel
CWE-405 Asymmetric Resource Consumption (Amplification)
CWE-601 URL Redirection to Untrusted Site ('Open Redirect')

prodotti impattati

vendor prodotto & versioni
Angular Angular
  • da: 22.0.0 a: 22.2.1 esclusa (CVE-2026-111751, CVE-2026-111752, CVE-2026-111754)
  • da: 21.2.0 a: 21.2.25 esclusa (CVE-2026-111751)
  • da: 21.0.0 a: 21.2.25 esclusa (CVE-2026-111752, CVE-2026-111754)
  • da: 20.0.0 a: 20.3.33 esclusa (CVE-2026-111752, CVE-2026-111754)
  • < 22.2.0-rc.0 (CVE-2026-101897)
  • >= 22.0.0, < 22.2.0 (CVE-2026-101896)
  • >= 22.0.0, < 22.1.6 (CVE-2026-101895)
  • >= 21.0.0, < 21.2.24 (CVE-2026-101896)
  • >= 21.0.0, < 21.2.23 (CVE-2026-101895)
  • >= 20.0.0, < 20.3.32 (CVE-2026-101896)
  • >= 20.0.0, < 20.3.31 (CVE-2026-101895)
  • <= 19.2.25 (CVE-2026-101895, CVE-2026-101896)
  • fino a: 19.2.25 (CVE-2026-111752, CVE-2026-111754)
devtools
  • >= 1.20.0, < 1.21.1 (CVE-2026-101897)