IT knowledge base
CTRL+F per cercare la tua parola chiave

Riceviamo un elenco di passeggeri sui voli del più grande vettore aereo in Ucraina

In questo articolo parleremo di come ho scoperto una vulnerabilità che mi ha permesso di ottenere un elenco di passeggeri sui voli di Ukraine International Airlines, il più grande vettore aereo in Ucraina, nonché l'atteggiamento della compagnia stessa nei confronti del fatto che tale le informazioni sono pubblicamente disponibili.
Più di un mese fa, ho iniziato a prepararmi per le mie vacanze ed era ora di prenotare i voli. Così sono finito sul sito dell'UIA. Nel processo di scelta dei posti sull'aereo, la pagina che avrebbe dovuto visualizzare la mappa dei posti non si è voluta caricare in alcun modo.

Ho deciso di aprire lo strumento per sviluppatori in Google Chrome per cercare di capire qual è il problema. Dopo aver esaminato le richieste al server, ho visto che i dati sui posti disponibili vengono restituiti dal server.
Dopo aver provato diversi browser, non ho ancora risolto il problema, tuttavia, ho notato che una richiesta che restituisce un elenco di posizioni disponibili è andata a buon fine in tutti i browser, nonostante i cookie di sessione fossero disponibili solo in Google Chrome.
La richiesta era simile a questa:
https://bookapi.flyuia.com/ancillary/seatmap?pnr=XXXXXX&currency=USD&flyuiacountrycode=uk&flyuialanguagecode=ru&locale=RU
dove XXXXXX è il PNR o il cosiddetto codice di prenotazione.
La risposta del server è stata la seguente in tutti i browser:
[ {
  "paxDetails" : {
    "uniqueId" : "2",
    "firstName" : "IVANOV",
    "title" : "Г-жа (Ms.)",
    "lastName" : "IVAN",
    "paxType" : "Adult",
    "cartPaxId" : "b1da2ebf-4525-35bd-afc1-b1f448132ad3"
  },
  "segmentDetails" : [ {
    "company" : "PS",
    "bookingClass" : "B",
    "flightNumber" : "1234",
    "departureAirport" : "KBP",
    "arrivalAirport" : "JFK",
    "departureDateTime" : "2018-02-01T00:05",
    "operatingAirline" : "PS"
  } ],
  "segmentId" : "1",
  "isAvailableForCheckIn" : true,
  "seat_rows" : [ {
    "seats" : [ {
      "id" : "aab4ca38-2c28-1f13-359d-4ad264d53a0e_1e80aae3-a68b-44de-ae14-aff839563612",
      "occupation" : "AVAILABLE",
      "letter" : "A",
      "rowNumber" : 4,
      "seatCharacteristics" : [ "W", "CH", "EK", "H", "for_infant" ],
      "price" : {
        "amount" : "16.00",
        "currency" : "USD"
      },
      "class" : "ECONOMY",
      "seat_type" : "SEAT",
      "ticket_value" : "FD3A"
   },...]
Ciò significava che le informazioni sui passeggeri erano disponibili a qualsiasi utente da qualsiasi dispositivo solo tramite il codice PNR. Pertanto, conoscendo il numero di prenotazione, qualsiasi utente potrebbe ricevere tali dati sul passeggero come cognome, nome, se si tratta di un adulto o di un bambino, numero del volo, aeroporti di partenza e di arrivo, ora di partenza.
Mi chiedevo quali altre "sorprese" avesse questo servizio.
Continuando con la biglietteria, ho scelto il punto di ordinare un posto per i bagagli.

La richiesta sembrava simile:
https://bookapi.flyuia.com/ancillary/luggage?pnr=XXXXXX&currency=USD&locale=RU 
Tuttavia, la risposta del server conteneva qualche informazione in più sull'utente:
[ {
  "paxDetails" : {
    "uniqueId" : "2",
    "firstName" : "ivan",
    "title" : "Г-н",
    "lastName" : "ivanov",
    "paxType" : "Adult",
    "dateOfBirth" : "1978-10-20",
    "cartPaxId" : "a30928c1-219b-8d15-8345-b517f0fda360"
  },...]
In questo modo sono state aggiunte ulteriori informazioni sul passeggero, come la sua data di nascita.
Infatti, non stiamo parlando di un passeggero, ma di tutti i passeggeri inclusi in questa prenotazione. Ad esempio, ho emesso biglietti per tutta la famiglia e le richieste di cui sopra contenevano informazioni non solo su di me, ma anche sul mio coniuge e sui miei figli.
In generale, parlando in termini di legge dell'Ucraina sulla protezione delle informazioni personali, personali
i dati sono informazioni o un insieme di informazioni su un individuo che è identificato o può essere specificamente identificato. I dati disponibili nelle query di cui sopra consentono, in alcuni casi, di identificare in modo univoco una persona senza nemmeno avere una data di nascita. Questo è il caso se la prenotazione contiene dati su più persone. Poiché tali persone sono almeno familiari, e in molti casi parenti, non sarà difficile identificarle utilizzando i social network. Pertanto, i dati esistenti, a mio avviso, possono essere considerati personali e il fatto che il pubblico abbia accesso agli stessi costituisce una violazione della legge sulla protezione dei dati personali. Ma non distraiamoci e continuiamo.
Esplorando ulteriormente le "capacità" del servizio, sono andato alla pagina di pagamento. Qui mi aspettava una nuova sorpresa. La richiesta sembrava:
https://bookapi.flyuia.com/payportal/transaction/123456?flyuiacountrycode=ua&flyuialanguagecode=ru&locale=RU
Funzionava anche in tutti i browser senza cookie di sessione:
{
  "id" : 211334,
  "payportal" : "UkrEximBank",
  "creationTime" : "2017-12-25 14:32:13",
  "status" : "INIT",
  "amount" : 15578.00,
  "currency" : "UAH",
  "errorCode" : 0,
  "errorCategory" : "UNDEFINED",
  "data" : "{\"Locale\":\"ru_RU\",\"ORDER\":\"000000450187\",\"PosId\":\"12e66438b256e10f74424133\",\"Pnr\":\"XXXXXX\",\"fopType\":\"CREDIT_CARD\",\"Country\":\"492ac4aae7f43c6e6a4336f9\",\"Passenger\":\"ivanov ivan\",\"PayerEmail\":\"ivanov.ivan@gmail.com\",\"BackReference\":\"https://book.flyuia.com/RU/default/paymentstatus\",\"OaDRoute\":\"01Feb18JFKKBP-10Feb18KBPJFK\",\"LANG\":\"UKR\",\"DESC\":\"XXXXXX, ivanov ivan, 01Feb18JFKKBP-10Feb18KBPJFK\"}",...}
La richiesta contiene diverse informazioni di pagamento, ma per noi è più importante la presenza di un parametro come il codice PNR. Come puoi vedere, la richiesta contiene un ID di transazione incrementale, il che significa che quando questo valore viene enumerato verso l'alto o verso il basso, gli aggressori saranno in grado di ottenere codici di prenotazione reali e utilizzarli nelle richieste precedenti per ottenere informazioni dettagliate sui clienti dell'azienda utilizzando il Codice PNR senza utilizzare un attacco di forza bruta.
Di conseguenza, un insieme di tutte le richieste vulnerabili consente agli aggressori di organizzare un servizio che sarà in grado di compilare un elenco di passeggeri delle compagnie aeree in tempo reale, inosservato dagli amministratori delle risorse. Tuttavia, l'elenco dei passeggeri non è un'informazione pubblica ed è protetto per motivi di sicurezza dalle compagnie aeree e, in alcuni paesi, dalle leggi. Di norma, solo i dipendenti dell'azienda e alcune agenzie governative hanno accesso a tali dati. Tanto più sono rimasto sorpreso quando, dopo aver contattato l'assistenza clienti UIA e informandoli della presenza di queste vulnerabilità, nel processo di corrispondenza e chiarimento dello stato della mia domanda, ho ricevuto la seguente risposta:

Tuttavia, quando è stato chiesto se forniscono un elenco di passeggeri sul volo su richiesta del cliente, mi hanno risposto negativamente.
Nonostante una risposta così strana da parte dell'azienda, gli sviluppatori hanno eliminato tutte le vulnerabilità di cui sopra entro un mese, il che mi ha rassicurato come cliente.
Come punto a parte, vorrei richiamare la vostra attenzione sul fatto che, ancora una volta, come nel caso di altre grandi società, UIA non dispone di un canale di comunicazione separato per segnalare le vulnerabilità rilevate. Quando ho chiesto di contattarmi con il servizio di sicurezza o gli sviluppatori responsabili, mi è stato rifiutato:

Riassumendo, voglio dire quanto segue.
Le compagnie aeree devono prendersi cura della sicurezza dei propri passeggeri non solo negli aeroporti e a bordo, ma anche sulla rete. Dopotutto, i dati dei passeggeri sono informazioni molto sensibili. Possedendolo, i ladri possono derubare l'appartamento della vittima mentre è via. Un ex coniuge può perseguitare la sua ex moglie, conoscendo i suoi movimenti. Un utente malintenzionato, dopo aver ricevuto i codici di prenotazione, può annullare in modo massiccio la registrazione dei passeggeri attraverso il sito Web della compagnia aerea, il che potrebbe potenzialmente portare a ritardi dei voli. Le informazioni pubbliche sui movimenti dei concorrenti commerciali possono essere dannose per le loro aziende. Esistono molti modi per utilizzare tali informazioni con intenti dannosi e dovrebbero essere protette di conseguenza.