Pubblicare la carta d'imbarco costa un account: cosa abbiamo misurato sull'oscuramento dei QR
Cosa rivela un singolo tagliando
Partiamo da un caso documentato, non da un'ipotesi.
Il giornalista di sicurezza Brian Krebs lo raccontò nel 2015. Un lettore di nome Cory vide la carta d'imbarco che un amico aveva pubblicato su Facebook, ne fece una schermata, ingrandì il codice a barre e lo passò in un decodificatore online gratuito. Pochi secondi dopo aveva i dati dell'account frequent flyer dell'amico.
Quello che venne dopo è il punto vero. Cory poteva consultare tutti i voli futuri di quell'account, cambiare il posto a passeggeri già emessi e cancellare qualsiasi volo in programma. Le informazioni esposte bastavano inoltre a superare la prima metà della procedura di reimpostazione del PIN della compagnia.
L'amico aveva semplicemente pubblicato una foto di viaggio.
Un dettaglio sfugge a quasi tutti: i codici a barre e i QR non sono decorazione, sono contenitori di dati leggibili dalle macchine. Tu vedi quadratini bianchi e neri; uno scanner vede un riferimento di prenotazione, un nome, un volo, una data, un posto. Quella distanza è tutto il rischio.
Coprire a metà non funziona, e ho misurato quanto poco
È la sezione che tenevo di più a scrivere, perché il metodo sbagliato è più pericoloso del non fare nulla: ti credi al sicuro e pubblichi lo stesso.
I QR nascono con una correzione d'errore consistente. La specifica consente a uno scanner di ricostruire il contenuto completo anche quando una parte rilevante del simbolo è danneggiata, sporca o coperta. Nel mondo fisico è utile: biglietti piegati o stampe sbavate restano leggibili. Applicato al ragionamento «ne copro metà e basta», diventa una falla.
Così l'ho misurato.
Quanta superficie bisogna davvero coprire
Il metodo è riproducibile. Con la libreria Python qrcode ho generato un QR di voucher fittizio — il contenuto è un URL di riscatto con riferimento di prenotazione e codice di validazione — nei livelli di correzione M (15 %), Q (25 %) e H (30 %). Ognuno ha attraversato quattro modalità di copertura su sette proporzioni di superficie, poi il QRCodeDetector di OpenCV. Solo il recupero completo dell'URL originale contava come «ancora leggibile».
Il risultato è peggiore di quanto immaginassi.
| Modalità di copertura | Fallisce da (M, 15 %) | Fallisce da (Q, 25 %) | Fallisce da (H, 30 %) |
|---|---|---|---|
| Blocco pieno, centrato | 15 % della superficie | 20 % della superficie | 25 % della superficie |
| Blocco pieno, angolo in basso a destra | 20 % della superficie | 25 % della superficie | 25 % della superficie |
| Barra orizzontale | 10 % della superficie | 20 % della superficie | 20 % della superficie |
| Pixelatura, centrata | 15 % della superficie | 20 % della superficie | 25 % della superficie |
Si legge così: quella percentuale segna dove la decodifica inizia a fallire. Sotto, si legge ancora tutto.
Tre risultati meritano di restare.
Primo, un biglietto con correzione alta resta leggibile con un quinto della superficie coperto. In livello H con il 20 % oscurato, blocco centrale, blocco d'angolo e pixelatura hanno recuperato tutti il contenuto. Quel rettangolo dall'aria consistente che hai disegnato sul codice non ha bloccato nulla.
Secondo, la pixelatura si è comportata esattamente come un blocco pieno: soglie identiche su tutti e tre i livelli. Questo liquida l'intuizione che sfocare sia perlomeno meglio di niente. Non è più sicuro, sembra solo che tu abbia fatto qualcosa.
Terzo, la barra orizzontale è risultata la più efficace delle quattro. In livello M bastava una barra che coprisse il 10 % dell'altezza. Una barra attraversa l'intera larghezza del simbolo, così il danno si distribuisce su più blocchi di parole di codice, mentre un quadrato compatto cade proprio dove la correzione d'errore è più solida.
Sinceramente, il terzo punto contraddice la conclusione che stavo per scrivere. Gli avvisi secondo cui «tracciare righe su un biglietto non lo annulla» sono corretti: parlano di validità e leggibilità. Ma se la domanda diventa quale modo di barrare fermi meglio uno scanner, questi dati rispondono che la barra batte il blocco. Lo si scopre solo misurando.
Dove copri conta più di quanto copri
Il risultato più utile è arrivato per ultimo.
I tre quadrati grandi agli angoli di un QR sono i pattern di individuazione: lo scanner li usa per stabilire orientamento e confini. Ho coperto quello in alto a sinistra e tutti e tre i livelli di correzione hanno fallito la decodifica, pur occupando quell'area solo il 2,0-3,6 % della superficie totale.
In altre parole: coprire il 2 % nel punto giusto vale più che coprire il 20 % nel punto sbagliato.
I limiti del test fanno parte del risultato. Ho usato il decodificatore di OpenCV, un singolo contenuto e una sola versione di QR. Scanner commerciali e fotocamere di telefono implementano la ricostruzione in modo diverso e possono essere più capaci. Tratta queste soglie come un pavimento, non una garanzia: il decodificatore di un attaccante reale sarà probabilmente più tollerante del mio ambiente di prova.
In pratica resta una regola: copri l'intero simbolo con un blocco opaco che debordi dai margini. Non un angolo, non qualche riga, non la pixelatura. Se lo strumento non lo permette, assicurati almeno che uno dei tre pattern d'angolo sia coperto per intero.
Coperto male equivale a non coperto.
Tre livelli di esposizione nelle schermate di viaggio
Le schermate di viaggio si dividono in tre livelli con profili di rischio davvero diversi.
| Livello | Origine tipica | Cosa esce | Scenario peggiore |
|---|---|---|---|
| 1: titolo scansionabile | Voucher GetYourGuide/Klook, biglietti eventi, carte d'imbarco | Il titolo stesso, il PNR, tracce dell'account fedeltà | Biglietto usato da altri, furto dell'account |
| 2: identificativi testuali | Conferme Booking.com/Agoda, riferimenti, numero di camera | Nome, date del soggiorno, indirizzo della struttura | Telefonate a nome dell'ospite, ingegneria sociale |
| 3: dati incorporati | Schermo fotografato con un secondo dispositivo | GPS negli EXIF, orario dello scatto, dispositivo | Deduzione della posizione o dell'abitazione |
Il primo livello è l'urgente. Il valore di un voucher elettronico sta nel codice stesso; se qualcuno lo scansiona prima, te ne accorgi all'ingresso. Ci sono casi documentati di malintenzionati che prendono biglietti pubblicati, li alterano e truffano acquirenti: la vittima non è solo chi ha pubblicato.
Il secondo sembra innocuo ed è carburante per l'ingegneria sociale. Nome, date e struttura bastano per presentarsi alla reception al posto tuo, o al contrario per chiamarti fingendosi la struttura e chiedere di «riconfermare la carta». Queste truffe crescono in alta stagione.
Il terzo è quello che sfugge di più. Una schermata da telefono normalmente non porta GPS, ma fotografare uno schermo con un secondo dispositivo imprime nell'immagine il punto in cui ti trovavi. Capita più spesso di quanto si pensi quando si gira lo schermo di un portatile.
Quando i compagni di viaggio hanno davvero bisogno dei dati
Questo è il vincolo reale: organizzare un viaggio impone di condividere. Orari d'incontro, contenuto dei biglietti, indirizzo dell'hotel.
In ordine di preferenza:
Prima la funzione di condivisione nativa della piattaforma. GetYourGuide, Klook, Booking.com e la maggior parte delle altre permettono di condividere o trasferire una prenotazione a un compagno. Per via ufficiale la validità resta sotto controllo della piattaforma e non nasce nessuna schermata che circola.
Seconda scelta: mandare testo, non immagini. «26/09, ore 9, ingresso principale, i biglietti li ho io» trasmette tutto il necessario a rischio zero.
Terza scelta: immagine con controllo d'accesso. Per contenuti davvero visivi — una tabella d'itinerario complessa, una mappa — usa qualcosa con controllo d'accesso invece di un post aperto.
Su lpic.cc puoi impostare una password di visualizzazione al caricamento, così il link breve regge gli inoltri. Le password sono salvate con hash bcrypt, non confrontate in chiaro. Per un itinerario destinato a «solo queste cinque persone» è nettamente più controllato che lasciarlo circolare in un gruppo.
I limiti, detti subito: immagini fino a 8 MB, file conservati 30 giorni dall'ultima visualizzazione, caricamenti ottimizzati automaticamente e originali non conservati. E soprattutto — una password ferma chi non deve vedere, non chi è autorizzato e fa una schermata per inoltrarla. Ogni meccanismo di condivisione ha questo soffitto. Non prenderlo per assoluto.
L'ultima linea di difesa resta la stessa: un titolo davvero sensibile non dovrebbe mai diventare un file immagine.
Domande frequenti
D1: Ho pubblicato una carta d'imbarco tempo fa. Cancellarla serve ancora?
Cancellare limita l'esposizione futura ma non dimostra che nessuno l'abbia salvata. Contano di più altre due cose: cambiare subito password e domande di sicurezza di quell'account della compagnia, e verificare che le prenotazioni future non siano state modificate. Nel caso Krebs, la prima cosa che l'attaccante poteva fare era cambiare posti e cancellare voli.
D2: Qualcuno ha scansionato il mio voucher Klook. Posso entrare lo stesso?
Dipende dal tipo di biglietto. Un voucher a uso singolo già utilizzato risulta usato all'ingresso. Contatta subito l'assistenza della piattaforma, tenendo presente che l'esito non è garantito e che in alta stagione i tempi si allungano. Qui la prevenzione batte nettamente la riparazione.
D3: Basta pixelare il codice QR?
No, e l'ho misurato. Su tutti e tre i livelli di correzione, pixelatura e blocco pieno avevano soglie di fallimento identiche: un biglietto di livello alto richiedeva il 25 % di superficie coperta prima di smettere di essere leggibile. Usa un blocco opaco sull'intera area del codice o, meglio, coprilo fisicamente prima di scattare.
D4: La mia conferma mostra solo riferimento e nome. C'è comunque un rischio?
Sì. Nome e riferimento bastano su alcune piattaforme a interrogare lo stato di una prenotazione, e con le date del soggiorno il kit per l'ingegneria sociale è completo. Lo schema che si ripete nei casi reali è che l'attaccante non ha mai bisogno della tua password, solo di frammenti sufficienti a convincere un operatore.
D5: E le foto di viaggio in sé?
Rischio di natura diversa. Lì il problema principale è il GPS negli EXIF. La maggior parte dei social li rimuove al caricamento, mentre i servizi cloud e l'invio «come file originale» in genere li conservano intatti. Come si comporta ciascun servizio sta in il nostro test EXIF campo per campo su 8 servizi.