Supponiamo che tu abbia un sito costruito attorno a jQuery. Non scarichi jQuery e usi la tua copia, ma usi una versione da un CDN, facendo uso della memorizzazione nella cache sui browser del cliente. Questo perché se un sito utilizza la versione CDN, verrà memorizzato nella cache e ogni sito che utilizza la stessa versione ne trarrà vantaggio, non dovendo scaricare ogni volta un file identico.
Un giorno qualcuno entra a far parte dei server CDN e sostituisce i file JavaScript con versioni alterate che inviano da qualche parte ogni tasto ai server dell'attaccante. E ogni singolo sito che utilizza quello script è interessato, incluso il tuo sito.
Qui entra Integrità delle risorse secondarie - SRI . Impedisce a una terza parte di alterare risorse esterne non rilevate. Se hai abilitato SRI sulle risorse esterne, un browser client non caricherà le risorse con hash mancate corrispondenze.
then they could easily just replace the root resource with hashes of their own malicious code
Non proprio. L'SRI protegge il tuo sito (codice che controlli) dalle modifiche apportate a uno script di terze parti, che non controlli. Un attacco al tuo codice non è protetto da SRI, perché se un utente malintenzionato cambia uno script di terze parti e il tuo sito, può fare lo stesso cambiando solo il tuo sito con meno problemi. Dopotutto, attaccare il tuo sito è più facile che attaccare Akamai, CloudFlare, Google o Microsoft.