Mohl jsem unést 629 účtů na LinkedInu zaregistrováním smazaných neaktivních e-mailových adres (nebo adres s překlepy) na Seznam.cz. Ale neudělal jsem to, samozřejmě.
V květnu 2016 byla zveřejněna ukradená databáze LinkedInu a pár dní poté Rob „Mubix“ Fuller na svém blogu publikoval příspěvek o unášení LinkedIn účtů pomocí zaregistrování expirovaných nebo překlepových domén, které uživatelé používali pro registraci na LinkedIn. Mubix mě přivedl na nápad (díky!) zkusit udělat podobný výzkum. Z nějakého důvodu se jeho výsledky dozvídáte s drobným zpožděním.
Seznam.cz nabízí tři domény pro vaše e-mailové adresy: @seznam.cz
, @email.cz
a @post.cz
. Účtů s některou z těchto domén jsem v LinkedIn datech našel celkem 75898.
Dříve Seznam.cz mazal nepoužívané účty, teď už to prý nedělají. Potvrdilo mi to několik lidí ze Seznamu, ale jen mimo záznam nebo neoficiálně. (Tak už i oficiálně, viz vyjádření Seznamu o kus níže.) Jenže Smluvní podmínky služby Email.seznam.cz stále říkají, že Seznam.cz nepoužívané schránky může odstranit:
3.7. Provozovatel si vyhrazuje právo vymazat emailové schránky:
3.7.4. do nichž Uživatel po dobu delší než 6 měsíců nepřihlásil,
A tak mě napadlo, že možná Seznam některé ty schránky už smazal, protože lidé je přestali používat, ale zapomněli si je na LinkedInu změnit. Naštěstí zjistit, jestli je adresa na Seznamu volná, je docela jednoduché a dá se to automatizovat. Když se chcete zaregistrovat, tak se na pozadí kontroluje, jestli vámi vybrané uživatelské jméno je dostupné. Dělá se to tak, že se pošle požadavek na:
https://registrace.seznam.cz/api/v1/username-check/availableaddress@seznam.cz
Vrátí se JSON, který obsahuje "available": true
když je možné zvolenou adresu (v tomto případě availableaddress@seznam.cz
) zaregistrovat:
Napsal jsem si jednoduchý skript, který prošel všech 76 tisíc adres a přes API zkontroloval, jestli jsou dostupné. Říkal jsem si, že to nemůže vyjít, no, a tak jsem ten skript spustil. Byly 2 ráno a šel jsem spát. Ten skript ani neposílal víc požadavků zároveň, nepoužíval žádnou proxy, žádnej Tor, jen rychlostí 5 požadavků za vteřinu všechny adresy za 4 hodiny zkontroloval. Zcela jasně API na kontrolu dostupnosti adresy nemělo žádné omezení, takže jsem to později ten samý den, 25. června 2016, nahlásil kamarádovi, který pracuje v Seznamu v týmu CSIRT. Před pár dny (25. března 2017) jsem to zkusil znovu a zdá se, že tam stále není žádné omezení. Tentokrát mi to zahlásilo 611 volných adres.
V létě roku 2016 mi ten můj skript vrátil 629 účtů na Seznamu, které bylo možné zaregistrovat. To je zhruba 0,8 % všech účtů na Seznamu, které v tom LinkedIn dumpu byly. Všechny ty účtu jsem si mohl zaregistrovat a požádat LinkedIn, aby mi na ně poslal odkaz na reset zapomenutého hesla. Samozřejmě jsem to udělal, chtěl jsem vědět, jestli ty účty na LinkedInu patří reálným lidem.
Zaregistroval jsem si 7 náhodných adres, šel na LinkedIn a nechal si poslat odkaz na zapomenutá hesla. E-mail s odkazem obsahuje footer message, tzn. vaše jméno a pozici, díky kterým odlišíte pravé e-maily z LinkedInu od „phishingových“ zpráv
, takže jsem na LinkedInu ty lidi mohl najít podle jména a došel jsem k závěru, že to opravdu jsou normální lidé. Žádná hesla jsem nikomu nezměnil, účty na Seznam.cz jsem smazal hned po obdržení toho odkazu na reset hesel.
Seznam volných adres obsahuje vcelku hodně evidentních překlepů (jako např. mihcal.foobar@seznam.cz
), API Seznamu vrátí "available": false
, když ten překlep opravíte. Ale i přesto jsou tyhle „překlepové“ e-maily přiřazené k profilům na LinkedInu, ačkoliv asi ne moc často používaným.
Útočníci by s těmito unesenými účty mohli udělat v podstatě cokoliv. Takovou klasikou je nějak podvést kontakty těch účtů.
Pokud veřejně poskytujete e-mailové schránky, jako např. Seznam.cz, tak byste neměli mazat nepoužívané schránky a měli byste aktualizovat své podmínky, aby to bylo oficiální, a lidé mohli svou adresu používat k něčemu vážnějšímu. Žádný rozumný poskytovatel by přece existující účty nemazal, ne? (Poznámka: Seznam.cz prý smaže schránky zcela nevyužité po dobu 14 dní od svého vytvoření
, ale to je myslím celkem v pořádku.) Taky by dávalo smysl trochu omezit vaše API na kontrolu dostupných uživatelských jmen.
Když máte službu, do které se lidé mohou zaregistrovat bez ověření e-mailové adresy, tak můžete minimalizovat překlepy v doménách přidáním knihovny Mailcheck do registračního formuláře:
Překlep v registračním formuláři na Slevomatu
Mimochodem, Google vám pomocí Správce neaktivních účtů umožňuje zvolit co se stane s vaším účtem, když jej přestanete používat.
Článek jsem před vydáním kamarádsky poslal do Seznamu, když už o nich píšu. PR manažerka Seznamu Irena Zatloukalová mi v odpovědi potvrdila, že e-mailové účty opravdu neruší, a ani jednou založenou schránku později neuvolňují k dalšímu použití. To je dobrá (a oficiální) zpráva, díky za ni! Jenže možnost zrušení schránky, pokud se do ní uživatel po dobu delší než 6 měsíců nepřihlásil, v podmínkách ponechají, podle Seznamu to prý dává smysl. Až po přečtení odpovědi ze Seznamu mi také došlo, že smazání (dat) neznamená uvolnění adresy pro novou registraci. Takže možná jsou všechny ty adresy opravdu jen „překlepové“ nebo na špatné doméně a Seznam žádnou adresu od roku 2012, kdy došlo k úniku z LinkedInu, nerecykloval. Na možnosti získat přístup k těm šesti stům účtů to moc nemění, ale nerad bych Seznamu křivdil.
Mluvčí také podotkla také, že Seznam.cz nenese zodpovědnost za to, že se někdo překlepne při zadávání e-mailové adresy do jiné služby. To je pochopitelné, takže jestli chcete mít jistotu, že uživatelé zadali správnou adresu při registraci, tak ji musíte zasláním e-mailu ověřit.
Lehce přiškrcovat API na kontrolu dostupnosti adresy naopak podle Seznamu smysl nedává, útočník by prý omezení pomocí různých IP adres stejně dokázal obejít, přestože by mu to trvalo déle.
Svatá pravda, ačkoliv za sebe musím říct, že shánět desítky různých IP adres by tento malý experiment nesmyslně prodražilo. Ne že bych je musel kupovat, díky nezměněným defaultním heslům, Toru a VPN jich máte běžně k dispozici docela dost, ale musel bych změnu IP adres automatizovat a to by nějaký čas zabralo. A čas jsou přece peníze, takže bych se na to nejspíš vykašlal a šel dělat něco užitečnějšího :-)