Az NPM (Node Package Manager) kód-tárolója komoly biztonsági kihívásokkal néz szembe, miután támadók több mint 100 hitelesítő adatokat lopó csomagot helyeztek el a platformon augusztus óta, nagyrészt észrevétlenül. A Koi biztonsági cég legfrissebb jelentése rávilágít arra a gyengeségre, amely lehetővé teszi, hogy telepített csomagok automatikusan letöltsenek és futtassanak nem ellenőrzött, megbízhatatlan forrásból származó csomagokat.
A PhantomRaven kampány és az NPM sebezhetősége
A Koi által PhantomRaven néven követett kampány kihasználta az NPM egyik gyakorlatát, amely lehetővé teszi a „Remote Dynamic Dependencies” (RDD) használatát. Ez a mechanizmus lehetővé teszi, hogy egy csomag dinamikusan töltsön le függőségeket külső, nem megbízható webhelyekről – még HTTP protokollon keresztül is, amely nem titkosított.
A PhantomRaven támadók összesen 126 rosszindulatú csomagot töltöttek fel az NPM-re, amelyeket több mint 86 000 alkalommal töltöttek le. Ezek közül mintegy 80 csomag még a legutóbbi ellenőrzéskor is elérhető volt a platformon.
Miért veszélyes a Remote Dynamic Dependencies?
A hagyományos függőségek esetében a fejlesztők és a biztonsági eszközök láthatják és ellenőrizhetik azokat a könyvtárakat, amelyekre egy adott csomagnak szüksége van. Ezek általában az NPM megbízható infrastruktúrájáról töltődnek le, és verziózottak, így könnyebb nyomon követni őket.
Ezzel szemben az RDD lehetővé teszi, hogy egy csomag telepítésekor további függőségek töltődjenek le külső forrásból – ezek a függőségek azonban nem jelennek meg sem a fejlesztőknek, sem a statikus elemző eszközöknek. Emiatt ezek „láthatatlanok” maradnak, és az érintett csomagok úgy tűnnek, mintha nem tartalmaznának függőségeket.
A támadás működése és hatása
A PhantomRaven támadók beépítették ezt a gyengeséget az általuk feltöltött rosszindulatú csomagokba. A kód automatikusan letölti a káros függőségeket olyan URL-ekről, mint például:
http://packages.storeartifact.com/npm/unused-imports
Ezeket a függőségeket minden egyes telepítéskor „frissen” töltik le az elkövetők szerveréről – nem kerülnek gyorsítótárazásra vagy verziózásra –, így folyamatosan változtathatják vagy frissíthetik őket anélkül, hogy azt bárki észrevenné.
A hagyományos biztonsági eszközök korlátai
Koi szakértője, Oren Yomtov rámutatott: „A PhantomRaven jól mutatja, hogy a kifinomult támadók hogyan képesek kihasználni a hagyományos biztonsági eszközök vakfoltjait.” Mivel az RDD-k nem láthatók statikus elemzés során, ezek a támadások rejtve maradnak sok fejlesztő és biztonsági szakember előtt.
Milyen lépések szükségesek a védekezéshez?
- Fokozott figyelem az RDD használatára: A fejlesztőknek tudatosan kell kezelniük azokat a csomagokat, amelyek Remote Dynamic Dependencies-t használnak.
- Biztonsági eszközök fejlesztése: Olyan elemző megoldásokra van szükség, amelyek képesek felismerni és monitorozni az ilyen dinamikus letöltéseket.
- Csomagellenőrzés szigorítása: Az NPM-nek érdemes lenne korlátozni vagy alaposabban ellenőrizni az RDD-k használatát és az újonnan feltöltött csomagokat.
- Fejlesztők oktatása: Fontos tájékoztatni a fejlesztői közösséget erről a veszélyről és arról, hogyan védekezhetnek ellene.
Összegzés
A Koi által feltárt PhantomRaven kampány rávilágít arra, hogy az NPM jelenlegi működési modellje milyen súlyos biztonsági kockázatokat rejt magában. A Remote Dynamic Dependencies ugyan növeli a rugalmasságot és funkcionalitást, de egyben komoly sebezhetőséget is jelenthet – különösen akkor, ha rosszindulatú szereplők képesek ezt kihasználni hitelesítő adatok ellopására vagy más káros tevékenységekre.
Minden fejlesztőnek és szervezetnek érdemes átgondolnia az NPM-csomagok használatát és figyelmet fordítani arra, hogy milyen forrásból származnak azok dinamikus függőségei.