Doveva essere il fiore all’occhiello della privacy digitale europea, e invece l’app UE per la verifica dell’età si è dimostrata vulnerabile ancor prima di una distribuzione su larga scala. Il ricercatore di sicurezza Paul Moore ha dimostrato che i controlli dell’applicazione possono essere aggirati in meno di 2 minuti, mettendo mano ai file di configurazione locali conservati nella directory shared_prefs del dispositivo. Un problema serio, se si considera che secondo diverse analisi della Commissione europea oltre il 70% dei minori accede regolarmente a servizi digitali che richiederebbero un controllo dell’età. Non a caso la presidente Ursula von der Leyen aveva presentato questa app come uno strumento pronto e sviluppato per proteggere i più piccoli.
Il meccanismo è quasi banale nella sua semplicità. L’app prevede un PIN scelto dall’utente, crittografato e salvato nelle preferenze locali. Quel PIN, però, non è legato in modo crittograficamente solido al contenitore che custodisce le credenziali di verifica dell’età. Un attaccante con accesso fisico al telefono può modificare il file delle preferenze, eliminare i valori del PIN cifrato, riavviare l’app, impostare un nuovo codice e accedere alle credenziali già emesse con il profilo precedente. In pratica, se sul dispositivo esiste già una credenziale valida (perché il proprietario è maggiorenne), chiunque può usarla come fosse propria. Il punto debole sta nella totale assenza di collegamento tra il segreto locale usato per lo sblocco e il materiale sensibile conservato nel wallet. In un sistema robusto, il cambio del PIN dovrebbe richiedere una nuova derivazione sicura delle chiavi, oppure l’invalidazione dell’accesso ai dati già presenti, oppure ancora l’utilizzo di un fattore custodito nell’Android Keystore o in uno storage hardware protetto.
Rate limiting e biometria: protezioni che stanno in piedi per modo di dire
La seconda parte della dimostrazione di Moore è forse ancora più eloquente. Il contatore dei tentativi falliti e il flag che abilita la biometria risultano memorizzati nello stesso spazio di configurazione locale. Basta azzerare il contatore per annullare il meccanismo di rate limiting, e impostare a false il parametro booleano relativo a UseBiometricAuth per far saltare il controllo biometrico. Quando una misura di protezione dipende da un valore modificabile dallo stesso soggetto che si vuole fermare, quella misura ha un valore puramente cosmetico. Un contatore anti brute force serio richiederebbe un archivio resistente alla manomissione, o almeno una logica lato server, o una chiave di stato firmata e verificabile. Lo stesso discorso vale per la scelta tra PIN e biometria: se la decisione resta un semplice interruttore nelle preferenze, ci si trova davanti a un castello di carte che crolla al primo alito di vento.
Ma il problema più pesante sul piano della privacy riguarda la gestione delle immagini biometriche. Secondo Moore, il flusso NFC estrae il volto dal DG2 del documento elettronico e lo scrive su disco come PNG lossless. La cancellazione scatterebbe solo in caso di successo, mentre un errore, un crash, un annullamento o una scansione interrotta potrebbero lasciare il file nel dispositivo. Per i selfie il quadro sarebbe peggiore: immagini salvate nello storage esterno all’applicazione e non rimosse affatto, quindi conservate nel tempo senza alcun controllo.
Cosa dovrebbe cambiare nell’app UE per la verifica dell’età
La Commissione europea insiste sull’uso di meccanismi privacy preserving e di zero knowledge proof per attestare il superamento di una soglia di età senza consegnare l’identità completa alla piattaforma. Un obiettivo che resta valido e tecnicamente sensato. Il problema è che una soluzione del genere vive su più livelli: protocolli di presentazione, emittenti di credenziali, conservazione locale, onboarding documentale, liveness, face match, gestione dei segreti. Se la parte crittografica a valle è ben fatta ma l’acquisizione o la protezione locale a monte è debole, l’utente perde comunque controllo sui dati più delicati, cioè proprio quelli biometrici e documentali raccolti per ottenere la credenziale.
Le correzioni da apportare all’app UE per la verifica dell’età sono parecchie: il PIN dovrebbe sbloccare materiale legato a chiavi custodite dal sistema operativo; le preferenze che governano tentativi di accesso e biometria devono usare protezioni adeguate contro la manomissione; le immagini di onboarding dovrebbero restare in memoria il meno possibile, essere cifrate a livello applicativo quando la persistenza è inevitabile e cancellate in modo affidabile. Il valore dell’open source, del resto, si misura proprio qui: il codice pubblico consente a ricercatori indipendenti di verificare le promesse e di trovare incoerenze prima che diventino problemi distribuiti su larga scala.
