A9 - Použití známých zranitelných komponent

A9 - Použití známých zranitelných komponent (Using Known Vulnerable Components)

Zranitelnosti umožňující napadení známých zranitelných komponent.

    Původce hrozbyVektor útokuBezpečnostní slabinaTechnické dopadyObchodní dopady
    Aplikační specifikum Zneužitelnost
    průměrná
    Rozšíření
    rozsáhlé
    Zjistitelnost
    obtížná
    Dopad
    střední
    Aplikační / obchodní specifikum
    Některé zranitelné komponenty (např. knihovny) mohou být identifikovány a zneužity automatickými nástroji. Skupina útočníků se tím rozšiřuje ze záměrných útočníků také o aktéry, kteří jednají náhodně. Útočník identifikuje automatickým skenováním nebo při ručním procházení stránek slabou komponentu. Útok přizpůsobí nalezené zranitelnosti a pak ho provede. Čím je zranitelná komponenta hlouběji v aplikaci, tím je útok obtížnější. Tyto nedostatky má mnoho aplikací, protože vývojáři nevěnují dostatečnou pozornost tomu, jestli jsou jejich komponenty a knihovny aktuální. V mnoha případech vývojáři ani nevědí, jaké komponenty využívají, tím méně znají jejich verze. Situaci ještě zhoršují závislosti mezi jednotlivými komponentami. Může se vyskytnout jakákoli zranitelnosti, např. injektování, prolomení přístupu do aplikace a XSS. Dopad se pak pohybuje od minimálního až po úplné převzetí kontroly nad hostitelem a kompromitaci dat. Je potřeba zvážit, jaký dopad může každá zranitelnost mít na činnost vaší organizace, kterou zajišťuje napadená aplikace. Může být nevýznamná, nebo naopak může znamenat naprostou kompromitaci.
    Jsem zranitelný vůči „použití známých zranitelných komponent“?

    Teoreticky by mělo být jednoduché zjistit, jestli nějakou zranitelnou komponentu v aplikaci používáte. Bohužel hlášení o zranitelnostech v komerčním nebo open source softwaru ne vždy jasně specifikují, které verze komponent jsou zranitelné. Navíc se ve všech knihovnách nevyužívá srozumitelný způsob číslovaní verzí. Nejhorší je, že ne všechny zranitelnosti jsou nahlašovány do centrálního, snadno prohledatelného systému. Je ovšem potřeba říci, že na stránkách jako CVE a NVD se postupem času vyhledává stále snáze.

    Zda váš systém obsahuje nějakou zranitelnou komponentu, zjistíte procházením těchto databází a neustálým sledováním e-mailových konferencí a oznámeních o možných zranitelnostech. Pokud nějaká komponenta zranitelnost obsahuje, je potřebné zkontrolovat, jestli váš kód příslušnou část této komponenty využívá a jaký dopad by mělo její zneužití.

    Jak mohu předejít „použití známých zranitelných komponent“?

    Jednou z možností je nepoužívat komponenty, které jste si sami nanapsali. To je však téměř nemožné.

    Mnohé projekty nevydávají bezpečnostní záplaty pro starší verze svých komponent. Místo toho se zranitelnosti většinou opravují v dalších verzích. Proto je důležité aktualizovat komponenty na tyto nové verze. Součástí softwarových projektů by měl být proces:

    • 1. Identifikace všech verzí používaných komponent včetně všech závislostí (např. pomocí zásuvného modulu Version).
    • 2. Sledování bezpečnosti těchto komponent ve veřejných databázích a projektových a bezpečnostních e-mailových konferencích a udržování jejich aktuální verze.
    • 3. Stanovení bezpečnostní politiky řídící používaní komponent. Tato politika by měla obsahovat požadavky na metodiku vývoje software, bezpečnostní testy a přípustné licence.
    • 4. Kde je to vhodné, přidat do komponent bezpečnostní prvky, které znemožní využívání jejich nepoužívaných funkcí a ošetří jejich slabé a zranitelné aspekty.
    Příklady možných útoků

    Kvůli zranitelnosti komponenty může dojít k široké škále rizik, ať už ji využije jednoduchý nebo komplikovaný škodlivý software vytvořený k útoku na konkrétní organizaci. Jednotlivé komponenty často běží s plnými právy aplikace, a proto je nebezpečí vážné v případě kterékoliv komponenty. Následující dvě zranitelné komponenty byly roku 2011 staženy 22miliónkrát.

    • Apache CXF Authentication Bypass – Pokud nastala chyba při zavádění identifikačního předmětu, mohli útočníci přistupovat k webovým službám s plnými právy. (Apache CXF je framework pro práci s webovými službami, nikoli webový server Apache).
    • Spring Remote Code Execution – Zneužití implementace Expression Language ve Springu umožnilo útočníkům vykonání libovolného kódu, což znamenalo převzetí kontroly nad serverem.
    • Každá aplikace, která využívá některou z těchto zranitelných komponent, je zranitelná, protože obě komponenty jsou dostupné uživateli aplikace přímo. Další zranitelné knihovny, které se používají hlouběji v aplikaci, jsou zneužitelné hůře.

    Odkazy
    OWASP: Externí:
    Originál o použití komponent se známými zranitelnostmi v angličtině