La società Google ha presentato il rilascio del browser web Chrome 90. È disponibile anche la versione stabile del progetto open source Chromium, che funge da base per Chrome. Il browser Chrome si distingue per l'uso dei loghi Google, per un sistema di invio di notifiche in caso di crash, moduli per la riproduzione di contenuti video protetti (DRM), un sistema di aggiornamenti automatici e la trasmissione dei parametri RLZ durante la ricerca. Il prossimo rilascio di Chrome 91 è previsto per il 25 maggio.
Principali novità in Chrome 90:
- Per tutti gli utenti è abilitato l'apertura predefinita dei siti tramite HTTPS quando si digitano nomi host nella barra degli indirizzi. Ad esempio, digitando l'host example.com, verrà aperto di default il sito https://example.com; se si verificano problemi nell'apertura, verrà eseguito il fallback a http://example.com. Per gestire l'utilizzo predefinito di "https://" è stata proposta l'impostazione "chrome://flags#omnibox-default-typed-navigations-to-https".
- È stata implementata la possibilità di assegnare diverse etichette alle finestre per una chiara distinzione nella barra delle applicazioni. Il supporto per la modifica del nome della finestra semplificherà l'organizzazione del lavoro utilizzando finestre del browser diverse per compiti specifici, ad esempio, aprendo finestre separate per attività lavorative, interessi personali, svaghi, materiali in attesa, ecc. Il nome può essere modificato tramite la voce "Aggiungi nome finestra" nel menu contestuale che appare facendo clic con il tasto destro del mouse su un'area vuota nella barra delle schede. Dopo la modifica, nella barra delle applicazioni, invece del nome del sito della scheda attiva verrà visualizzato il nome scelto, il che può risultare utile per aprire siti identici in finestre diverse collegati a conti separati. L'associazione viene mantenuta tra le sessioni e dopo il riavvio le finestre verranno ripristinate con i nomi scelti.

- È stata aggiunta la possibilità di nascondere la «Lista di lettura» (Reading List) senza dover modificare le impostazioni in «chrome://flags» («chrome://flags#read-later»). Ora è possibile utilizzare l'opzione «Show Reading List» nella parte inferiore del menu contestuale visualizzato facendo clic con il tasto destro sulla barra dei segnalibri per nasconderla. Ricordiamo che nella scorsa versione alcuni utenti, cliccando sull'icona a stella nella barra degli indirizzi, vedono apparire oltre al pulsante «Aggiungi segnalibro» un secondo pulsante «Aggiungi alla lista di lettura», e nell'angolo destro della barra dei segnalibri compare un menù «Lista di lettura», dove sono elencate tutte le pagine precedentemente aggiunte alla lista. Aprendo una pagina dalla lista, essa viene contrassegnata come letta. Le pagine nella lista possono anche essere contrassegnate come lette o non lette manualmente, oppure rimosse dalla lista.
- È stata aggiunta la supporto per il segmentazione della rete per proteggere contro i metodi di tracciamento dei movimenti degli utenti tra i siti, basati sullo stoccaggio di identificatori in aree non destinate a memorizzare informazioni permanentemente («Supercookies»). Poiché le risorse nella cache sono memorizzate in uno spazio dei nomi condiviso, indipendentemente dal dominio di origine, un sito può determinare il caricamento delle risorse da un altro sito verificando la presenza di questa risorsa nella cache. La protezione si basa sull'applicazione della segmentazione della rete (Network Partitioning), il cui scopo è quello di aggiungere legami supplementari alle voci memorizzate nelle cache condivise. dominio, da cui è stata aperta la pagina principale, limitando l'ambito della cache per gli script di tracciamento dei movimenti solo al sito corrente (uno script in iframe non potrà verificare se la risorsa è stata caricata da un altro sito). Il costo della segmentazione è una diminuzione dell'efficacia della cache, con un lieve aumento dei tempi di caricamento della pagina (massimo dell'1,32%, ma per l'80% dei siti dello 0,09-0,75%).
- È stato aggiornato il numero di porte di rete per le quali viene bloccata l'invio di richieste HTTP, HTTPS e FTP per proteggere da attacchi di NAT slipstreaming, che consentono, aprendo una pagina web appositamente preparata dall'attaccante nel browser, di stabilire una connessione di rete con server un attacco a qualsiasi porta UDP o TCP sul sistema dell'utente, indipendentemente dall'uso di indirizzi di rete privati (192.168.x.x, 10.x.x.x). Tra le porte vietate sono state incluse 554 (protocollo RTSP) e 10080 (utilizzata in Amanda backup e VMWare vCenter). In precedenza, erano già state bloccate le porte 69, 137, 161, 554, 1719, 1720, 1723, 5060, 5061 e 6566.
- Aggiunta la funzione iniziale di apertura nei browser dei documenti PDF con moduli XFA.
- Per alcuni utenti è attivata una nuova sezione delle impostazioni «Chrome Settings > Privacy and security > Privacy sandbox», che consente di gestire i parametri dell'API FLoC, mirata a determinare la categoria di interessi dell'utente senza identificazione individuale e senza legame con la cronologia di navigazione di siti specifici.
- Fornito un messaggio di avviso più chiaro con un elenco delle azioni consentite, visualizzato quando un utente si connette a un profilo per il quale è attivata la gestione centralizzata.
- Ridotto l'invadenza dell'interfaccia di richiesta delle autorizzazioni. Le richieste che l'utente probabilmente non approverà ora vengono bloccate automaticamente con la visualizzazione di un indicatore corrispondente nella barra degli indirizzi, tramite il quale l'utente può accedere all'interfaccia per la gestione delle autorizzazioni relative a ciascun sito.

- Abilitato il supporto per le estensioni Intel CET (Intel Control-flow Enforcement Technology) per la protezione hardware contro l'esecuzione di exploit basati su tecniche di programming orientato al ritorno (ROP, Return-Oriented Programming).
- Continuato il lavoro di traduzione del browser verso un utilizzo di una terminologia inclusiva. Il file «master_preferences» è stato rinominato in «initial_preferences» per non ferire i sentimenti degli utenti che percepiscono la parola master come un riferimento alla schiavitù dei loro antenati. Per mantenere la compatibilità, il supporto per «master_preferences» rimarrà nel browser per un certo periodo di tempo. Il browser si è già liberato dall'uso delle parole «whitelist», «blacklist» e «native».
- Nella versione per Android, attivando la modalità risparmio dati 'Lite', è stata implementata una riduzione del bitrate durante il caricamento dei video quando si è connessi a reti mobili, il che consente di ridurre le spese per gli utenti con piani tariffari che considerano il traffico. Nella modalità 'Lite', è garantita anche una compressione delle immagini richieste da risorse pubblicamente accessibili (che non richiedono autenticazione) tramite HTTPS.
- È stato aggiunto un codificatore del formato video AV1, appositamente ottimizzato per l'uso nelle videoconferenze basate sul protocollo WebRTC. L'uso di AV1 nelle videoconferenze consente di aumentare l'efficacia della compressione e di garantire la possibilità di trasmissione su canali con una larghezza di banda di 30 kbit/s.
- In JavaScript, negli oggetti Array, String e TypedArrays, è stato implementato il metodo at(), che consente di utilizzare l'indicizzazione relativa (viene specificata la posizione relativa come indice dell'array), anche con valori negativi rispetto alla fine (ad esempio, 'arr.at(-1)' restituirà l'ultimo elemento dell'array).
- In JavaScript, per le espressioni regolari, è stata aggiunta la proprietà '.indices', che contiene un array con le posizioni iniziali e finali dei gruppi di corrispondenza. La proprietà viene riempita solo quando l'espressione regolare viene eseguita con il flag '/d'. const re = /(a)(b)/d; const m = re.exec('ab'); console.log(m.indices[0]); // 0 — tutti i gruppi di corrispondenza // → [0, 2] console.log(m.indices[1]); // 1 — primo gruppo di corrispondenza // → [0, 1] console.log(m.indices[2]); // 2 — secondo gruppo di corrispondenza // → [1, 2]
- È stata effettuata un'ottimizzazione delle prestazioni per le proprietà 'super' (ad esempio, super.x), per le quali è stato utilizzato un cache inline. Ora le prestazioni dell'uso di 'super' sono simili a quelle dell'accesso alle proprietà normali.
- È stata notevolmente accelerata la chiamata di funzioni WebAssembly da JavaScript grazie all'applicazione del deployment inline. L'ottimizzazione indicata rimane ancora sperimentale e richiede di essere eseguita con il flag '—turbo-inline-js-wasm-calls'.
- Aggiunto l'API WebXR Depth Sensing, che consente di determinare la distanza tra gli oggetti nell'ambiente dell'utente e il dispositivo dell'utente, ad esempio, per creare applicazioni di realtà aumentata più realistiche. Ricordiamo che l'API WebXR consente di unificare il lavoro con diverse classi di dispositivi di realtà virtuale, dai visori 3D fissi a soluzioni basate su dispositivi mobili.
- Stabilizzata la funzionalità di WebXR AR Lighting Estimation, che consente di determinare i parametri dell'illuminazione ambientale nelle sessioni WebXR per la realtà aumentata, al fine di conferire ai modelli un aspetto più naturale e una integrazione più armoniosa con l'ambiente dell'utente.
- In modalità Origin Trials (funzionalità sperimentali che richiedono attivazione separata) sono stati aggiunti nuovi API, attualmente limitati alla piattaforma Android. L'Origin Trial implica la possibilità di lavorare con l'API indicata da applicazioni caricate da localhost o 127.0.0.1, oppure dopo aver completato la registrazione e ottenuto un token speciale, valido per un periodo limitato per un sito specifico.
- Il metodo getCurrentBrowsingContextMedia(), che consente di organizzare la cattura del flusso video MediaStream, riflettendo il contenuto della scheda corrente. A differenza del metodo simile getDisplayMedia(), quando viene chiamato getCurrentBrowsingContextMedia(), viene visualizzata una semplice finestra di dialogo per confermare o bloccare l'operazione di trasmissione video con il contenuto della scheda.
- L'API Insertable Streams, che consente di manipolare flussi multimediali grezzi (raw) trasmessi attraverso l'API MediaStreamTrack, come i dati dalla fotocamera e dal microfono, il risultato della cattura dello schermo o i dati intermedi della decodifica del codec. Per rappresentare i fotogrammi grezzi vengono utilizzate le interfacce WebCodec, dopo di che viene generato un flusso simile a quello che l'API WebRTC Insertable Streams genera sulla base delle RTCPeerConnections. Da un punto di vista pratico, la nuova API consente di implementare funzionalità come l'applicazione di metodi di machine learning per l'identificazione o l'annotazione di oggetti in tempo reale o per l'aggiunta di effetti, come il ritaglio dello sfondo, prima della codifica o dopo la decodifica del codec.
- Possibilità di imballare le risorse in pacchetti (Web Bundle) per organizzare un caricamento più efficace di un gran numero di file correlati (stili CSS, JavaScript, immagini, iframe). Tra gli svantaggi del supporto attuale per i pacchetti di file JavaScript (webpack), che si cerca di eliminare nel Web Bundle: nel cache HTTP può rimanere solo il pacchetto e non le sue parti costitutive; la compilazione e l'esecuzione possono iniziare solo dopo il caricamento completo del pacchetto; risorse aggiuntive, come CSS e immagini, devono essere codificate sotto forma di stringhe JavaScript, il che porta a un aumento della dimensione e all'esecuzione di un ulteriore passaggio di parsing.
- Supporto per la gestione delle eccezioni in WebAssembly.
- Stabilito l'API Declarative Shadow DOM per creare nuovi rami radice nel Shadow DOM, ad esempio per separare lo stile importato da un elemento di terze parti e il relativo sotto-albero DOM dal documento principale. L'API dichiarativa proposta consente di staccare rami DOM utilizzando solo HTML, senza dover scrivere codice JavaScript.
- Nella proprietà CSS aspect-ratio, che consente di vincolare esplicitamente il rapporto di aspetto a qualsiasi elemento (per il calcolo automatico della dimensione mancante indicando solo altezza o larghezza), è stata implementata la possibilità di interpolazione dei valori durante l'animazione (transizione fluida da un rapporto di aspetto a un altro).
- È stata aggiunta la possibilità di riflettere lo stato degli elementi HTML personalizzati (custom element) nel CSS attraverso il pseudo-classe «:state()». Questa funzionalità è stata implementata analogamente alla possibilità degli elementi HTML standard di modificare il proprio stato in base all'interazione con l'utente.
- Nella proprietà CSS 'appearance' è stato aggiunto il supporto per il valore 'auto', che è impostato per impostazione predefinita per e , e sulla piattaforma Android Inoltre per , , , e .
- Nella proprietà CSS 'overflow' è stato aggiunto il supporto per il valore 'clip', che, se impostato, taglierà il contenuto che fuoriesce dai limiti del blocco sulla frontiera del possibile straripamento del blocco senza possibilità di scorrimento. Il valore che determina quanto lontano può uscire il contenuto dai limiti effettivi del blocco prima dell'inizio del taglio è specificato tramite la nuova proprietà CSS 'overflow-clip-margin'. Rispetto a 'overflow: hidden', l'uso di 'overflow: clip' consente di ottenere prestazioni più elevate.


- Il nuovo header Permissions-Policy ha sostituito l'header HTTP Feature-Policy per gestire la delega di autorizzazioni e attivare funzionalità avanzate, con supporto per valori strutturati dei campi (ad esempio, ora è possibile specificare "Permissions-Policy: geolocation=()" invece di "Feature-Policy: geolocation 'none'").
- È stata potenziata la protezione contro l'uso dei Protocol Buffers per attacchi causati dall'esecuzione speculativa delle istruzioni nei processori. La protezione è implementata tramite l'aggiunta del tipo MIME "application/x-protobuffer" nell'elenco dei tipi MIME mai ascoltati (sniffed), la cui gestione avviene attraverso il meccanismo Cross-Origin-Read-Blocking. In precedenza, il tipo MIME "application/x-protobuf" era già stato incluso in questo elenco, ma "application/x-protobuffer" era stato trascurato.
- Nell'API File System Access è stata implementata la possibilità di spostare la posizione corrente nel file oltre la fine, riempiendo lo spazio vuoto creato con zeri durante le successive scritture tramite la chiamata a FileSystemWritableFileStream.write(). Questa funzionalità consente di creare file sparsi con spazi vuoti e semplifica notevolmente l'organizzazione della scrittura nei file di flussi con arrivo disordinato di blocchi di dati (ad esempio, questo è praticato in BitTorrent).
- È stato aggiunto il costruttore StaticRange con l'implementazione di tipi leggeri di Range che non richiedono l'aggiornamento di tutti gli oggetti correlati ad ogni modifica dell'albero DOM.
- È stata implementata la possibilità di specificare i parametri width e height per gli elementi <source>, specificati all'interno dell'elemento <picture>. Questa possibilità consente di calcolare il coefficiente di rapporto d'aspetto per gli elementi <picture>, analogamente a quanto fatto per <img>, <canvas> e <video>.
- Dal WebRTC è stata rimossa la supporto non standardizzato per i canali dati RTP (RTP Data Channels), per i quali è consigliato utilizzare canali dati basati su SCTP.
- Le proprietà navigator.plugins e navigator.mimeTypes ora restituiscono sempre un valore vuoto (dopo la cessazione del supporto per Flash, non c'è più bisogno di queste proprietà).
- È stata apportata una grande serie di piccole migliorie agli strumenti per sviluppatori web ed è stato aggiunto un nuovo strumento per il debug del CSS flexbox.

Oltre alle nuove funzionalità e alla correzione di errori, nella nuova versione sono state eliminate 37 vulnerabilità. Molte di queste vulnerabilità sono state scoperte grazie ai test automatizzati effettuati con strumenti come AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer e AFL. Non sono state trovate problematiche critiche che consentono di bypassare tutti i livelli di sicurezza del browser ed eseguire codice nel sistema al di fuori dell'ambiente sandbox. Nell'ambito del programma di ricompensa per la scoperta di vulnerabilità per la versione attuale, Google ha erogato 19 premi per un totale di 54.000 dollari USA (un premio di 20.000 dollari, un premio di 10.000 dollari, due premi di 5.000 dollari, tre premi di 3.000 dollari, un premio di 2.000 dollari, un premio di 1.000 dollari e quattro premi di 500 dollari). L'importo 6 delle ricompense non è stato ancora definito.
Vale la pena notare che ieri, dopo la formazione del rilascio correttivo 89.0.4389.128, ma prima del rilascio di Chrome 90, è stato pubblicato un ulteriore exploit che sfruttava una nuova vulnerabilità zero-day, non risolta in Chrome 89.0.4389.128. Al momento non è chiaro se questo problema sia stato risolto in Chrome 90. Come nel primo caso, l'exploit copre solo una vulnerabilità e non include codice per eseguire il bypass dell'isolamento sandbox (eseguendo chrome con il flag "—no-sandbox", l'exploit apre notepad quando si carica una pagina web sulla piattaforma Windows). La vulnerabilità associata al nuovo exploit riguarda la tecnologia WebAssembly.
Fonte: opennet.ru





