10. 04. 2014

OpenSSL je open source knihovna, která poskytuje základní kryptografické funkce, je dostupná pro všechny běžně používané operační systémy. Jednou z funkcí je SSL/TLS, poskytující zabezpečení komunikace a soukromí na Internetu - web (https), e-mail, chatovací klienti a aplikace pro připojení do VPN.

Charakteristika zranitelnosti

Zranitelná funkce v knihovně OpenSSL je označována jako TLS Heartbeats (RFC 6520). Tato funkce byla do OpenSSL přidána teprve nedávno (v prosinci 2011) a slouží k udržování šifrovaného spojení mezi serverem a klientem i v případě, že ani jedna ze stran nemá data k odeslání. Zároveň umožňuje potvrdit, že komunikace je stále otevřená a end-to-end konektivita pracuje správně. Obecně komunikace funguje na základě vytvoření žádosti na jedné straně a zaslání odpovědi od protější strany. Stejné to je i v tomto případě. Maximální velikost žádosti heartbeat je omezena 16kB, ve skutečnosti OpenSSL generuje mnohem menší žádosti (34B). Programátor funkce tuto skutečnost ale nebere v potaz a pro kontrolu maximální velikosti žádosti využívá hodnotu 16kB definovanou standardem. Dva bajty z celkové reprezentace žádosti (34B) jsou použity pro určení velikosti zasílané žádosti. Při nastavení maximální hodnoty tohoto pole (0xFFFF), lze protější straně (serveru) říci, že příchozí žádost má velikost 65 535B.

Komunikace tedy probíhá následovně. Na straně klienta je vytvořena žádost o standardní velikosti, ale do pole velikosti zasílané žádosti je útočníkem zapsána maximální hodnota (65535B). Jelikož byla vytvořena žádost o standardní velikosti, tedy menší než 16kB. Projde žádost bez problémů kontrolou velikosti odesílané žádosti.

Protější strana (server) následně tento paket obdrží od odesílatele a uloží jej do operační paměti, která je přidělena aplikaci OpenSSL. Odpověď serveru se následně skládá z kopie užitečných dat (payloadu) žádosti, čím dochází k ověření, že komunikace mezi serverem a klientem i nadále probíhá. Server se tedy podívá do bytů, ve kterých je uvedena velikost příchozí žádosti. Vidí, že hodnota obsažená v těchto dvou bytech je 0xFFFF (65 535B) a začne s vytvářením odpovědi, kdy po nakopírování skutečné velikosti příchozí žádosti začne kopírovat i data, která jsou uložena za žádostí. To znamená, že s každou takto zaslanou žádostí dojde k úniku cca 64kB náhodných dat z operační paměti přidělené aplikaci OpenSSL. Tato data mohou podle vyjádření finského National Cyber Security Centre v krajním případě zahrnovat části zpráv, uživatelských pověření, klíče relací a dokonce i kopie soukromých klíčů severu.

Postižené systémy

Aplikace využívající verzi OpenSSL 1.0.1 až f a verzi 1.0.2 beta.

Řešení

Upgradovat na novější verzi OpenSSL 1.0.1 g nebo 1.0.2 beta2.

CVE

CVE-2014-0160

Odkazy

http://www.theregister.co.uk/2014/04/08/running_openssl_patch_now_to_fix_critical_bug/
https://bugzilla.redhat.com/show_bug.cgi?id=1084875
http://heartbleed.com/
http://nakedsecurity.sophos.com/2014/04/08/anatomy-of-a-data-leak-bug-openssl-heartbleed/