Aku; DR
Ma ka lā 14 o Kepakemapa, 2025, ua ʻike nā mea noiʻi Shai Hulud, he ilo e hoʻohua ponoʻī ana i hūnā ʻia i loko nā pūʻolo npm, e hoʻololi ana i kahi hoʻohou hilinaʻi maʻamau i kahi pae piha hoʻouka kauaʻIke mua ʻia ma ka @ctrl/tinycolor pūʻolo na Daniel dos Santos Pereira, hōʻiliʻili ʻo Shai-Hulud i nā mea huna, hoʻopuka iā lākou ma o nā repos GitHub a me nā kahe hana, a hoʻopuka hou iā ia iho ma ke kau inoa me ka hoʻohana ʻana i nā palapala hōʻoia i ʻaihue ʻia. I loko o nā lā, ua lele ka nui o nā pūʻolo i loaʻa i ka maʻi mai nā ʻumi a i nā haneli, e hōʻoia ana i kēlā ʻO Shaihulud ʻaʻole ia he trojan ʻē aʻe akā he ilo i hoʻolālā ʻia e hoʻolaha aunoa ma ka ʻōnaehana npm.
Pākuʻi: aia kekahi mea hoʻomohala a i ʻole CI runner e hoʻokomo ana i nā pūʻolo npm lehulehu i ka pilikia.
Nā hana koke: e ālai i nā mana i ʻike ʻia, e hoʻololi i nā hoʻonohonoho lockfile-wale nō, e hoʻololi i nā hōʻailona npm a me GitHub, e nānā i nā kahe hana, a e nānā no nā Indicators of Compromise (IoCs).
He aha i hana ai?
ka Hoʻouka kaua kaulahao lako Shai-Hulud i nā pūʻolo npm ʻo ia kekahi o nā hanana hoʻopilikia loa i ka hoʻomanaʻo hou. ʻAʻole e like me nā trojans i hoʻokaʻawale ʻia, hui pū kēia ilo ʻaihue palapala hōʻoia, exfiltration hana ponoʻī, a me ke kope ponoʻīNo laila, ua emi ka manawa o ka maʻi mai nā pule a i nā hola wale nō.
No nā hui DevOps, ua maopopo ka haʻawina: inā hiki i kēlā me kēia hoʻonohonoho ke hoʻokō i ke code, a laila ʻo kēlā me kēia hoʻololi hilinaʻi he wahi hiki ke uhaki.
Nā Palapala Hōʻoia Vector Mua a me nā Palapala Hōʻoia i Manaʻo ʻia
Ka loiloi mua hōʻike ʻia ua hoʻomaka paha ka hoʻouka kaua me nā palapala hōʻoia i ʻaihue ʻia. No ka laʻana, nā hoʻolaha phishing e hoʻopunipuni ana i ka npm login a i ʻole ua hopu paha nā ʻōkuhi MFA i nā hōʻailona hoʻomohala. I ka loaʻa ʻana o kēlā wāwae mua i nā mea hoʻouka, ua laha ka ilo ma ke komo ʻana iā ia iho i loko o nā pūʻolo npm a me ka ʻaihue ʻana i nā mea huna hou aʻe mai:
- nā faila hoʻonohonoho npm like me
.npmrc, pinepine i loaʻa nā hōʻailona hoʻolaha. - Nā hoʻololi kaiapuni a me nā hoʻonohonoho me nā GitHub PATs a CI/CD mea huna.
- Nā wahi hopena metadata ao (AWS, GCP, Azure) e hāʻawi ana i nā hōʻoia pōkole no ka neʻe ʻana o ka ʻaoʻao.
No laila, ua lilo ka ʻaihue palapala hōʻoia i mea hoʻomaka. Me nā hōʻailona npm kūpono a me nā mea huna GitHub, hiki iā Shai-Hulud ke hana hou iā ia iho ma nā pūʻolo a me nā waihona he nui me ka ʻole o ka hoʻoikaika kanaka hou.
Ka Hopena Hoʻokō o ka Hoʻouka Kaulahao Lako Shai-Hulud
Ke hana mau nei ʻo Shai-Hulud i kēia lā. Hoʻolalelale kēia ilo i ka manawa hopena. ʻO ka mea i hala i nā pule me kahi trojan i kēia manawa e wehe ʻia i loko o nā hola. ʻO ka hopena, ʻoi aku ka wikiwiki o ka laha ʻana a ʻoi aku ka paʻakikī o ka kāohi ʻana. Ke holomua nei ia ma:
- Ke ʻaihue nei i nā hōʻailona hoʻopuka npm a me nā mea huna GitHub.
- Ke hoʻopuka hou nei iā ia iho i loko o nā pūʻolo npm ʻē aʻe.
- Ke hoʻohui nei i nā kahe hana GitHub Actions ʻino no ka hoʻomau.
ʻO wai ka mea i hoʻopilikia ʻia:
Ua hōʻike ʻia kēlā me kēia hui e hoʻokomo i nā pūʻolo npm lehulehu. Eia kekahi, ke kū nei nā mea hoʻomohala me nā hōʻailona npm cache a i ʻole GitHub i ka pilikia nui. He nāwaliwali nō hoʻi nā mea holo CI e hoʻohana ana i nā mea huna ākea.
Ka pilikia ʻoihana
Piʻi koke ka hopena o ka ʻoihana. Hiki i nā hōʻailona i ʻaihue ʻia ke alakaʻi i ka lawe ʻana i ka moʻokāki, ka hao ʻana i nā pūʻolo, a me ka hoʻohana hewa ʻana i ke ao. Eia kekahi, ʻo ka hoʻomau ʻana i nā kahe hana GitHub e paʻakikī ai ka hoʻomaʻemaʻe. No laila, pono nā kime e mālama iā Shai-Hulud ma ke ʻano he hanana e hoʻomau nei, ʻaʻole ia he mea i pani ʻia.
Pehea e hana ai ka Shai-Hulud Supply Chain Attack i nā pūʻolo npm
Nā pahuhopu a me ke kumu o ka mea hoʻouka
Hoʻomaikaʻi ka hoʻolaha no ʻekolu mau mea:
- ʻO ka pahuhopu mua ka ʻaihue i nā palapala hōʻoia ma ka nui mai nā kamepiula lawe lima a me nā mea holo CI. Hoʻokomo pū kēia me nā hōʻailona hoʻopuka npm, nā hōʻailona GitHub, a me nā hōʻoia ao. ʻO ka ʻoiaʻiʻo, ua hōʻoia nā loiloi he nui i ka ʻohi huna ʻōnaehana, e like me ka holo ʻana iā TruffleHog a me ka nīnau ʻana i nā hopena metadata ao.
- ʻO ka lua o ka pahuhopu, ʻo ia ka hoʻolaha aunoa ma ka hoʻomāinoino ʻana i nā kuleana hoʻopuka o nā mea mālama i hoʻopilikia ʻia. ʻO ka hopena, hoʻonui koke kekahi wāwae i nā mea he nui, ʻoiai e ʻike ʻia nā mana hou o nā pūʻolo ʻē aʻe me ka ʻole o ka hoʻoikaika hou ʻana o ke kanaka.
- ʻO ke kolu o ka pahuhopu, ʻo ia ka hoʻomau a hoʻokuʻu i waho me ka hilinaʻi ma o ke kahua ʻo GitHub. Hoʻokumu nā mea hoʻouka i kahi repo lehulehu i kapa ʻia ʻo "Shai-Hulud" me kahi base64 pālua ʻikepili.json, a eia kekahi, kanu lākou i kahi kahe hana e hoʻopaʻa ana i nā serializes ${{ toJSON(nā mea huna) }} a hoʻouna iā ia i kahi webhook paʻa.
ʻO ka uku kūpono e pili ana i ke komo lōʻihi i nā hoʻopaʻa inoa a me ke code kumu, ka neʻe wikiwiki ʻana i nā moʻokāki ao, a me ke koho e hoʻohana hou aku i ke kaulahao lako. Hōʻike ka hōʻike lehulehu i nā repos pilikino i hoʻohuli ʻia i ka lehulehu me kahi "-neʻe ʻana" pākuʻi hope, kahi e hoʻonui ai i ka hōʻike ʻikepili a me ka momentum
I loko o ka uku ukana ʻo Shai-Hulud: pūʻolo.js i loko o nā pūʻolo npm
Nā moku ʻo Shai-Hulud ma ke ʻano he nui, hoʻopili ʻia me Webpack a hoʻemi nui ʻia Waihona JavaScript (pūʻolo.js, ma kahi o 3–3.7 MB) e hoʻokō ana mai kahi ma hope o ke kau ʻana hoʻopaʻa i loko pakete.jsonNo laila, Hoʻāla koke kēlā me kēia hoʻouka ʻana i ka ukana. Hūnā kēia hoʻolālā i nā mea hōʻike, hoʻopili i ke kahe kaohi, a hoʻokuke i nā logic āpau i loko o hoʻokahi artifact e hoʻokō ʻia i ka wā o ke kau ʻana. Hōʻoia mau nā mea loiloi i ka hoʻopili ʻana o Webpack, ka nui faila ʻokoʻa, a me ka hoʻokō manawa hoʻouka.
Nā ʻano Obfuscation a me anti-analysis āu e ʻike ai i nā laʻana:
- Kiʻikuhi modula i hoʻemi ʻia me nā ID module helu, nā manaʻo kakaikahi, a me ke kahe hoʻomalu palahalaha. Eia kekahi, ʻO kēia ʻano hana e paʻakikī loa ai ka loiloi lima ʻana.
- Ka peʻe ʻana o ke kaula ma o nā papa base64 a me nā mea kōkua kūkulu. Eia kekahi laʻana, ʻIke pinepine ʻia ka hoʻopili ʻana a me ka wehewehe ʻana o ka base64 a puni nā hana exfiltration.
- Hoʻouna ʻana i ka hoʻololi ʻana ma loiloinā ʻano hoʻohālike a me nā kino hana i hana ʻia, no laila e hiki ai i ke code ke hoʻololi i ke ʻano i ka wā holo.
- Kānana ʻōnaehana hana e makemake i ka hoʻokō ʻana o Linux a me macOS ma nā mea holo CI a me nā kamepiula lawe mea hoʻomohala.
Mai kahi kihi hana, he modular ka pūʻolo. Hōʻike nā kākau i nā modula no ka ʻike ʻana o ka OS, nā faila filesystem a me nā git secret scans, ke komo ʻana o ka cloud SDK, nā hana GitHub API, a me kahi ʻenekini hoʻolaha e hoʻoponopono ana i nā pūʻolo ʻē aʻe a ka mea mālama e nona ana. ʻO ka ʻoiaʻiʻo, hōʻike ʻo StepSecurity lāua ʻo ReversingLabs i kahi hana e hoʻohou hou i nā pūʻolo me ka makau ʻino.
Hoʻokō Manawa Hoʻokomo ma Shai-Hulud: Pehea e hoʻoulu ai nā pūʻolo npm i ka ilo
Hoʻomaka ka hoʻouka kaua i ka wā holo ka node ma hope o ke kau ʻana pūʻolo.js. I kēia manawa, hoʻomaka ka script a wehe i ke kūlana hana ma ka hoʻomanaʻo, e hoʻonohonoho ana i ke kahua no ka hana piha o ka ilo.
Ka ʻike ʻana a me ka ʻohi ʻana
- Hoʻopau ka payload dumps i ka process.env a nānā i nā faila kūloko no nā mea huna entropy kiʻekiʻe a me nā prefixes hōʻailona. Eia kekahi, hoʻonui ia i ka uhi ʻana ma ka holo ʻana iā TruffleHog.
- Ke nīnau nei ia i nā kiko metadata ao e hōʻiliʻili i nā hōʻoia pōkole. ʻo kahi laʻana, kāhea aku iā
169.254.169.254ma AWS a i ʻolemetadata.google.internalʻIke pinepine ʻia ka GCP i nā poʻe i loaʻa i ka maʻi. - No laila, hiki ke hoʻohana koke ʻia kekahi hōʻoia i loaʻa e hoʻopuka i nā pūʻolo npm hou a i ʻole e hoʻokuke i nā kahe hana GitHub.
Exfiltration
- Hoʻokumu ka ilo i kahi repo GitHub hou i kapa ʻia Shai Hulud a kākau i kahi base64-encoded pālua
data.jsonme nā kikoʻī o ka paepae, nā ʻōpala kaiapuni, a me nā mea huna. E like me ka mea i ʻike ʻia, maʻalahi ke ʻike i kēia ʻano walaʻau inā ʻike nā mea pale i kahi e nānā ai. - Hoʻomoe pū ia i kahi kahe hana GitHub Actions, pinepine ma kahi lālā i kapa ʻia shai-hulud, e hoʻopaʻa ana i nā moʻolelo
${{ toJSON(secrets) }}a hoʻouna i ka ʻikepili i kahi webhook static. Eia kekahi, hoʻomau kēia kahe hana a hiki i ka wā e wehe ai kekahi.
Hoʻopōla
- Me kekahi hōʻailona npm i ʻike ʻia, helu ka payload i nā pūʻolo āpau i loaʻa i ka mea mālama i hoʻopilikia ʻia. A laila, kiʻi ia i kēlā me kēia tarball, hoʻokomo i ka bundle.js a me kahi komo postinstall, a hoʻopuka hou i ka pūʻolo.
- ʻO ka hopena, hiki ke ʻike ʻia nā ʻumi o nā pūʻolo i loaʻa i ka maʻi i loko o kekahi mau hola, e hoʻonui ana i ka radius o ka pahū ma waena o ka ʻōnaehana ola.
Ka hoʻomau a me ka hōʻike ʻana
Mālama ka ilo i nā kahe hana ʻino a, i kekahi mau hihia, hoʻohuli i nā repos pilikino i ka lehulehu me kahi "-neʻe ʻana" hope. Ma ke ʻano holoʻokoʻa, hōʻoia kēia i ka mea hoʻouka e mālama i kahi kūlana paʻa a hoʻonui i ka liki ʻikepili.
memo ʻike kī
ʻO kēia hoʻohana kūikawā ʻole ${{ toJSON(secrets) }} he mea kākaʻikahi nā kahe hana ma nā Hana. No laila, pono nā kime e mālama iā ia ma ke ʻano he hōʻailona hōʻailona kiʻekiʻe i ka wā o ka hahai holoholona.
ʻAno hana i hoʻomaʻemaʻe ʻia e pono ai ʻoe e ʻimi
ʻO kēia hoʻohana kūikawā ʻole i JSON(nā mea huna) he hōʻailona hōʻailona kiʻekiʻe ʻo in Actions i kēia hanana.
Pseudo-code hoʻolaha kiʻekiʻe (palekana, wehewehe)
Ua nānā nā mea loiloi i kēia loop ma ka pālākiō, ʻo ia ka mea e wehewehe ai i ka lele wikiwiki mai nā ʻumi a i nā haneli o nā pūʻolo i hoʻopili ʻia.
No ke aha he ilo kēia i loko o kahi ʻōnaehana pūʻolo
He polokalamu ʻino ka ilo e laha ana ma kāna iho me ka ʻole o ka koi ʻana i nā ʻanuʻu hana lima i kēlā me kēia pae. I loko o nā ʻōnaehana hana, hoʻohana pinepine nā ilo i nā nāwaliwali o ka pūnaewele e neʻe mai kekahi mīkini a i kekahi. I ka hoʻohālikelike ʻana, hana ʻo Shai-Hulud i loko o ka papa inoa npm. ʻO kona ala kūpono ma o ka hoʻohana hou ʻana i nā palapala hōʻoia.
Hoʻohana ka ilo i nā hōʻailona hoʻopuka npm i ʻaihue ʻia. Ke loaʻa iā ia nā palapala hōʻoia kūpono, hoʻopuka hou ia i nā mana i hoʻopilikia ʻia ma lalo o nā pūʻolo ʻē aʻe i nona ka mea mālama like. Ma hope iho, hoʻokomo ʻia kēlā mau pūʻolo e nā mea hoʻomohala kānalua ʻole a i ʻole nā mea holo CI, a hana hou ʻia ke kaʻina hana.
No kēia kumu, ʻo nā mea loiloi palekana, me Heluhelu Pouli, e hoʻokaʻawale iā Shai-Hulud ma ke ʻano he ilo hoʻohua ponoʻī ma mua o kahi trojan maʻalahi a i ʻole kahi hanana typosquatting. He mea nui ka ʻokoʻa: hoʻopilikia pinepine kahi trojan i hoʻokahi kikowaena, akā hoʻonui ka ilo i kona hopena ma o kahi kaiaolaola.
Palapala hoʻopunipuni "Pehea e hana ai"
I mea e hōʻuluʻulu ai i ke ola o Shai-Hulud, eia kahi conciska wehewehe ʻana i kāna mau ʻanuʻu nui:
- He pūʻolo me ma hope o ke kau ʻana ua hoʻokomo ʻia, a
bundle.jshoʻokō. - Hoʻopau ka payload i nā loli kaiapuni, nānā i nā faila a me ka mōʻaukala git, holo ʻO TruffleHog, a me nā nīnau i nā lawelawe metadata ao. No laila, lilo koke kekahi mea huna i loaʻa i mea pono.
- Hana ʻia ka exfiltration ma nā ʻano ʻelua: ʻo ka mua, ma ka hoʻokumu ʻana i kahi repo lehulehu i kapa ʻia Shai Hulud me kahi base64 pālua i hoʻopili ʻia
data.json; ʻo ka lua, ma ke kanu ʻana i kahi kahe hana GitHub Actions e hoʻouna ana${{ toJSON(secrets) }}i kahi webhook. - Me ka hoʻohana ʻana i kekahi hōʻailona npm i ʻaihue ʻia, hoʻopuka hou ka ilo i nā pūʻolo ʻē aʻe a pau i loaʻa i ka mea mālama i hoʻopilikia ʻia me ka makau ʻino like. Ma kēia ʻano, hoʻonui koke ka maʻi.
- ʻO ka mea hope loa, paʻa i ka mea hoʻouka nā mea huna hou aʻe, nā pūʻolo hou aʻe e hoʻolaha aku ai, a ka hoʻomau ʻana i loko o nā moʻokāki GitHub a me nā waihona.
Pehea e pale aku ai i kēia ʻano hoʻouka kaua, ma ke ʻano maoli
He kāhea hoʻāla ʻo Shai-Hulud. ʻO kahi ilo e ʻaihue ana i nā hōʻailona a hoʻopuka hou iā ia iho ʻaʻole ia he pilikia i ka wā e hiki mai ana, aia ia i loko o ka kaiaolaola pūʻolo npm i kēia lā. No ka pale ʻana i kēia ʻano o hoʻouka kaua, pono nā hui i nā kaohi e hiki ke hoʻolālā ʻia, hana ʻakomi ʻia, a hoʻokō pololei ʻia i loko CI/CD pipelines. ʻO kēia nā pale like hiki iā ʻoe ke hoʻokō mua me ʻO Xygeni.
E ho'ōki i nā mea hana maikaʻi ʻole ma ka puka pā
Pono ʻoe e scan i nā pūʻolo npm a me nā tarballs ma mua o ko lākou hiki ʻana i nā mea hoʻomohala a i ʻole nā hana CI. bundle.js nā faila, postinstall kānalua hooks, a me nā māka obfuscation e lawelawe āpau ma ke ʻano he mau hae ʻulaʻula mua. Eia kekahi, ʻo ka hoʻokō ʻana i nā wā hoʻomaha a me nā mana i hoʻopaʻa ʻia i loko pipelinepale ʻo s i nā hoʻokuʻu hou i nānā ʻole ʻia mai ka hoʻopau ʻia ʻana me ka ʻakomi.
ʻO Harden CI/CD ʻikeʻole
Guardrails in CI/CD he mea nui. Hōʻole lākou i nā hui a i ʻole nā hoʻonohonoho e hoʻolauna i nā palapala hou a i ʻole nā binaries. I ka manawa like, ālai lākou i nā kahe hana e hoʻokaʻawale i nā mea huna a hoʻāʻo paha i nā pou waho. Pono nā hui e koi i nā hoʻonohonoho lockfile-wale nō (npm ci) ma nā wahi āpau pipelinei hiki ke hana hou ʻia a palekana hoʻi nā hoʻonohonoho hilinaʻi.
E ho'ēmi i ka radius o ka pahū hōʻailona
ʻAʻole pono e lilo nā mea huna i mau wahi hoʻokahi o ka hāʻule ʻana. E nānā mau i ke code, nā hoʻonohonoho, a pipeline puka no nā palapala hōʻoia i hōʻike ʻiaPono e hoʻokaʻawale ʻia nā hōʻailona me ka liʻiliʻi, hāʻawi ʻia i nā ola pōkole, a hoʻohuli ʻia aunoa ke ʻike ʻia ka hōʻike ʻana. Ma ke ʻano he kānāwai, e mālama i kekahi hōʻailona i hoʻohana ʻia ma kahi kikowaena i hoʻokō i kahi postinstall kānalua e like me ka mea i hoʻopilikia ʻia.
E ʻike i ke ʻano o ka ilo i ka wā mua
ʻIke anomaly he kī. No ka laʻana, ʻo nā piʻi koke ʻana o nā hanana paʻi npm, nā kahe hana hou e ʻike ʻia me ke kumu ʻole, a i ʻole nā repos lehulehu hou i piha i nā faila i hoʻopili ʻia e hiki ke hōʻailona i ka hana ilo. No laila, pono nā hui e hoʻāla koke i nā makaʻala a hoʻokaʻawale i nā mea mālama a i ʻole nā mea holo e hōʻike ana i kēia mau hōʻailona hōʻike.
E hoʻoponopono koke me ka ʻole o ka uhaki ʻana i nā kūkulu
Pono e hele pū ka wikiwiki a me ka palekana. Hana ʻakomi pull requests hiki ke pani i nā pūʻolo npm i hoʻopilikia ʻia me nā mana i nānā ʻia. Eia kekahi, hiki ke hiki aku a hiki ke hoʻohana ʻia Hoʻomaopopo ka loiloi i ka liʻiliʻi a me ke kūpaʻa o nā hoʻonui. ʻO ka hope loa, kūkulu hou i nā mea holo CI i hoʻopilikia ʻia mai nā kiʻi maʻemaʻe ke hōʻoia ʻia ka hōʻike ʻana, e pale ana i ka hoʻouka kaua mai ka laha hou aku.
Nā Hōʻailona o ke Kuʻikahi (IoCs)
I ke kālailai ʻana iā Shai-Hulud, pono nā hui e makaʻala i nā mea ʻelua nā IoC kūpaʻa i loko o nā faila a me nā IoC hana in pipelines. I ka hui pū ʻana, kōkua kēia mau hōʻailona i ka ʻike mua ʻana i nā maʻi a pane ma mua o ka laha hou ʻana o ka ilo.
Nā IoC Paʻa
Ua ʻike ʻia nā kūlike o nā digests SHA-256 ma lalo nei bundle.js nā laʻana:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
Eia kekahi, e makaʻala i kēia mau ʻano hana hou:
- A
bundle.jsma ke kumu o ka pūʻolo. "postinstall": "node bundle.js"lokopackage.json.- Nā waihona i kapa ʻia Shai Hulud.
- Nā kaʻina hana GitHub e loaʻa ana
${{ toJSON(secrets) }}.
Nā IoC Hana
Ma waho aʻe o nā pūlima faila, hōʻike ʻia ka hana ilo ma o ke ʻano. Eia kekahi laʻana:
- Nā pahū koke o nā hanana paʻi npm mai kekahi mea mālama.
- Nā kahe hana hou e hoʻokuke ana i ka ʻikepili i nā wahi hopena o waho.
- Ua hoʻāla ʻia nā noi POST i waho mai nā mea holo CI.
- Nā repo lehulehu i hana hou ʻia me nā blobs i hoʻopāʻālua ʻia.
Nā hahai holoholona wikiwiki
Hopena: Nā Haʻawina mai Shai-Hulud
ka Hoʻouka kaua ʻana o ke kaulahao lako ʻo Shai-Hulud ma nā pūʻolo npm e hōʻike ana i ke ʻano palupalu o ke kaulahao lako polokalamu o kēia lā. Ua hana kēia ilo ma mua o ka hoʻohui ʻana i ke code ʻino. Ua ʻaihue ʻo ia i nā hōʻailona, hoʻouna i ka ʻikepili, a laila hoʻopuka hou iā ia iho. Ma muli o kēia, ua pālahalaha ka hoʻouka kaua i nā hola ma kahi o nā pule.
No nā mea hoʻomohala a me nā hui DevOps, ua maopopo nā haʻawina:
- Hoʻokele kēlā me kēia hoʻouka ʻana i ke code. Hiki i kahi pūʻolo npm maʻamau ke hūnā i kahi ilo postinstall.
- He waiwai nui ko kēlā me kēia hōʻailona. Ke ʻaihue ʻia, hiki ke hoʻohana ʻia e hoʻolaha hou aku i nā polokalamu ʻino.
- kela pipeline pono nā hōʻoia. ole guardrails ma nā mea hilinaʻi, nā kahe hana, a me nā mea huna, hiki i hoʻokahi ʻaelike ke hoʻopilikia koke i ka hana ʻana.
No laila, ʻo ka hoʻōki ʻana i nā hoʻouka kaua e like me Shai-Hulud e pono ai nā kaohi e hana aunoa a maʻalahi hoʻi e hoʻokō. Pono nā hui e scan i nā pūʻolo npm ma mua o nā hoʻouka ʻana, e hoʻohana i nā kūkulu lockfile, e ʻike i ka hana hoʻopuka ʻē, a mālama i nā hōʻailona no ka manawa pōkole. ʻAʻole koho hou kēia mau ʻanuʻu. Akā, ʻo lākou ke kumu o ke kūpaʻa i kēia au hou. pipelines.
Ma Xygeni, ʻike mākou i ka hoʻouka kaua ʻana o ke kaulahao lako ʻo Shai-Hulud ma ke ʻano he ʻōlelo aʻo no ka ʻōnaehana holoʻokoʻa open source. ʻO ke ala hoʻomau i mua, ʻo ia ka lawe pololei ʻana i ka palekana o ke kaulahao lako i ke kaʻina hana hoʻomohala, ma kahi e hoʻokomo ai ke code, nā pūʻolo npm, a me pipelinehoʻopili.
Aia ma lalo ka papa inoa piha o nā pūʻolo npm a me nā mana i hōʻike ʻia ua hoʻopilikia ʻia ma Shai-Hulud. E hoʻohana iā ia e nānā i kāu mau faila laka, nā hoʻopaʻa inoa, a me CI pipelines no ka hōʻike ʻana.
Papa inoa o nā pūʻolo i hoʻopilikia ʻia
📦 Nānā mua o nā pūʻolo npm i hoʻopilikia ʻia
| ʻAna inoa Peke | Version | Hōʻike i ka lā |
|---|---|---|
| ʻenekini-rula-json i hoʻomaʻalahi ʻia | 0.2.1 | 2025-09-14T17:58:51.203Z |
| pailota mokulele | 0.8.8 | 2025-09-14T18:35:07.600Z |
| kiʻi ʻike-mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| aliʻi mokulele | 0.3.1 | 2025-09-14T18:35:09.521Z |
| puka lele | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/puka-kāhea-hoʻi | 1.1.4 | 2025-09-14T20:31:38.479Z |
| @tnf-dev/api | 1.0.8 | 2025-09-14T20:31:39.547Z |
| @tnf-dev/js | 1.0.8 | 2025-09-14T20:31:41.251Z |
| @tnf-dev/mui | 1.0.8 | 2025-09-14T20:31:41.259Z |
| @tnf-dev/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/papa-pane | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/hōʻike | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-config | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-config | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/config-manager | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/mea hoʻopaʻa inoa | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/hōʻoia | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/core | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ E nānā i ka papa inoa piha o nā pūʻolo i hoʻopilikia ʻia
| ʻAna inoa Peke | Version | Hōʻike i ka lā |
|---|---|---|
| ʻenekini-rula-json i hoʻomaʻalahi ʻia | 0.2.1 | 2025-09-14T17:58:51.203Z |
| pailota mokulele | 0.8.8 | 2025-09-14T18:35:07.600Z |
| kiʻi ʻike-mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| aliʻi mokulele | 0.3.1 | 2025-09-14T18:35:09.521Z |
| puka lele | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/puka-kāhea-hoʻi | 1.1.4 | 2025-09-14T20:31:38.479Z |
| @tnf-dev/api | 1.0.8 | 2025-09-14T20:31:39.547Z |
| @tnf-dev/js | 1.0.8 | 2025-09-14T20:31:41.251Z |
| @tnf-dev/mui | 1.0.8 | 2025-09-14T20:31:41.259Z |
| @tnf-dev/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/papa-pane | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/hōʻike | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-config | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-config | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/config-manager | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/mea hoʻopaʻa inoa | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/hōʻoia | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/core | 0.2.1 | 2025-09-14T20:45:55.888Z |
| @hestjs/cqrs | 0.1.6 | 2025-09-14T20:45:55.966Z |
| @hestjs/scalar | 0.1.7 | 2025-09-14T20:45:56.386Z |
| hoʻouka-faila-ng2 | 7.0.3 | 2025-09-15T02:44:29.555Z |
| mea lawelawe hoʻomaopopo-capacitor | 0.0.2 | 2025-09-15T04:54:48.431Z |
| capacitor-plugin-vonage | 1.0.2 | 2025-09-15T04:54:48.501Z |
| capacitor-plugin-healthapp | 0.0.2 | 2025-09-15T04:54:48.704Z |
| nā ʻae ʻana o ka capacitorandroid | 0.0.4 | 2025-09-15T04:54:48.753Z |
| voip-callkit | 1.0.2 | 2025-09-15T04:54:49.223Z |
| capacitor-plugin-ihealth | 1.1.8 | 2025-09-15T04:55:08.113Z |
| @art-ws/maʻamau | 2.0.22 | 2025-09-15T05:21:15.411Z |
| @art-ws/config-eslint | 2.0.4 | 2025-09-15T05:21:17.199Z |
| ngx-ws | 1.1.5 | 2025-09-15T05:21:17.514Z |
| @art-ws/slf | 2.0.15 | 2025-09-15T05:21:17.524Z |
| @art-ws/http-server | 2.0.21 | 2025-09-15T05:21:17.745Z |
| pm2-gelf-json | 1.0.4 | 2025-09-15T05:21:18.413Z |
| @art-ws/di | 2.0.28 | 2025-09-15T05:21:18.488Z |
| @art-ws/di-node | 2.0.13 | 2025-09-15T05:21:18.849Z |
| @art-ws/config-ts | 2.0.7 | 2025-09-15T05:21:19.408Z |
| @art-ws/db-context | 2.0.21 | 2025-09-15T05:21:19.814Z |
| @art-ws/openapi | 0.1.9 | 2025-09-15T05:21:19.969Z |
| @art-ws/polokalamu-pūnaewele | 1.0.3 | 2025-09-15T05:21:20.383Z |
| @art-ws/ssl-info | 1.0.9 | 2025-09-15T05:21:20.927Z |




