Cosa fare riguardo alla vulnerabilità in un prodotto SaaS che compro?

1

Lavoro per un'università, dove faccio parte del team responsabile dell'integrazione di un sistema di gestione dell'apprendimento SaaS (ad esempio: Moodle, Canvas) con il resto dei sistemi dell'università.

Due mesi fa, ho identificato un attacco CSRF, disponibile a tutti coloro che possono aggiungere materiale didattico al sistema (per lo più docenti, ma anche altro personale accademico e tutor). Il problema è che i materiali del corso possono contenere javascript e qualsiasi utente amministratore che visualizza i materiali del corso (ad esempio: in risposta a una richiesta di supporto) eseguirà il javascript. Poiché il sistema ora dispone di un'API REST (documentata pubblicamente!), È possibile che detto javascript, tra le altre cose, elevi qualsiasi utente come amministratore di sistema. In particolare, il sito Web stesso utilizza l'API REST in tutto, il che significa che javascript deve essere in grado di effettuare chiamate API. Ho sviluppato demo di exploit funzionali, quindi so per certo che funziona e quanto sia facile da fare.

L'ho riferito al venditore, e la loro risposta immediata è stata "I docenti sono utenti fidati, funziona come progettato". Al che la mia risposta irata era "Non mi fido dei docenti di essere amministratori di sistema". Secondo una semplice query DB, nel sistema sono presenti circa 4000 utenti che possono caricare materiali javascript, al di fuori di ~ 50000 utenti totali. Due mesi dopo, continuano ad attenersi alla loro risposta originale.

Sono un po 'preoccupato per il sistema della mia istituzione: ho implementato alcuni script di monitoraggio esterni per dirmi se appaiono degli amministratori inattesi, e abbiamo dei backup offline, il che è tutto ciò che posso pensare di fare. Tuttavia, mi preoccupo anche che questo exploit abbia effetto su tutte queste installazioni in tutto il mondo, ed è un sistema a esecuzione corrente (probabilmente 1000 istanze).

Poiché questo è SaaS, non abbiamo abbastanza accesso al sistema per poterlo bloccare da soli.

Quindi ho un gruppo di domande correlate:

  1. Questo attacco è accettabile o almeno comune tra i sistemi aziendali di grandi dimensioni?
  2. Credo che il wrapping del contenuto generato dall'utente in un iframe con l'attributo sandbox bloccherebbe questo attacco (ammesso che gli amministratori utilizzino browser aggiornati), utilizzando CORS per impedire richieste all'API REST. È sicuro? È altrimenti possibile rendere javascript caricato dagli utenti sicuro?
  3. Se il venditore si rifiuta di ripararlo, quali sono le mie prossime mosse? Si raccomanda la divulgazione pubblica, dato che è abbastanza facile sfruttarlo una volta noto?

EDIT : per rispondere ai commenti:

Ammetto di essere un po 'confuso sulla differenza tra csrf e xss, nonostante la lettura di articoli su di esso. Con questa definizione è XSS in quanto "esegue in qualche modo uno script" , ma è CSRF in quanto deve "utilizzare cookie / sessione già registrati di una vittima". Inoltre, il token che è la chiave per l'exploit è chiamato token csrf dal fornitore.

Ecco alcuni dettagli su come funziona l'exploit / mitigation, per (2). Anche se hai ragione; questa dovrebbe essere davvero una domanda a parte.

L'attacco deve includere una richiesta di fetch nel javascript fornito che esegue una richiesta di PATCH REST contro l'API appropriata, nel qual caso il cookie della vittima viene utilizzato come autenticazione per l'API. Le richieste non GET richiedono un'intestazione personalizzata (un token 'xsrf'), ma è possibile che il javascript in dotazione scriva quel token da un'altra pagina. Per quanto riguarda la mitigazione proposta: i contenuti del corso, incluso tutto il javascript fornito dall'utente, sono attualmente racchiusi in un singolo div . Propongo di sostituire div con iframe che recupera separatamente i contenuti dell'utente (o utilizza srcdoc ) e ha un attributo sandbox senza il flag allow-same-origin . Ciò significherebbe che lo script non avrebbe accesso al cookie di autenticazione e non sarebbe comunque in grado di inviare richieste di recupero all'API a causa di CORS.

    
posta Amanda Ellaway 28.11.2018 - 02:04
fonte

2 risposte

1

Is this attack acceptable, or at least common among large enterprise systems?

No, assolutamente non è assolutamente accettabile. E spero che non sia comune.

I believe wrapping user-generated content in an iframe with the sandbox attribute would block this attack (provided admins use up-to-date browsers), by using CORS to prevent requests to the REST API. Is this safe?

In teoria un iframe completamente in sandbox potrebbe aiutare. Ma come fai notare, il supporto per l'attributo sandbox non è perfetto . Ci vuole solo un amministratore con un vecchio browser di tua proprietà.

Is it otherwise possible to make user-uploaded javascript safe?

Potresti dare un'occhiata a come siti come JS Fiddle risolve questo problema. Esse fanno eco al contenuto generato dall'utente da un dominio diverso, rendendo quindi più sicuro il browser SOP per la protezione.

Ma se acquisti SaaS, non dovrebbe essere il tuo ruolo risolvere questo problema.

If the vendor refuses to fix it, what are my next moves? Is public disclosure recommended, given that it is fairly easy to exploit once it is known about?

Nel tuo ruolo di cliente, ti consiglierei di portare gli avvocati sul caso. Se il tuo contratto è un bene, la società che fornisce il sistema è in violazione di esso. Se stai pagando per un prodotto con diversi livelli di autorizzazione, dovresti fare quindi consegnarne uno. Al momento, non lo sono.

Nel tuo ruolo di ricercatore che ha riscontrato una vulnerabilità di sicurezza, ti consiglio di divulgazione responsabile . Tra l'altro, dovresti dare al venditore una scadenza chiara prima di rivelare.

I admit I'm a bit hazy on the difference between csrf and xss.

Come altri hanno sottolineato, ciò che descrivi è memorizzato XSS e non CSRF.

    
risposta data 28.11.2018 - 16:41
fonte
0

Discussioni simili sono state fatte qui ( Il mio vecchio lavoro ha enormi exploit di sicurezza nel loro prodotto, ma non gli interessa ) e qui ( Come rendere nota una vulnerabilità della sicurezza in modo etico? ) sulla divulgazione etica delle vulnerabilità della sicurezza.

Lecturers are trusted users, this is functioning as designed.

Hanno compreso completamente il tuo attacco? La mia opinione è di provare a convincerli dell'importanza dell'exploit che hai trovato. Se continuano a ignorarti, devi pubblicizzarli pubblicamente come descritto nei link sopra.

    
risposta data 29.11.2018 - 10:23
fonte

Leggi altre domande sui tag