V prosinci minulého roku se na „mediální scéně“ objevila masivní databáze 1,4 miliardy přihlašovacích jmen a hesel v čitelné podobě. Byla to již minimálně od srpna známá kompilace dříve uniklých dat, ten soubor nebyl výsledkem nějakého nového útoku. Podobnými databázemi jsou „kombo“ seznamy známé pod jmény antipublic a Exploit.in, ty se na veřejnosti objevily v květnu minulého roku, dohromady obsahují miliardu loginů a hesel a tvoří tak podstatnou část té 1,4mld. databáze.
Troy Hunt tuto „prosincovou databázi“ do svého vyhledávače Have I Been Pwned? nenahrál, prý už tam naprostá většina těch e-mailů je, ale já jsem v ní nalezl účet, u kterého jsem nejdříve nemohl odhalit původní zdroj úniku. Po chvilce jsem přišel na to, že heslo pochází z MySpace, ze kterého data unikla pravděpodobně v roce 2008. Majitele onoho účtu trochu zmátlo, že data z MySpace obsahovala pouze hash prvních 10 znaků hesla, což se projevilo i v té 1,4mld. databázi – heslo bylo zkráceno na 10 znaků.
Název webu v heslu
Nemalá část uživatelů při vytváření hesla do něj zakomponuje název webu, na kterém to heslo pak používají. Soubor z úniku Mall.cz obsahoval 5981 hesel, která obsahovala slovo „mall“ (1192 hesel obsahovalo „mall.cz“ a 2069 „mallcz“), 165 uživatelů obchodu Xzone.cz mělo heslo, které obsahovalo „xzone“, a heslo 316 uživatelů SkTorrentu obsahovalo „sktorrent“.
Tohle zjištění můžeme otočit: když bude únik dat obsahovat několik stovek hesel například „examplecom“ je skoro jisté, že data pocházejí z webu example.com. Ta „prosincová databáze“ obsahovala 5,8 milionu e-mailových adres, jejichž doména končila na „.cz“, a když jsem se zaměřil na hesla těchto uživatelů, začínal jsem vidět některé opakující se názvy: 256 účtů mělo v heslu neobvyklé (na heslo) slovo „nevyhazuj“, 212 hesel obsahovalo „nevyhazujto“. Podíval jsem se i do výše zmíněných „kombo“ databází: v Exploit.in bylo celkem 388 hesel s „nevyhazuj“, 328 s „nevyhazujto“, v antipublic celkem 304 hesel s „nevyhazuj“, 256 s „nevyhazujto“.
Pár set hesel, která obsahují „nevyhazujto“, to už nebude náhoda. Byl jsem si jist, že jde o data ze služby Nevyhazujto a že tento únik někdo zařadil i do „kombo“ databází antipublic, Exploit.in i té „prosincové“. Tuhle teorii potvrzuje i fakt, že v těch databázích je několik adres ve tvaru něco+nevyhazujto@gmail.com.
Bezpečnostní chyba
Tu službu jsem neznal, chtěl jsem ji tedy blíže prozkoumat. Dočetl jsem se, že v září 2017 spustilo Nevyhazujto společně s Magistrátem hlavního města Prahy web praho.nevyhazujto.cz:
Tenhle pražský web není na HTTPS a přihlašovací údaje neposílá zabezpečeným způsobem. Alespoň že ten nepražský na HTTPS je. Po vyplnění jména a hesla a odeslání přihlašovacího formuláře se sestaví požadavek, který se metodou GET odešle na server:
https://www.nevyhazujto.cz/login?email=foo@example.com&pass=heslo
Hesla uživatelů jsou tedy nejspíš v logu serveru v čitelné podobě. Pro registraci platí to samé, přihlašovací údaje (v případě Prahy navíc posílané po nezabezpečeném protokolu HTTP) budou nejspíš v logu serveru:
http://www.praho.nevyhazujto.cz/add_new_user?email=foo@example.com&name=foo&pass=heslo
Zajímavá je také kontrola přihlašovacího jména, ta z nepochopitelného důvodu odesílá i heslo, pokud je vyplněné:
http://www.praho.nevyhazujto.cz/name_validation?email=foo@example.com&name=foo&pass=heslo
Tyto velmi podstatné drobnosti se postaraly o správné nastavení očekávání, které zůstalo nezklamáno. Při registraci i pokusu o přihlášení pomocí vygenerovaného hesla, které obsahovalo znak apostrof ( '
) mi web vrátil chybovou hlášku ER_PARSE_ERROR
. Ta prozradila špatné zpracování vstupních dat a možnost spáchat útok SQL Injection a získat tak obsah databáze:
Chyba se objevovala i v dalších částech webu, někde se změnila na ER_DERIVED_MUST_HAVE_ALIAS
, což naznačovalo použití poddotazů.
Hesla byla uložena pomocí algoritmu SHA-256, jenže v databázi byly některé tabulky (jako třeba ta s názvem user_fixed
), které obsahovaly hesla v čitelné podobě. Celkem v databázi webu Nevyhazujto bylo necelých 35 tisíc e-mailů a hesel v čitelné podobě. Nemalou část z nich (odhaduji většinu) již někdo získal a zveřejnil.
Kdy k úniku mohlo dojít, netuším, ale pravděpodobně to už bylo před nějakou dobou: „komba“ Exploit.in a antipublic pocházejí z konce roku 2016. Zneužitím výše uvedené chyby bylo možné databázi získat ještě koncem prosince 2017.
Vyhozená komunikace
Fajn, teď už víme, že část těch „kombo“ databází pochází z Nevyhazujto, víme i pravděpodobný způsob úniku. Ví to i majitelé služby? Chvíli jsem hledal, ale nikde se mi nepodařilo najít informaci o tom, že by Nevyhazujto mělo nebo reagovalo na nějaký bezpečnostní problém nebo únik dat. Chybu a únik jsem chtěl tedy nahlásit, ale nebylo to tak jednoduché:
- 17. prosince 2017
Na adresu tym@nevyhazujto.cz jsem poslal zprávu o pravděpodobném úniku, s popisem chyby i doporučením informovat uživatele a zabezpečit jejich hesla. Žádná reakce.
- 21. prosince 2017
Poslal jsem e-mail znovu, přidal jsem informaci o tom, že bych o tom chtěl v půlce ledna napsat článek, ale že rád počkám do konce ledna. Žádná reakce.
- 7. ledna 2018
Již lehce zoufalý píšu na Facebook dotaz, jestli někdo nezná někoho v Nevyhazujto. Příspěvek píšu tak, aby nebylo jasné, proč se ptám, Nevyhazujto v něm označuji. Později píšu e-mail přímo majiteli Robertu Dvořákovi. Zároveň to vypadá, že web již chybové hlášky typu
ER_PARSE_ERROR
nevrací, aspoň něco. - 8. ledna 2018
Přišla odpověď od Roberta Dvořáka, děkuje za zprávu, prý ji přepošle programátorovi, který se se mnou spojí. Podobná odpověď přišla i Honzovi P., který po mé fejsbůkové žádosti o pomoc Robertu Dvořákovi také napsal. A tím to haslo, nic se nestalo.
- 31. ledna 2018
Posílám Robertovi Dvořákovi tento článek předem, aby o něm věděl z první ruky.
Rada na závěr
Pokud máte na Nevyhazujto účet, považujte heslo k němu za uniklé, a to do doby, než provozovatel neprovede níže uvedené kroky. Pokud ho používáte i jinde, tak si ho všude jinde změňte (a přestaňte používat jedno heslo na více místech). Změna hesla na Nevyhazujto je také dobrý nápad, ale nestačí to, protože hesla se nejspíš ukládají na serveru do logu v čitelné podobě, což musí vyřešit majitel webu. Nastavte si notifikace na Have I Been Pwned?, abyste se o dalším případném úniku včas dozvěděli.
Pokud se tak ještě nestalo, tak Nevyhazujto by mělo (v tomto pořadí):
- zabezpečit kód, aby již nešel provést útok SQL Injection
- přesunout praho.nevyhazujto.cz na protokol HTTPS
- změnit posílání přihlašovacích údajů z metody GET
- bezpečně zlikvidovat existující logy, pokud obsahují hesla v čitelné podobě
- vymazat hesla uživatelům a poslat jim odkaz na nastavení nového hesla
- informovat příslušný úřad (ÚOOÚ) o úniku
A když už v tom budou, tak by mohli HTTPS nastavit trochu lépe (známka B není nejhorší, ale získat lepší není těžké), přidat nějaké ty bezpečnostní hlavičky (neposílají žádnou) a zlepšit skóre v Mozilla Observatory (známka F bohužel odpovídá). Taky by neškodilo, kdyby na webu zveřejnili způsob ukládání hesel, rád bych si je přidal na svůj seznam.