Sprawdzian bezpieczeństwa APM – co musisz zrobić przed publikacją
12 punktów, które musisz sprawdzić przed publikacją paczki na npm
Pisanie i udostępnianie paczek to nie tylko kod i dokumentacja. W dzisiejszych czasach trzeba też myśleć o bezpieczeństwie, bo jedna złośliwa wersja może trafić do tysięcy projektów i narobić poważnych szkód.
Dlaczego warto poświęcić czas na audyt bezpieczeństwa
npm to ogromny ekosystem, w którym jedna paczka potrafi rozprzestrzenić się błyskawicznie. Wystarczy jeden błąd, a atakujący może uzyskać dostęp do danych użytkowników lub przejąć kontrolę nad procesami budowania. Większość takich incydentów da się jednak uniknąć, jeśli zadba się o podstawowe zabezpieczenia przed publikacją.
Główne zagrożenia, na które warto zwrócić uwagę
1. Przejęcie konta i złośliwa publikacja
Najgorszy scenariusz to sytuacja, w której ktoś włamie się na Twoje konto npm i opublikuje zmodyfikowaną wersję paczki. Użytkownicy automatycznie pobierają nową wersję, a złośliwy kod trafia do ich systemów.
Jak się bronić:
- Włącz dwuskładnikowe uwierzytelnianie na koncie npm
- Korzystaj z tokenów dostępu z ograniczonym zakresem zamiast głównego hasła
- Włącz zatwierdzanie publikacji dla ważniejszych paczek
- Regularnie sprawdzaj historię publikacji
2. Skrypty instalacyjne – kod uruchamiany podczas instalacji
npm pozwala na uruchamianie skryptów takich jak preinstall lub postinstall. Jeśli attacker przejmie paczkę, może w ten Weise wykonać dowolny kod w momencie instalacji.
Jak zmniejszyć ryzyko:
- Sprawdzaj dokładnie każdy skrypt instalacyjny w package.json
- Zastanów się, czy naprawdę potrzebujesz uruchamiać kod podczas instalacji
- Jeśli skrypt jest niezbędny, niech będzie prosty i transparentny
- Rozważ przeniesienie logiki na etap budowania zamiast instalacji
3. Robaki rozprzestrzeniające się po node_modules
Niektóre ataki polegają na modyfikowaniu innych paczek w folderze node_modules. Złośliwy kod potrafi się w ten Weise rozprzestrzeniać i zmieniać behavior innych zależności.
Jak się chronić:
- Nie modyfikuj plików innych paczek podczas instalacji
- Unikaj bezpośredniej ingerencji w strukturę
node_modules - Zawsze używaj
npm auditi narzędzi do skanowania zależności
4. Ataki na tożsamość w pipeline'ach CI/CD
W procesach budowania przechowywane są często tokeny i poświadczenia. Jeśli złośliwa paczka trafi do takiego procesie, attacker może uzyskać dostęp do całego systemu.
Jak się chronić:
- Używaj tokenów z minimalnym zakresem uprawnień
- Rotuj poświadczenia regularnie
- Nie przechowuj poświadczeń w skryptach paczki
- Oferuj audyt dostępu do sekretów
5. Zależności pobierane bezpośrednio z Git
Gdy instalujesz zależności z Git zamiast npm registry, pomijasz wiele zabezpieczeń. Atakujący może w tym Weise dystrybutować złośliwy widelec.
Jak się chronić:
- Unikaj zależności z Git – zawsze preferuj wersje z registry
- Jeśli musisz użyać Git, weryfikuj konkretny hash commita
- Nie używaj
latestlub gałęzi z nieznajomych repozytoriów
6. Dynamiczne pobieranie zależności podczas działania
Niektóre paczki fetchują i wykonują kod w czasie rzeczywistym. Ta practice tworzy dodatkowe powierzchnie do ataku,并且 jest trudne do kontroli.
Jak się chronić:
- Wszystkie zależności powinny być deklarowane statycznie w package.json
- Nie pobieraj i nie execute kodu dynamicznie
- Używaj narzędzi do analizy statycznej,已 wykrywać dynamiczne
require
7. Strony phishingowe w paczkach
Nie niektóre paczki służą do ukrywania phishingowych stron lub do harvesting credentiali. Paczka może wyglądać na normalną, but jednocześnie przekierowywać użytkowników na fałszywe strony.
How to protect users:
- Bądź transparentny o tym, co paczka robi
- Podaj oficjalne domeny i dokumentację
- Implementuj CSP headers na associated web properties
- Monitoruj typosquatting dla nazwy paczki
- Report suspicious packages immediately