Microsoft zhruba před hodinou uveřejnil mimořádnou bezpečnostní aktualizaci pro ASP.NET, která zabraňuje možnému DoS útoku. V čem je problém? Pokusím se jej vysvětlit velmi zjednodušeně, pro detailní vysvětlení doporučuji odkazy na konci článku.

Při vývoj software se velmi často používají různé typy kolekcí klíč – hodnota. V různých programovacích jazycích se nazývají různě, ale základem je vždy nějaká forma hashovací tabulky, v níž se ukládají klíče a podle které se vyhledává.

Pokud vezmeme například klasickou C# kolekci se stringovým klíčem, nedochází při prohledávání z výkonových důvodů ke skutečnému porovnávání řetězců. Místo toho se spočítá hash, což je 32-bitové číslo, a dále se pracuje jenom s ním, což je výpočetně efektivnější. Každý objekt má metodu GetHashCode, která tento hash vypočítá.

Hash v tomto ohledu nemá nic společného s algoritmy jako je MD5, SHA-1, SHA-256 a podobně, algoritmus je mnohem jednodušší a náchylnější ke konfliktům. Slouží ke zjednodušení interních procesů, nikoliv k nějaké formě zabezpečení atd. Pro běžného programátora je tento mechanismus v podstatě neviditelný, hodnoty jsou pro něj nepoužitelné – jsou závislé na platformě a mohou se kdykoliv změnit. Pro porovnání ve většině případů tyto hashe stačí. Teprve v případě konfliktu se používají náročnější metody. Pravděpodobnost konfliktu je sice mnohonásobně větší, než v případě kryptografických hashovacích algoritmů, ale pro běžné použití postačuje. Nicméně, pokud by se kolekce naplnila klíči, které jsou speciálně navržené tak, aby tam ke konfliktům docházelo (a bude jich hodně), práce se dramaticky zpomalí, což může vést k Denial of Service útoku třeba u form fieldů při HTTP requestech.

Tento problém se netýká jenom ASP.NET, právě naopak – stejně jako v případě "padding oracle" problému se jedná o obecný návrhový problém, který mají prakticky všechny webové frameworky a řada dalšího software. Praktický útok byl otestován kromě ASP.NET i na PHP 5, Javu a V8 (JavaScriptový engine od Google) a za určitých okolností jsou napadnutelné i PHP 4, Python a Ruby.

Dnes v 19:00 Microsoft uvolnil mimořádnou bezpečnostní aktualizaci (out-of-band security update), která tento problém řeší. Záplata je k dispozici na Windows Update a stačí tedy dát vyhledat dostupné aktualizace a budou nabídnuty patřičné balíčky (podle verzí .NET Frameworku):

Screenshot

Problém není natolik kritický, aby bylo nutné záplatu bezpodmínečně instalovat teď hned a přijímat dramatická opatření. Není známo, že by v současné době takové útoky probíhaly a výsledkem může být jenom DoS po dobu trvání útoku, nedojde tedy k vyzrazení citlivých dat atd. Nicméně útok je principiálně velmi snadný a je jenom otázkou času, kdy někdo napíše nástroj použitelný i pro script kiddies, takže nedoporučuji s instalací ani příliš otálet.