ATM: ma scherziamo?!

ATM passwordIl sito dell’ATM (la finanziaria che controlla le società che gestiscono i trasporti pubblici) di Milano è stato, a memoria, sempre abbastanza innovativo rispetto ai siti omologhi.

Uno dei servizi offerti è la possibilità di registrarsi per ricevere informazioni e per acquistare biglietti anche attraverso l’applicazione mobile.

Ma la procedura di registrazione è una cosa che non vorremmo mai vedere nel 2015.

Innanzi tutto la pagina non è in https, quindi tutti i dati inseriti viaggiano in chiaro dal browser verso il server.

Un certificato SSL lo si acquista oggi ad un prezzo che parte da quello di sei biglietti di corsa semplice dell’ATM, quindi non si tratta di un investimento che mette in crisi il bilancio della municipalizzata.

Che siano o no dati importanti, è sempre qualcosa che contiene almeno un indirizzo mail, nome, cognome e una password. Opzionalmente ci possono essere altri dati di profilazione, come anno di nascita, sesso, professione e titolo di studio.

La password è forse la parte più triste, infatti il sito non ammette password più lunghe di otto caratteri.

No, non c’è nessun errore: massimo otto caratteri.

Per fortuna che si tratta di caratteri e non byte: le pagine sono codificate in UTF-8 e come password per un account di prova ho provato ad utilizzare otto lettere accentate: la procedura è andata a buon fine.

Non voglio nemmeno ipotizzare il motivo di questa limitazione né ipotizzare come siano registrate le password nel database, sta di fatto che nel 2015 una limitazione di otto caratteri per una password è insensata e inaccettabile.

Proseguiamo con la mail di conferma della registrazione e di attivazione del servizio:

ATM Mail

Sì, quella è la password che ho utilizzato per la registrazione iniziale, no non è la password attuale di quell’account.

Ecco la nostra password inserita bella in chiaro in una mail. A parziale (ma molto parziale) mitigazione del problema, va segnalato che il server mail di ATM Milano supporta STARTTLS, quindi la trasmissione tra il loro server e il mio è avvenuta su un canale cifrato:

Received: from mta.atm-mi.it (mta.atm.it [195.103.188.132])
    (using TLSv1 with cipher AES128-SHA (128/128 bits))
    (No client certificate requested)

Ci sarebbe da segnalare una discrepanza tra l’hostname dichiarato in fase di handshake SMTP e il risultato del rDNS dell’IP, ma qui andiamo sul pignolo e ci allontaniamo dal topic.

Se si segue la procedura di recupero password si riceve via mail la nuova password di otto caratteri casuali. Questa è la nuova password, senza alcuna limitazione di utilizzo e senza obbligo di modifica.

L’intera gestione delle credenziali sembra venire dal 1997, quando era ammissibile imporre queste limitazioni e fare tutto in chiaro, ma siamo nel 2015 e sarebbe auspicabile che l’ATM di Milano se ne rendesse conto.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

4 pensieri riguardo “ATM: ma scherziamo?!”

  1. La pagina sarà codificata in UTF-8, ma il server potrebbe convertire la password in caratteri ISO-8859-1 (per esempio) e quindi sarebbero byte (è=232). Hai provato a usare caratteri con codice > 255?

    Anch’io sento forte la puzza di password in chiaro, esiste qualche altro motivo per cui imporre una così forte limitazione nella lunghezza?

    1. Potrei citare alcuni motivi, ma nessuno giustifica una password cosi’ corta. Di solito ci sono limitazioni legate ai tipi di carattere (come quello di CartaSI https://siamogeek.com/2013/09/password-complessa/ ) se usi vari layer di librerie che si devono passare i dati e alcuni caratteri possono essere male interpretati (non e’ una bella cosa, eh!).

      Ma 8 caratteri e’ davvero poco, l’unica ragione plausibile (ma sempre inaccettabile da un punto di vista della sicurezza) e’ che nel loro sistema il campo password sia aperto a XSS, a SQL injection o similari: mettendo una limitazione a 8 caratteri non puoi farci stare cose tipo a’:DROP DATABASE atm;– o https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet o similari. Ma in questo caso scrivi un codice migliore che sanifica l’input, non limiti la sicurezza dei tuoi utenti.

Spazio per un commento