Kad izstrādātājs palaiž npm install, pakotne nonāk uz diska, pirms notiek jebkāda drošības pārbaude — un bieži jau instalēšanas laikā izpildās preinstall un postinstall skripti. Jūlijā parādījās vairāki rīki, kas apgriež šo secību otrādi: instalāciju vispirms pārtver starpnieks, salīdzina pakotni ar ievainojamību datubāzi un tikai tad ļauj tai turpināt vai bloķē.
Atvērtā koda rīks refuse ievieto shim starp instalatoru un pakotņu reģistru. Pēc projekta datiem tas pārbauda pakotnes pret 362 000 zināmu ievainojamību 21 ekosistēmā. Divi citi rīki — nproxy un Thinkst Package Proxy — risina to pašu problēmu, katrs no cita gala.
Kā strādā shim
refuse pēc uzstādīšanas iestata 18 shim lietotāja mājas mapē un apvalko npm, pip, cargo, gem, go un vēl 13 pakotņu pārvaldniekus. Katra instalācija — vienalga, vai to ieraksta cilvēks, aģents vai CI — iziet caur refuse, pirms pieskaras reģistram. CVE-marķētas versijas tiek bloķētas ar drošas versijas ieteikumu. Komanda refuse fix npm next@15 atgriež versiju, ko drīkst instalēt, un to var iebāzt tieši instalēšanas komandā.
Rīks skenē arī lockfile, Dockerfile atkarības — tostarp apt, apk un dnf instalācijas konteinera būvējumā — un GitHub Actions darbplūsmas, katru darbību pārbaudot pret tieši to ref, ko izmanto tavs process. Aktīvi izmantojama exploit signāls nāk no CISA KEV kataloga, bet katrai CVE pievieno EPSS izmantošanas varbūtību. Licence ir Apache-2.0. Serveri var pašmitināt (ghcr.io/refusehq/refuse, ar SQLite pēc noklusējuma) vai izmantot mitināto slāni — bezmaksas plāns dod 100 000 skenējumu 30 dienās, bet vēl nepalaistais Pro slānis sola 5 miljonus skenējumu par 5 dolāriem mēnesī.
Thinkst iet apkārt klienta programmatūrai
Jūnijā drošības uzņēmums Thinkst, kas ražo Canary vilinājumus, izlaida Package Proxy — Cloudflare balstītu rīku, kas uz izstrādātāja mašīnas neinstalē neko. Daudzi pārvaldnieki (uv, pip, cargo, npm) metadatus iegūst no index URL. To var mainīt konfigurācijā, lai pārvaldnieks metadatus vilktu no Package Proxy. Ja pakotne neatbilst politikai, starpnieks atgriež 404; ja atbilst, tas pats paņem pakotni un pasniedz to klientam.
Viena no pārbaudēm ir vecums: pakotnei jābūt vismaz 10 dienas vecai (PyPI, npm, cargo). Ir arī atļauju un bloķēšanas saraksti visiem četriem pārvaldniekiem, un bloku var apiet, kad izstrādātājs skaidri palaiž npm audit fix. Pirmkods atrodams GitHub ar viena klikšķa izvietošanu Cloudflare.
Instalēšana ir kļuvusi par kontrolpunktu: kods vairs nenonāk uz diska, kamēr starpnieks nav to salīdzinājis ar ievainojamību sarakstu.
nproxy un astoņas kārtulas
nproxy apkalpo npm, pip, Cargo, Bun un citus pārvaldniekus un piemēro astoņas politikas kārtulas lokālajā vidē, CI, Docker un Kubernetes. Ļaunprogrammatūras bloks balstās uz Socket datiem, ievainojamību bloks — uz OSV datubāzi. Kārtula first_seen bloķē versijas, kas publicētas pēdējās 7 dienās, dodot ekosistēmai laiku tās pārbaudīt. Kārtula install_scripts brīdina, kad pakotnē ir preinstall, postinstall vai citi dzīves cikla skripti — tieši tie, kas izpilda svešu kodu instalēšanas brīdī.
nproxy pieliek klāt vēl divus slāņus: ražošanas izvietojums iziet cauri tikai tad, kad pakotņu, drošības un vides politika ir izpildīta, un katrs atļaušanas, bloķēšanas un izvietošanas notikums nonāk audita žurnālā, no kura var izvilkt SBOM. Uz sākumlapas nproxy citē Sonatype skaitli: 2023. gadā ekosistēmās atklātas vairāk nekā 245 000 ļaunprogrammatūras pakotnes, galvenokārt npm un PyPI. Rīku palaiž ar npx @nproxy/cli setup.
Kāpēc tieši tagad
Trīs līdzīgi rīki dažu nedēļu laikā nav sagadīšanās. Kopīgā iezīme ir tā, ka instalācija ir kļuvusi par vietu, kur pieņemt lēmumu. Daļēju iemeslu var nolasīt pašu rīku mājaslapās: refuse rāda sadaļu «What your agent would have refused today» un skaita pakotnes, ko AI aģents mēģina instalēt visbiežāk. Aģents palaiž npm install pats, bez cilvēka acs starp komandu un reģistru, tāpēc pārbaudei jānotiek instalēšanas ceļā, nevis izstrādātāja galvā.
Zem tā ir vecā problēma: npm un pip instalācija izpilda svešu kodu ar lietotāja tiesībām jau tad, kad pakotni tikai sagatavo būvēšanai. Klasiskie uzbrukumi — event-stream un ua-parser-js kompromitēšana — strādāja tieši tāpēc. Tie parādās arī nproxy uzskaitīto riska paraugu sarakstā.
refuse dzīvā padeve rāda, ko šis mehānisms noķer praksē. Vidū jūlijā tajā bija, piemēram, CVE-2026-47768 pakotnē nebula-mesh — tikko izveidota operatora API atslēga noplūst caur redirect URL Referer galvenē — un CVE-2026-48060 pakotnē litestar ar HTML injekciju caur CSRF marķieri. Abas pakotnes pēc noklusējuma tiktu atsakītas instalēšanas brīdī.
Avoti
- refuse.dev — Open-source shim that refuses vulnerable packages
- Thinkst — Introducing Package Proxy: supply-chain safety checks without client-side software
- nproxy — Stop risky packages before they reach production
- LinuxSecurity — The npm Supply Chain Problem: Why Installing Packages Executes Untrusted Code
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.