[CZ] Tentokrát se LeoExpress stalo víc veřejné než by mělo - veřejný přístup k jízdenkám a datům uživatelů

in #czech6 years ago (edited)

[Poznámka: Jsem polák a stále se učím mluvit (a psát) česky, tak se omlouvám za chyby v textu]

Příchod GDPR

Každý z nás v poslední době pravděpodobně dostal všechny ty emaily, vyskakovací okna s otázkou na akceptaci nových zákonů. Majitele služeb, které posílají masové emaily jistě mají radost s příjmu peněz, protože vy - uživatele - o tom musíte vědět a nejjednodušší je posílat zprávy tímto způsobem. Možná vás napadá - proč to vůbec někdo musí dělat?
Zkrátka: od 25. května 2018 za únik nebo zpracování osobních údajů bez souhlasu uživatele hrozí trest 10-20 milionů eur nebo 2-4% ročního celosvětového obratu firmy.
Tak to je hodně peněz.

Zastavka: Můj účet, okres únikov

V pátek (18. května 2018) jsem dostal email od LeoExpress v souvislosti s přijetím nových předpisů, abych mohl pořád patřit do skupiny “Smile Club” a dostávat v budoucnu nějaké slevy. Tak jsem se s tím souhlasil, protože občas cestuju a možná to i někdy použiju.
Během toho co jsem byl na jejich webové stránce, jsem si chtěl zkontrolovat jaké údaje mám na profilu, protože jsem si to moc dobře nepamatoval (vždyť zřídkakdy něco takového kontrolujeme podruhé). Mimochodem, zapnul jsem dev tools, protože jsem si chtěl zkontrolovat co se děje “v pozadí”.

Dotazů pro server nebylo hodně, přičemž jsem si dal pozor na dvě URL, protože byly zvláště krátké.
Jedná z nich obsahovala JSON s mými údaji, což mě trochu překvapilo, protože stránka se pokaždé načítala od začátku, tak jsem neviděl žádný důvod, proč by to mělo dělat další request do API.

Zkontroloval jsem si taky, co aplikace posílá serveru. Ukázalo se, že data jsou stahovány z databáze GraphQL:

[POST] https://graph.leoexpress.com/le

Vidíme, že v zakrytých místech byl můj email a token. V takovým případě bych se měl cítit bezpečně, že jo?
No jo, ale vím proč jste tady :)

Našel jsem na Google email spojený s nějakým názorem na LeoExpress. Předpokládal jsem, že to bude jejich uživatel a bude existovat v systému - a našel jsem to!
Změnil jsem svůj email na tento nový a dostal jsem přesně to, co jsem (ne)chtěl: Jméno, příjmení, adresa, telefonní číslo a další informace, třeba jako cestování, body, atd.

Tak toto znamená, že token není kontrolovaný a můžu si najít jakéhokoliv uživatele. Už to není sranda, i přestože nebezpečí velkého úniku dat není vysoké. Potřebujeme znát email a přitom náš uživatel musí mít vyplněný profil.
Momentálně jsem napsal LeoExpress a dal jsem jim vědět o této chybě, napsal jsem taky jejich agentuře SYMBIO AGENCY. Právě tato firma dělá stránku pro LeoExpress. Odpověď jsem dostal ve stejný den (pátek večer!) a v sobotu.
Agentura mi poslala email od lidí z IT, abych jim napsal. Poslal jsem jim všechny informace, a protože jsem chtěl vědět s kým si vůbec budu psát, snažil jsem se najít email na Google…

Přestávka na kviz!

Nápověda: k otázce budete potřebovat nelogické myšlení a špatnou programátorskou praxi

Pokud na serveru ve výrobním prostředí (to které používají opravdoví uživatelé) je výrobní databaze, tak na testovacím prostředí (takové, které používají programátoři LE, aby zkontrolovali jestli vše správně funguje) je databáze:

    a) výrobní
    b) výrobní
    c) výrobní
    d) výrobní

Odpověď poznáte až za chvíli!

Kontrola jízdenek!

Vrátíme se k hledání toho člověka, se kterým bych se měl kontaktovat. Našel jsem ho, teda asi jeho jízdenku, která zůstala zaindexovana přes Google na testovacím serveru.

Jízdenka z března tohoto roku. Obsahuje jméno, příjmení a email cestovatele.

Jednou jsem cestoval s LeoExpress a svojí starou jízdenku mám na emailu, protože LeoExpress posílá informace o objednání + jízdenka jako PDF. V nazve PDF je ID jako číslo, tak jsem změnil ID na testovacím serveru na moje a voilà - máme mojí jízdenku z listopadu 2017:

Ano, to znamená že jste správně odpověděli na předchozí otázku! Gratuluji!

Některé z vás možná napadá otázka, jak jsem proboha otevřel jízdenku jiného člověka?
Odpověď na to je podobná, jako v předchozím případě - chybělo ověření přístupu. Hledal jsem dál na stránce LeoExpress a našel jsem si možnost stahování svých jízdenek.

https://www.leoexpress.com/download-pdf/[ID_OBJEDNAVKY]

Zkontroloval jsem několik náhodných ID a moje oči začaly krvácet (jako metafora, ne doopravdy, klídek)

Zapněte si bezpečnostní pásy!

  • LeoExpress má ~800 000 uživatelů (v API můžete zkontrolovat, jaké je ID našeho nového účtu)
  • Většina prvních ID (například 1, 2, 3, 30000+, 40000+, atd) ukázalo nějaký výsledek až do té doby, kdy změnili format ID. To ale neznamena, že s tím nikdo nic neudělá, protože pořad existuje možnost iterovat přes ID (třeba nějakým skryptem), protože to je pořád číslo.

Když už máme obrovsky počet (desítky/stovky tisíc) PDF s emaily, můžeme se začít ptát API, který jsem zmínil na začátku článku, a stahovat osobní údaje. Jméno a příjmení už mám na jízdence, ale telefonní číslo a adresa jsou taky docela cenné.
Ale k čemu bych to všechno potřeboval?
Věděl bych jakou třídou, kdy a s kým jezdíte, tedy kdy nejste doma a také bych vám rád volal v sobotu ráno s nějakou zajímavou reklamou na hrnce :D

Zpáteční do “Bezpečí” prosím!

Chyba umožňující iterovat ID jízdenek byla opravena několik dní potom co jsem to nahlásil LeoExpress (změnu jsem viděl už 23.05.2018). Odkaz URL, kvůli kterého jste mohli stahovat jízdenky byl zabezpečen přihlašovacím jménem a heslem (na testovacím prostředí) a k odkazu ke stažení PDF je připojený jedinečný řetězec znaků (výrobní server).
API, ze kterého jste mohli stahovat data uživatelů, už správně kontroluje token. Bohužel, na tohle jsem čekal dlouho, protože změna byla provedena až 14.06.2018.

Konec cesty, vystupte!

Jak celý tenhle příběh skončil?
Další týden potom, když se v API nic nezměnilo, jsem poslal email, ve kterém jsem se ptal na to, jak to teď bude vypadat podle nových zákonů GDPR.
Byl jsem požádán o mobilní číslo, protože Head of Finance z LeoExpress mi chtěl zavolat a popovídat si. Rád jsem mu svoje číslo poslal několik minut před pátečním rozhovorem (15.06.2018).
Během toho rozhovoru mi Head of Finance poděkoval za to, že jsem tu chybu našel a ohlásil. Vysvětlil mi, proč změny trvaly tak dlouho a že kvůli tomu dostanu vouchery na cestování s LeoExpress

Před zveřejněním tohoto článku jsem znovu napsal agentuře SYMBIO AGENCY na Facebooku o plánovaném článku, aby o tom jistě věděli. O několik hodin později se mi zase ozval Head of Finance LeoExpress a v emailu mě poprosil, abych v článku nepoužíval název firmy LeoExpress, protože když to udělám, budou do toho muset zapojit právníky.

“please only make sure you do not mention the company name as this would be a huge red flag for our lawyers”

I přes to všechno, domluva byla velice dobrá, protože jsem byl informován o postupu práce LeoExpress a SYMBIO AGENCY přes FB a email skoro okamžitě :)

Coin Marketplace

STEEM 0.18
TRX 0.15
JST 0.029
BTC 62214.82
ETH 2429.20
USDT 1.00
SBD 2.68