APM bezpečnostní audit: checklist, který potřebuje každý vývojář před publikováním
Bezpečnostní checklist pro vývojáře před publikováním balíčků na npm
Když vydáváte open-source balíčky přes npm, vstupujete do prostředí, které se v posledním roce stalo cílem sofistikovaných útoků. Útoky na balíčky už dávno nejsou jen teoretickou hrozbou a prosté testování „funguje to u mě“ už před publikováním nestačí.
Podívejme se na klíčové bezpečnostní otázky, které by měl řešit každý zodpovědný maintainer.
Proč je nutné kontrolovat balíčky před jejich vydáním
Ekosystém npm je obrovský a jeden balíček se může dostat do tisíců aplikací. Právě proto se stal atraktivním cílem pro útoky – od krádeže přístupových údajů až po infiltraci CI/CD prostředí.
Dobrá zpráva je, že většině těchto rizik se dá předejít, pokud použijete správné nástroje a postup.
Dvanáct hlavních hrozeb pro npm balíčky
1. Kompromitace účtu a škodlivé publikování
Když útočník získá přístup k vašemu npm účtu, může vydat upravenou verzi balíčku s vloženým škodlivým kódem. Uživatelé si ho pak automaticky nainstalují.
Jak se bránit:
- Zapněte 2FA na npm účtu
- Používejte samostatné access tokeny místo hlavního hesla
- Nastavte schvalovací proces pro publikace
- Sledujte záznamy o publikování
2. Lifecycle hooks – kód se spustí už při instalaci
npm dovoluje používání hooks jako preinstall nebo postinstall. Příngrarizace balíčku v tomto případě umožňuje útočníkovi spustit kód ještě před načtením samotného balíčku.
Jak se bránit:
- Každý hook v
package.jsonsi pořádně prohlédněte - Zvažte, zda hook opravdu potřebujete
- Pokud ano, buďte maximálně transparentní
- Raději používejte build-time řešení
3. Samoreplikující se worms
Někteútočník může vytvořit balíčku, který se šíří do dalších balíčků v node_modules. Tento typ útoků se vůně snáze ukrytě a zanechává méně stop.
Jak se bránit:
- Během instalace neměňte souborový systém
- Nepište do jinerech balíčků
- Izolujte závislosti
- Pravidelně používejte
npm audit
4. Útoky na CI/CD prostředí
Balíčky, kterů se dostanou do vaší build pipeline, získávají přístup k credentials pro deployment a registry. Tato hrotní Ebene přesnější kontrolu pot
5. Git-based dependency smuggling
Pokud instalujete závislosti přes Git, obcházíte bezpečnostní kontrolu npm registry. Útočník tak může zneužít malicious fork na GitHubu.
Jak se bránit:
- Závislosti raději pinujte na registry verzích
- Pokud musíte Git použit, ověřte commit hash
- Nikdy nepoužívejte
latestnebo větve z neznámých repo
6. Dynamické závislosti za běhu
Některé balíčky si stahují a spouští kód až za běhu programu. Tato technikapermits útočníkům vkládat plně malicious payloads bez statické deklarace v package.json.
Jak se bránit:
- Všechny závislosti deklarujte staticky
- Nepišíte dynamische
require - Používejte static analysis tools
7. Phishing infrastruktura skrytá v balíčku
Balíček může obsahovat infrastrukturu pro phishing nebo credential harvesting. Přližný zbránit se tím dá tím, vyhledávání a ověřování.
Jak se bránit:
- Buďte transparentní o funkci balíčku
- Označte vaše domény a dokumentaci
- Implementujte CSP headers
- Monitorujte typosquatting
8. Krádež secrets a credentials
Malicious package při instalaci může číst .env files nebo CI/CD environment variables.
Jak se bránit:
- Nikdy necommitujte secrets do version control
- Používejte secret management
- Implementujte principle of least privilege
9. Exfiltrace dat
Stolen data se obvykle exfiltruje přes DNS nebo image requests.
Jak se bránit:
- Monitorujte outbound connections
- Používejte egress controls
- Question any external calls
10. Persistence
Malicious code se můžedotýkat cron jobs nebo environment configurations.
Jak se bránit:
- Review filesystem changes
- Implementujte file integrity monitoring
- Use containerization
11. Obfuscation
Malicious code často obfuscated.
Jak se bránit:
- Keep code readable
- Publish source maps if minified
- Use deobfuscation tools
12. Package naming abuse
Typosquatting je stále problém.
Jak se bránit:
- Register common misspellings
- Use namespaced packages
- Monitor copycat packages
Pre-Publication Checklist
Bezpečnostní checklist:
- [ ] 2FA na npm account
- [ ] No hardcoded secrets
- [ ] Minimal hooks
- [ ] No dynamic loading
- [ ] No modifications to node_modules
- [ ] Dependencies pinned to registry
- [ ] No unexplained external calls
- [ ] Code readable
- [ ] Scanner run (socket.dev, snyk)
- [ ] Peer review
- [ ] Audit log ready
Proces checklist:
- [ ] Changelog
- [ ] Security policy
- [ ] Maintainer info
- [ ] License
- [ ] Repository link
- [ ] README clear
Shifting left on security
Bezpečnost musí být součásti procesu od začátku,而不是 před přenčím publikování.
- Think like attacker
- Automate scanning
- Stay informed
- Be transparent
- Assume breach
Když se rozhodnete vydat balíček
npm je mocný nástroj. Každý balíček, který vydáváte, má přístup k filesystem a influence build process. Nejlepší maintainers se k té