Odborníci radí, na co dávat pozor
Bývalý zaměstnanec GitHubu, který pracoval na vývoji platformy NPM, zveřejnil podrobnosti o dosud nevyřešeném vážném bezpečnostním problému. Platforma při nahrávání nového softwaru do databáze nedostatečně kontroluje, zda se deklarované závislosti nového balíčku skutečně shodují s používanými závislostmi. Tématu se věnoval web Bleeping Computer.
Problém je v angličtině znám pod názvem „manifest confusion“ a v praxi představuje riziko proto, že hackeři jej mohou využít k podstrčení vlastního škodlivého kódu. Když bude vývojář nebo běžný uživatel spoléhat pouze na informace zobrazené v databázi NPM, o ukrytém škodlivém kódu nebude vůbec vědět.
Software proto bude považovat za bezpečný a jeho instalací se kriminálníkům následně podaří infikovat počítač oběti. Konkrétní následky útoku pak závisí na konkrétním typu škodlivého kódu, který se hackerům podaří v podvrženém softwaru nenápadně „ukrýt“.
Co je npm?
NPM je správce softwarových balíků pro JavaScriptové prostředí Node.js a zároveň jejich největší repozitář pro platformu JavaScript. Dostupných je v něm přes milion balíků. NPM umožňuje vývojářům snadno instalovat hotový software a předpřipravené moduly do vlastních projektů a používat je jako závislosti.
Tyto balíčky mohou obsahovat různé funkce, knihovny, šablony nebo jiný kód, který pomáhá při vývoji aplikací v Node.js. Platforma NPM je důležitá proto, že vývojáře odlehčuje od programování součástí, které již pod open-source licencí vyvinul někdo jiný, čímž zjednodušuje práci s kódem a zvyšuje efektivitu.
Informace v databázi lze manipulovat
S publikací softwarových balíků v rámci NPM se od jejich autorů vyžadují mimo jiné dvě základní činnosti – nahrání samotného balíku a také vytvoření zvláštního manifestu pro NPM. Samostatný manifest vyžadovaný platformou NPM přitom obsahuje data, která již má softwarový balík definovaný v sobě, v rámci souboru package.json.
Jedná se o různá metadata jako například informace o verzi softwaru či závislosti na jiném softwaru. Informace uvedené v samostatném manifestu platforma NPM přebírá pro své potřeby a zobrazuje je při používání v konzoli nebo například ve webovém rozhraní.
Problém ale spočívá v tom, že NPM nekontroluje shodu mezi samostatným manifestem a skutečnými metadaty softwarového balíku. Systém se proto plně spoléhá na svědomitost vývojářů a uvedení korektních informací z jejich strany.
Bývalý zaměstnanec GitHubu Darcy Clarke upozorňuje, že záškodníci kvůli tomuto nedostatku mohou uvést v nahrávaném manifestu nepravdivé informace. To jim umožňuje například zamlčet některé softwarové závislosti, které software využívá a při instalaci je automaticky načte.
Pokud by se hackeři rozhodli tento druh útoku uskutečnit v praxi, do softwarového balíku publikovaného v NPM by mohli jako závislost přidat škodlivou knihovnu či malware. Oběti by v NPM tuto podezřelou závislost neviděly a mohly by se proto rozhodnout pro jeho instalaci. Jak jsme však naznačili v úvodu, při instalaci by tento balíček načítal i svou škodlivou závislost (malware) a tím by infikoval počítač oběti.
Odborníci však varují, že problém se netýká jen závislostí. Podle šéfa kyberbezpečnostní firmy Socket Ferosse Aboukhadijeho mohou kriminálníci stejným způsobem zamlčet i přítomnost instalačních skriptů.
Varoval již loni
Softwarový inženýr Darcy Clarke konkrétně tvrdí, že na bezpečnostní problém upozorňoval odpovědné osoby již loni, konkrétně v listopadu. Microsoft jako majitel GitHubu, který zastřešuje platformu NPM, však podle něj nepodnikl dostatečná opatření pro zamezení rizika.
Když se nic nedělo, problém znovu nahlásil prostřednictvím platformy HackerOne v březnu letošního roku. Firma ještě ten měsíc hlášení uzavřela s odpovědí, že problém už interně řeší. Přesto dosud nebyl opraven a týká se všech známých správců jako npm, yarn či pnpm.
Co je třeba dělat?
Uživatelům NPM a vývojářům, kteří spoléhají na platformu při své práci, je proto důrazně doporučeno manuálně kontrolovat všechny instalované softwarové balíky. Nikdo by se aktuálně neměl spoléhat jen na informace zprostředkované NPM, ale ověřovat si metadata přímo ve zdrojových kódech a například zmíněném souboru package.json.