venerdì 25 novembre 2016

Come violare 18app per avere il Bonus Cultura infinito (responsible disclosure)

Essendo nato anch'io nel '98 come molti altri adolescenti, ho potuto avere accesso al tanto aspettato "Bonus Cultura" promesso dal governo Renzi nell'ultima legge di Stabilità per il quale sono stati stanziati 290 milioni di euro complessivi e prevede per i neo-maggiorenni l'accesso a 500 euro da investire in biglietti, libri e molto altro. 


La modalità di erogazione del bonus avviene tramite l'accesso ad un sito web creato ad hoc in seguito all'autenticazione della propria identità digitale (SPID) per la conferma dell'idoneità. Infatti, al contrario delle aspettative, non si tratta effettivamente di un' "app" come appunto potrebbe suggerire anche il nome del programma, ma, come già detto, di un sito web perfettamente accessibile anche dai dispositivi mobili.

Tralasciando tutte le critiche mosse contro questa iniziativa, derivate fondamentalmente dai ritardi nell'attivazione del portale e dalla complessità della richiesta dello SPID, finalmente sono riuscito anch'io ad effettuare il primo accesso al sito. La grafica appare subito intuitiva e veramente user-friendly, infatti la navigazione all'interno del portale avviene senza alcuna minima difficoltà.

Il mio interesse si è spostato subito sulle parti "cruciali" dell'applicazione, in particolare il modulo di creazione dei "bonus", che consente di "partizionare" i 500 euro per spenderli nei vari servizi previsti.

Ho provato a creare un buono dal valore di 50 euro così da poter intercettare la richiesta:

Com’è possibile osservare, i parametri della richiesta, codificati in JSON, sono i seguenti:
  • idBeneficiario: l’ID del “mio” account;
  • annoRif: l’anno in cui è stata spedita la richiesta (il Bonus Cultura è spendibile fino al 2018);
  • idAmbito: la categoria del servizio (cinema, concerti, libri ecc…);
  • idBene: la sotto-categoria del servizio (nel caso dei libri: audiolibro, ebook o cartaceo);
  • importoRichiesto: l’importo da assegnare al buono;
La risposta del server, in figura opportunamente censurata per motivi di privacy, contiene alcuni dati sull’esito della richiesta (data, eventuale errore…), sul buono generato (numero, codice qr ecc…) e i dati personali del beneficiario, tra cui il codice fiscale, gli indirizzi di nascita e di residenza, email, numero di cellulare e molto altre informazioni private.

La prima vulnerabilità risiede nel parametro idBeneficiario, infatti tale valore è modificabile e viene accettato senza alcun tipo di controllo della sessione. In altre parole, è possibile creare buoni utilizzando un account altrui. In più, facendo ciò, nella risposta non troveremo più i nostri dati personali, ma quelli dell’account utilizzato, creando cosí un enorme problema di sicurezza e della privacy dell’utente.

Un’altra vulnerabilità del tipo “Broken Access Control” la troviamo invece nella richiesta relativa all’annullamento dei buoni creati:

La richiesta GET in questione si trova nel seguente formato:
https://www.18app.italia.it/BONUSWS/rest/secured/gestioneVoucher/annullaVoucherOnline/ID
L’ID del buono, evidenziato sopra, tranquillamente ottenibile leggendo la risposta della generazione del voucher. La falla risiede nella possibilità di modificare tale parametro, che potrebbe portare a risultati disastrosi per il portale, quale appunto la cancellazione di tutti i buoni di tutti gli utenti.

Infine ho trovato ben altre tre richieste che permettono di trovare informazioni sensibili (anagrafica, disponibilità del bonus ecc..) di altri utenti registrati, semplicemente avendo il loro codice fiscale (CF):
  • https://www.18app.italia.it/BONUSWS/rest/secured/18enne/beneficiario/CF
  • https://www.18app.italia.it/BONUSWS/rest/secured/18enne/listaVoucherDaSpendere/CF
  • https://www.18app.italia.it/BONUSWS/rest/secured/18enne/borsellino/CF
Le vulnerabilità appena documentate pongono la piattaforma ad un livello di rischio relativamente alto dato che un malintenzionato potrebbe impossessarsi dell'intero bugdet assegnato al Bonus Cultura (ovviamente quello non ancora usufruito) semplicemente combinando le richieste appena trattate.

Questa attività di ricerca risale al 14 Novembre 2016 a cui è seguita subito una collaborazione con il CERT Nazionale e SOGEI, la società che gestisce il sistema informativo del MEF e che ha curato la pubblicazione del sito 18app.italia.it, per permettere la risoluzione delle problematiche segnalate. Ringrazio Paolo Stagno, fondatore del progetto italiano VoidSec per avermi messo in contatto con questi due enti che mi hanno autorizzato la pubblicazione del Responsible Disclosure.

11 commenti:

  1. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  2. continua cosí!! sei molto bravo e in un monso come il nostro c'è un profondo bisogno di persone che usano l'informatica in modo etico !

    RispondiElimina
  3. Complimenti! Tu hai risolto gratis un problema che certa gente ha generato prendendo una barca di soldi.
    E' come il sito "a pagamento" di un noto quotidiano italiano che, se navigato in modalità anonima, funziona senza la minima limitazione...

    RispondiElimina
  4. Caro Luca, bravo. Sono un giornalista e mi sono interessato della questione. Ho una domanda da farti e un appunto. Parto da quest'ultimo: nell'introduzione hai scritto "290 miliardi", una cifra pazzesca (la spesa pubblica di tutta l'Italia in un anno è 800 miliardi...). Si tratta di 290 milioni. Inoltre, non ho capito una cosa: si poteva generare un buono utilizzando l'id di un altro, ma come? Occorreva conoscere l'id e la password di un altro coetaneo? Grazie (

    RispondiElimina
    Risposte
    1. Grazie Adriano per la segnalazione, scusami per la svista! Comunque per quanto riguarda la tua domanda, l'id non è altro che un numero quindi era sufficiente sostituire questo parametro con, appunto, un altro numero per evadere il limite dei 500 euro.

      Elimina
    2. In realtà é più semplice di quel che sembra, l'id é un numero compreso fra 0 (il primo utente registrato) ed n (ultimo utente).
      Basta andare per tentativi, e non occorre conoscere password ne altri dati degli altri utenti.

      Elimina
  5. da operatore del settore, trovo ASSURDO che un progetto del genere possa essere stato realizzato in modo cosi SUPERFICIALE. il bug è davvero come chiudere a chiavi la porta di casa e restare senza una parete. Come si può non sposare l'ormai certezza che in Italia dei pubblici servizi non venga in nessun modo premiata la professionalità ma solo le raccomandazioni. e questa non è demagogia. è un SERIO danno sopratutto perchè ci espone gravemente tutti. oggi il sito del gettone ai 18 enni, domani il portale dell'INPS?!?!

    RispondiElimina
  6. Complimenti. Però 'risolvimento' non si può vedere :) Marco

    RispondiElimina
  7. Complimenti, veramente. Personalmente trovo questo tipo di falle.. disarmanti

    RispondiElimina
  8. Bravo Luca, sia per aver trovato il bug ma sopratutto per il comportamento responsabile!
    Certo, ad essere onesti è stato un po' come "rubare caramelle ad un bambino", quindi mi domando, ma questo bimbo non aveva nessuno che lo controllasse? Nessuno che fatto le giuste valutazioni in fase progettuale, nessuno che facesse uno screening sulla security su un sito 1) della P.A. 2) aperto al pubblico, 3) che gestisce informazioni personali, 4) che gestisce soldi.?
    Che basso livello di professionalità!
    Piacentini, aiutaci tu...

    RispondiElimina