TL; DR
Ní ọjọ́ kẹrìnlá oṣù kẹsàn-án ọdún 2025, àwọn olùwádìí ṣàwárí Shai Hulud, kòkòrò tí ó ń ṣe àtúnṣe ara rẹ̀ tí ó fara pamọ́ sínú awọn idii npm, yí àtúnṣe ìgbẹ́kẹ̀lé déédéé sí ìwọ̀n pípé kolu ipese pqA kọ́kọ́ rí i nínú @ctrl/àwọ̀ kékeré àkójọpọ̀ láti ọwọ́ Daniel dos Santos Pereira, Shai-Hulud kó àwọn àṣírí jọ, ó yọ wọ́n kúrò nípasẹ̀ àwọn ibi ìpamọ́ àti àwọn iṣẹ́ ìṣiṣẹ́ GitHub, ó sì tún ṣe àtẹ̀jáde ara rẹ̀ káàkiri ibi ìforúkọsílẹ̀ nípa lílo àwọn ìwé ẹ̀rí tí a jí. Láàárín ọjọ́ díẹ̀, iye àwọn àkójọpọ̀ tí ó ní àkóràn fò sókè láti ọ̀pọ̀lọpọ̀ sí ọgọ́rọ̀ọ̀rún, èyí sì jẹ́rìí sí i pé Ṣáíhúlúdì kìí ṣe trojan mìíràn lásán ni, ṣùgbọ́n kòkòrò tí a ṣe láti tàn káàkiri àyíká npm láìdáwọ́dúró.
Ipa: ẹnikẹ́ni tó bá ń ṣe àgbékalẹ̀ tàbí olùṣiṣẹ́ CI tó ń fi àwọn npm gbogbogbò sílẹ̀ wà nínú ewu.
Awọn iṣe lẹsẹkẹsẹ: dí àwọn ẹ̀yà tí a mọ̀, yípadà sí àwọn ìfi sori ẹrọ lockfile nìkan, yí àwọn àmì npm àti GitHub po, ṣíṣàyẹ̀wò àwọn iṣẹ́, àti àbójútó fún Àwọn Àmì Ìbáramu (IoCs).
Kini osele?
awọn Ikọlu pq ipese Shai-Hulud ninu awọn package npm jẹ́ ọ̀kan lára àwọn ìṣẹ̀lẹ̀ tí ó ń da wàhálà jùlọ ní ìrántí àìpẹ́ yìí. Láìdàbí àwọn trojan tí a yà sọ́tọ̀, àwọn kòkòrò yìí ń dapọ̀ Olè ìjẹ́rìí, ìyọkúrò nínú ara ẹni, àti àtúnṣe ara ẹniNítorí náà, àkókò àkóràn náà dínkù láti ọ̀sẹ̀ sí wákàtí díẹ̀.
Fún àwọn ẹgbẹ́ DevOps, ẹ̀kọ́ náà ṣe kedere: tí gbogbo ìfisẹ́lẹ̀ bá lè mú kódì ṣiṣẹ́, gbogbo ìdàgbàsókè ìgbẹ́kẹ̀lé jẹ́ ibi ìrúfin tó ṣeé ṣe.
O ṣeeṣe Vektọ Ibẹrẹ ati Awọn Iwe-ẹri Ti a Fojusi
Àtúpalẹ̀ ìṣáájú fihàn pé ó ṣeé ṣe kí ìkọlù náà bẹ̀rẹ̀ pẹ̀lú ji ẹríFún àpẹẹrẹ, àwọn ìpolówó phishing tí ń ṣe àwàdà npm login tàbí àwọn ìbéèrè MFA lè ti gba àwọn àmì olùgbékalẹ̀. Nígbà tí àwọn olùkọlù bá ti gba ipò àkọ́kọ́ yẹn, kòkòrò náà tàn kálẹ̀ nípa fífi ara rẹ̀ sínú àwọn ìdìpọ̀ npm àti jíjí àwọn àṣírí púpọ̀ sí i láti ọ̀dọ̀:
- Àwọn fáìlì ìṣètò npm bi
.npmrc, tí ó sábà máa ń ní àwọn àmì ìtẹ̀jáde. - Awọn oniyipada ayika àti àtúnṣe pẹ̀lú GitHub PATs àti CI/CD asiri.
- Àwọn ìparí metadata àwọsánmà (AWS, GCP, Azure) tí ó fúnni ní ìwé ẹ̀rí ìgbà kúkúrú fún ìṣíkiri ẹ̀gbẹ́.
Nítorí náà, olè ìjẹ́rìí di ohun tí a fi ń ṣíṣẹ́. Pẹ̀lú àwọn àmì npm tó wúlò àti àṣírí GitHub, Shai-Hulud lè ṣe àtúnṣe ara rẹ̀ lórí ọ̀pọ̀lọpọ̀ àwọn páálí àti ibi ìkópamọ́ láìsí ìsapá ènìyàn.
Ipa Alakoso ti Ikọlu Ẹwọn Ipese Shai-Hulud
Shai-Hulud ṣì ń ṣiṣẹ́ lónìí. Kòkòrò yìí mú kí àkókò ìṣẹ̀lẹ̀ náà yára kánkán. Ohun tó ti gba ọ̀sẹ̀ díẹ̀ pẹ̀lú trojan báyìí ń ṣẹlẹ̀ ní wákàtí díẹ̀. Nítorí náà, itankale naa yara ati nira lati mu. O nlọsiwaju nipasẹ:
- Jíjí àwọn àmì ìtẹ̀jáde npm àti àṣírí GitHub.
- Àtúntẹ̀ ara rẹ̀ sí àwọn páálí npm mìíràn.
- Fifi awọn iṣẹ GitHub Actions irira kun fun itẹramọṣẹ.
Àwọn tí ó ní ipa lórí:
Ẹgbẹ́ èyíkéyìí tí ó bá fi àwọn ìdìpọ̀ npm gbogbogbò sílẹ̀ ni a ti tú síta. Jù bẹ́ẹ̀ lọ, àwọn olùgbékalẹ̀ tí wọ́n ní àwọn àmì npm tí a fipamọ́ tàbí GitHub dojúkọ ewu gíga. Àwọn olùṣiṣẹ́ CI tí wọ́n lo àwọn àṣírí onípele-pupọ náà tún jẹ́ ẹni tí ó ní ewu.
Ewu iṣowo
Ipa iṣowo naa n dagba ni kiakia. Awọn ami jija le ja si gbigba akọọlẹ, jija package, ati paapaa ilokulo awọsanma. Ni afikun, titẹsiwaju ninu awọn iṣẹ ṣiṣe GitHub jẹ ki o nira lati nu. Nitorinaa., awọn ẹgbẹ gbọdọ wo Shai-Hulud gẹgẹbi iṣẹlẹ ti nlọ lọwọ, kii ṣe iṣẹlẹ ti a tiipa.
Báwo ni Shai-Hulud Supply Chain Attack ṣe ń ṣiṣẹ́ nínú npm Packages
Àwọn ibi-afẹde àti ète ẹni tí ó kọlu
Ipolongo naa ṣe atunṣe fun awọn nkan mẹta:
- Ohun akọkọ ni lati ji awọn iwe-ẹri ni iwọn Láti ọ̀dọ̀ àwọn kọ̀ǹpútà alágbèéká olùgbéjáde àti àwọn olùsáré CI. Èyí pẹ̀lú àwọn àmì ìtẹ̀jáde npm, àwọn àmì GitHub, àti àwọn ẹ̀rí ìkùukùu. Ní tòótọ́, ọ̀pọ̀lọpọ̀ àwọn ìṣàyẹ̀wò jẹ́rìí sí ìkórè ìkọ̀kọ̀ onípele, bíi ṣíṣiṣẹ́ TruffleHog àti ṣíṣe ìbéèrè lórí àwọn ìparí metadata ìkùukùu.
- Ète kejì ni láti tan kaakiri laifọwọyi nípa lílo ẹ̀tọ́ ìtẹ̀wé àwọn olùtọ́jú tí wọ́n ti bàjẹ́. Nítorí náà, ipò kan yára gbòòrò sí ọ̀pọ̀lọpọ̀, nítorí pé àwọn àtúnṣe tuntun ti àwọn àpò mìíràn tí ó ti bàjẹ́ máa ń farahàn láìsí ìsapá ènìyàn mìíràn.
- Ète kẹta ni láti tẹra mọ́ kí o sì tú omi jáde ní ìgbẹ́kẹ̀lé nípasẹ̀ ètò GitHub. Àwọn olùkọlù ṣẹ̀dá ibi ìpamọ́ gbogbogbò tí orúkọ rẹ̀ ń jẹ́ “Shai-Hulud” pẹ̀lú ìpìlẹ̀ méjì64 data.json, àti ní àfikún wọ́n gbin ìṣiṣẹ́ kan tí ó ń ṣe àtúnṣe sí ${{ toJSON(àwọn àṣírí) }} ó sì fi sí orí ìkọ́ wẹ́ẹ̀bù tí kò dúró.
Èrè tó ṣeé ṣe kó wà nínú rẹ̀ ni wíwọlé sí àwọn ilé ìforúkọsílẹ̀ àti kódì orísun ìgbà pípẹ́, ìṣíkiri sí àwọn àkọọ́lẹ̀ ìkùukùu kíákíá, àti àṣàyàn láti fi ohun ìjà sí ẹ̀wọ̀n ìpèsè náà. Ìròyìn gbogbogbòò fihàn pé àwọn ibi ìpamọ́ àdáni ti yí padà sí gbogbo ènìyàn pẹ̀lú “-ìṣíkiri” àfikún, èyí tí ó mú kí ìfarahàn àti ìṣíṣẹ́ dátà pọ̀ sí i
Nínú ẹ̀rọ ìsanwó Shai-Hulud: bundle.js nínú àwọn páálí npm
Shai-Hulud ń gbéra bí ńlá, Webpack-ti a kojọpọ ati ti o dinku pupọ Faili JavaScript (bundle.js, nípa 3–3.7 MB) tí ó ń ṣiṣẹ́ láti inú fifi sori ẹrọ lẹhin so mọ package.jsonNítorí náà,, Gbogbo fifi sori ẹrọ ni o ma n fa fifuye owo naa laifọwọ. Apẹrẹ yii n fi awọn idanimọ pamọ, o ma n fun iṣakoso sisan pọ, o si ma n ti gbogbo ero sinu ohun-elo kan ṣoṣo ti o n ṣiṣẹ lakoko fifi sori ẹrọ. Awọn atunnkanka nigbagbogbo jẹrisi pe o n ṣe akojọpọ Webpack, iwọn faili ti ko wọpọ, ati ṣiṣe akoko fifi sori ẹrọ.
Àwọn ànímọ́ ìfòyà àti ìdènà ìṣàyẹ̀wò tí ìwọ yóò rí nínú àwọn àpẹẹrẹ:
- Àwòrán módúlù tí a dínkù pẹ̀lú àwọn nọ́mbà ìdánimọ̀ módúlù, àwọn àkíyèsí díẹ̀, àti ìṣàn ìṣàkóso tí ó tẹ́jú. Jù bẹ́ẹ̀ lọ, Ìṣètò yìí mú kí àtúnyẹ̀wò ọwọ́ ṣòro gidigidi.
- Fifipamọ́ okùn nípasẹ̀ àwọn ìpele base64 àti àwọn olùrànlọ́wọ́ ìkọ́lé. Fún àpẹẹrẹ, Àtúnṣe ìṣàkóṣo àti ìṣàkóṣo ìṣàkóṣo ìpele base64 sábà máa ń farahàn ní àyíká àwọn ìlànà ìtújáde.
- Ifiranṣẹ oniyipada nipasẹ eval-àwọn ìlànà àti àwọn ara iṣẹ́ tí a ṣẹ̀dá, nítorí náà, ó ń jẹ́ kí kódì yí ìwà padà ní àkókò ìṣiṣẹ́.
- Àlẹ̀mọ́ OS láti fẹ́ràn ìṣiṣẹ́ Linux àti macOS pàápàá jùlọ lórí àwọn olùṣiṣẹ́ CI àti àwọn kọ̀ǹpútà alágbèéká olùgbékalẹ̀.
Láti igun iṣẹ́, àpapọ̀ náà jẹ́ modular. Àwọn ìkọ̀wé ṣàpèjúwe àwọn modulu fún ìwádìí OS, àwọn ìṣàyẹ̀wò ìkọ̀kọ̀ àti git, ìwọ̀lé SDK ìkùukùu, àwọn iṣẹ́ GitHub API, àti ẹ̀rọ ìdàgbàsókè kan tí ó ń ṣàtúnṣe àwọn ìkọ̀kọ̀ mìíràn tí olùtọ́jú ní. Ní gidi, StepSecurity àti ReversingLabs méjèèjì ń ṣe àfihàn iṣẹ́ kan tí ó ń ṣe àtúnṣe àwọn ìkọ̀kọ̀ láìfọwọ́sí pẹ̀lú ìkọ̀kọ̀ búburú.
Ìgbà Ìfisílé-Síṣe ní Shai-Hulud: Báwo ni àwọn npm Package ṣe ń fa kokoro náà
Ikọlu naa bẹrẹ nigbati node nṣiṣẹ postinstall bundle.js. Ní àkókò yìí, ìwé àkọsílẹ̀ náà bẹ̀rẹ̀ àti ṣí ipò iṣẹ́ sílẹ̀ nínú ìrántí, ó sì ṣètò ìpele fún iṣẹ́ gbogbo kòkòrò náà.
Ṣíṣàwárí àti ìkórè
- Àwọn ìpèsè ìsanwó náà máa ń ṣe àyẹ̀wò àwọn fáìlì agbègbè fún àwọn àṣírí entropy gíga àti àwọn àmì ìṣáájú. Ní àfikún, ó máa ń gbòòrò sí i nípa lílo TruffleHog.
- Ó ń béèrè àwọn àkójọpọ̀ metadata ìkùukùu láti kó àwọn ìwé ẹ̀rí ìgbà kúkúrú jọ. Fun apẹẹrẹ, awọn ipe si
169.254.169.254lórí AWS tàbímetadata.google.internallórí GCP sábà máa ń fara hàn nínú àwọn agbàlejò tí ó ní àkóràn. - Nitori naa, eyikeyi iwe-ẹri ti a rii yoo di ohun elo lẹsẹkẹsẹ lati ṣe atẹjade awọn idii npm tuntun tabi titari awọn iṣan-iṣẹ GitHub.
Exfiltration
- Kòkòrò náà ṣẹ̀dá ibi ìpamọ́ GitHub tuntun tí a pè ní Shai Hulud ó sì kọ ìpele méjì tí a fi àmì 64 sí
data.jsonpẹ̀lú àwọn kúlẹ̀kúlẹ̀ ìtàgé, àwọn ibi ìdọ̀tí àyíká, àti àwọn àṣírí. Gẹ́gẹ́ bí a ṣe lè rí i, ìwà ariwo yìí rọrùn láti rí bí àwọn olùgbèjà bá mọ ibi tí wọ́n yẹ kí wọ́n wò. - Ó tún ń gbin ìṣiṣẹ́ GitHub Actions, nígbà míìrán lórí ẹ̀ka tí a ń pè ní shai-hulud, tí ó ń ṣe àkójọpọ̀
${{ toJSON(secrets) }}ó sì fi data náà sí ojú ìkọ̀kọ̀ wẹ́ẹ̀bù kan tí kò dúró. Jù bẹ́ẹ̀ lọ, ìṣiṣẹ́ yìí ń bá a lọ títí tí ẹnìkan yóò fi yọ ọ́ kúrò.
Itankale
- Pẹ̀lú èyíkéyìí àmì npm tí a ṣàwárí, ẹrù iṣẹ́ náà máa ń ka gbogbo àwọn páálí tí olùtọ́jú tí a ti kọ̀ sílẹ̀ ní. Lẹ́yìn náà, ó máa ń gba gbogbo tarball, ó máa ń fi bundle.js àti ìkọsílẹ̀ postinstall sínú rẹ̀, ó sì tún máa ń tẹ̀ ẹ́ jáde.
- Nítorí náà, ọ̀pọ̀lọpọ̀ àwọn àpò tí ó ní àkóràn lè farahàn láàárín wákàtí díẹ̀, èyí tí yóò mú kí ìbúgbàù náà pọ̀ sí i ní gbogbo àyíká ayé.
Ìfaradà àti ìfarahàn
Kòkòrò náà máa ń jẹ́ kí àwọn iṣẹ́ ibi tí ó burú wà láàyè, ní ọ̀pọ̀lọpọ̀ ìgbà, ó máa ń yí ibi ìpamọ́ àdáni sí gbogbo ènìyàn pẹ̀lú “-ìṣíkiri” Àfikún. Lápapọ̀, èyí ń rí i dájú pé ẹni tó ń kọlu náà dúró ní ipò kan, ó sì ń mú kí ìjákulẹ̀ dátà pọ̀ sí i.
Àkíyèsí ìwádìí kọ́kọ́rọ́
Lilo alailẹgbẹ yii ${{ toJSON(secrets) }} ninu Awọn iṣẹ ṣiṣe iṣan-iṣẹ jẹ ṣọwọn. nitorina, Àwọn ẹgbẹ́ gbọ́dọ̀ máa ṣe é gẹ́gẹ́ bí àmì tó ga nígbà tí wọ́n bá ń ṣe ọdẹ.
Àpẹẹrẹ iṣẹ́ tí a ti sọ di mímọ́ tí ó yẹ kí o wá kiri fún
Lilo alailẹgbẹ yii si JSON (àwọn àṣírí) nínú Ìṣe jẹ́ àmì àmì gíga nínú ìṣẹ̀lẹ̀ yìí.
Àìṣeéṣe ìtẹ̀síwájú ìpele gíga (aláàbò, àpèjúwe)
Àwọn onímọ̀ nípa àyẹ̀wò yìí ṣe àkíyèsí ní ìwọ̀n, èyí tó ṣàlàyé bí àwọn àrùn náà ṣe ń lọ láti ọ̀pọ̀lọpọ̀ sí ọgọ́rọ̀ọ̀rún.
Kí ló dé tí èyí fi jẹ́ kòkòrò nínú ètò ìṣẹ̀dá àpò kan
Kòkòrò ni kòkòrò tí ó ń tàn káàkiri fúnrarẹ̀ láìsí pé ó nílò ìgbésẹ̀ olùṣiṣẹ́ ọwọ́ ní gbogbo ìpele. Nínú àwọn ẹ̀rọ ìṣiṣẹ́, kòkòrò sábà máa ń lo àwọn ìṣòro nẹ́tíwọ́ọ̀kì láti gbé láti ẹ̀rọ kan sí òmíràn. Ní ìyàtọ̀ sí èyí, Shai-Hulud ń ṣiṣẹ́ nínú ìforúkọsílẹ̀ npm. Ọ̀nà tó gbéṣẹ́ ni láti gba ọ̀nà náà. ilotunlo eri.
Kòkòrò náà ń lo àǹfààní àwọn àmì ìtẹ̀jáde npm tí wọ́n jí. Nígbà tí ó bá ti gba àwọn ìwé ẹ̀rí tó wúlò, ó tún máa ń tẹ̀ àwọn ẹ̀yà tó ti ní àkóràn jáde lábẹ́ àwọn páálí mìíràn tí olùtọ́jú kan náà ní. Lẹ́yìn náà, àwọn olùgbékalẹ̀ tàbí àwọn olùṣiṣẹ́ CI tí kò fura sí ni wọ́n fi àwọn páálí wọ̀nyẹn sí, wọ́n sì tún máa ń ṣe àtúnṣe sí cycle náà.
Fun idi eyi, awọn atunnkanka aabo, pẹlu Okunkun kika, pín Shai-Hulud sí kòkòrò tí ń ṣe àtúnṣe ara rẹ̀ dípò kí ó jẹ́ trojan lásán tàbí ìṣẹ̀lẹ̀ ìkọsílẹ̀ àṣìṣe. Ìyàtọ̀ náà ṣe pàtàkì: trojan sábà máa ń ba ilé-iṣẹ́ kan jẹ́, ṣùgbọ́n kòkòrò máa ń mú kí ipa rẹ̀ pọ̀ sí i ní gbogbo àyíká.
Ìwé ìfọ̀rọ̀wérọ̀ “Bí ó ṣe ń ṣiṣẹ́”
Láti ṣàkópọ̀ ìgbésí ayé Shai-Hulud, àbùkù kan nìyícisìtúpalẹ̀ àwọn ìgbésẹ̀ pàtàkì rẹ̀:
- Àpò kan pẹ̀lú fifi sori ẹrọ lẹhin ti fi sori ẹrọ, ati
bundle.jsó ṣe. - Àwọn oníyípadà àyíká tí a ń pè ní payload dumps, wọ́n ń ṣe àyẹ̀wò àwọn fáìlì àti ìtàn git, wọ́n sì ń ṣiṣẹ́ Ẹranko Truffle, àti ìbéèrè lórí àwọn iṣẹ́ ìwádìí lórí ìkùukùu. Nítorí náà, èyíkéyìí àṣírí tí a bá rí yóò wúlò lẹ́sẹ̀kẹsẹ̀.
- Ìyọkúrò ìyọkúrò máa ń wáyé ní ọ̀nà méjì: àkọ́kọ́, nípa ṣíṣẹ̀dá ibi ìpamọ́ gbogbogbò tí a ń pè ní ibi ìpamọ́ tí a ń pè ní ibi ìpamọ́ gbogbogbòò Shai Hulud pẹ̀lú ìpìlẹ̀ méjì 64-àkójọpọ̀
data.json; èkejì, nípa gbígbin ìṣiṣẹ́ GitHub Actions kan tí ó ń fi ránṣẹ́${{ toJSON(secrets) }}sí ìkọ wẹ́ẹ̀bù kan. - Nípa lílo àmì npm tí a jí, kòkòrò náà a tún ṣe àtúntẹ̀ gbogbo àwọn páálí mìíràn tí olùtọ́jú tí ó ní ìṣòro náà ní pẹ̀lú ìkọ́ burúkú kan náà. Ní ọ̀nà yìí, àkóràn náà a máa pọ̀ sí i kíákíá.
- Níkẹyìn, ẹni tí ó kọlu náà ní àwọn àṣírí púpọ̀ sí i, àwọn páálí púpọ̀ sí i láti tàn kálẹ̀, àti itẹramọṣẹ nínú àwọn àkọọ́lẹ̀ GitHub àti àwọn ibi ìkópamọ́.
Báwo ni a ṣe lè yẹra fún irú ìkọlù yìí, ní ìṣeéṣe
Shai-Hulud jẹ́ ìpè jíjí. Kòkòrò tí ó jí àwọn àmì ìdánimọ̀ tí ó sì tún tẹ̀ ara rẹ̀ jáde kì í ṣe ewu ọjọ́ iwájú, ó wà ní ayé. eto eda abemi awọn idii npm lónìí. Láti dènà irú èyí kolu ipese pq, awọn ẹgbẹ nilo awọn iṣakoso ti a le ṣe eto, adaṣe, ati ti a fi ipa mu taara ninu CI/CD pipelineÀwọn ààbò kan náà ni èyí tí o lè fi ṣe tẹ́lẹ̀ Xygeni.
Dá àwọn ohun èlò búburú dúró ní ẹnu-ọ̀nà
O yẹ kí o ṣe àyẹ̀wò àwọn npm páálí àti tarballs kí wọ́n tó dé àwọn olùgbékalẹ̀ tàbí iṣẹ́ CI. bundle.js awọn faili, ifura postinstall hooks, àti àwọn àmì ìbòjú gbogbo wọn ń ṣiṣẹ́ gẹ́gẹ́ bí àwọn àmì pupa àkọ́kọ́. Jù bẹ́ẹ̀ lọ, fífi agbára mú àwọn àkókò ìtura àti àwọn ẹ̀yà tí a fi síta ní pipelines n ṣe idiwọ fun awọn itusilẹ tuntun, ti a ko ti ṣe ayẹwo lati jẹ lilo laifọwọsi.
Ṣiṣe CI/CD nipa aiyipada
Guardrails in CI/CD Ó ṣe pàtàkì. Wọ́n kọ̀ láti fi àwọn ìṣọ̀kan tàbí àwọn ìfisílẹ̀ tí ó ń ṣe àgbékalẹ̀ àwọn ìwé àkọsílẹ̀ tuntun tàbí àwọn onípele méjì. Ní àkókò kan náà, wọ́n ń dí àwọn ìṣiṣẹ́ tí ó ń ṣe àṣírí ní ìpele-ẹ̀kọ́ tàbí tí ó ń gbìyànjú láti fi àwọn ìfiránṣẹ́ síta. Àwọn ẹgbẹ́ náà gbọ́dọ̀ nílò àwọn ìfiránṣẹ́ lockfile-nìkan (npm ci) jakejado gbogbo pipelines nitorina awọn eto igbẹkẹle wa ni atunbi ati ailewu.
Dín rédíọ̀mù ìbúgbàù àmì kù
Àwọn àṣírí kò gbọdọ̀ di ibi ìkùnà kan ṣoṣo. Máa ṣe àyẹ̀wò kódì, àwọn ìṣètò, àti pipeline o wu fun àwọn ìwé ẹ̀rí tí a ti ṣípayáÓ yẹ kí a lo àwọn àmì náà ní ìwọ̀n díẹ̀, nítorí pé ó jẹ́ fún ìgbà kúkúrú, kí a sì yí i padà láìfọwọ́sí nígbà tí a bá rí ìfarahàn. Gẹ́gẹ́ bí òfin, a gbọ́dọ̀ ka èyíkéyìí àmì tí a lò lórí olùgbàlejò tí ó ṣe ìfipamọ́ tí ó fura sí gẹ́gẹ́ bí èyí tí a ti bàjẹ́.
Wo ìwà kòkòrò ní kutukutu
Wiwa Anomaly Ó ṣe pàtàkì. Fún àpẹẹrẹ, ìbísí lójijì nínú ìtẹ̀jáde àwọn ìṣẹ̀lẹ̀ npm, àwọn ìṣiṣẹ́ tuntun tí ó farahàn láìsí ìdí, tàbí àwọn ibi ìpamọ́ gbogbogbòò tuntun tí ó kún fún àwọn fáìlì àfọwọ́kọ àjèjì lè fi ìṣiṣẹ́ kòkòrò hàn. Nítorí náà, àwọn ẹgbẹ́ gbọ́dọ̀ gbé ìkìlọ̀ sókè kíákíá kí wọ́n sì ya àwọn olùtọ́jú tàbí àwọn olùsáré tí wọ́n fi àwọn àmì ìkìlọ̀ wọ̀nyí hàn sọ́tọ̀.
Ṣe àtúnṣe kíákíá láìsí ìfọ́ àwọn ìkọ́lé
Iyara ati ailewu gbọdọ lọ papọ. pull requests le fi awọn ẹya ti a ti ṣe ayẹwo rọpo awọn package npm ti o bajẹ. Ni afikun, isọdọtun ati ilokulo Ìwádìí náà mú kí àwọn àtúnṣe náà wà ní ìwọ̀nba àti pé wọ́n dúró ṣinṣin. Níkẹyìn, tún àwọn olùsáré CI tí ó ní ipa ṣe láti inú àwọn àwòrán mímọ́ nígbà tí a bá ti fi hàn, èyí tí ó ń dènà kí ìkọlù náà má baà tàn kálẹ̀ sí i.
Awọn itọka ti Ifarada (IoCs)
Nígbà tí wọ́n bá ń ṣàyẹ̀wò Shai-Hulud, àwọn ẹgbẹ́ gbọ́dọ̀ máa ṣọ́ra fún àwọn méjèèjì Àwọn IoC tí kò dúró nínú àwọn fáìlì àti Àwọn IoC ìhùwàsí in pipelineÀwọn àmì wọ̀nyí papọ̀ ń ran àwọn àkóràn lọ́wọ́ láti mọ̀ ní ìbẹ̀rẹ̀ kí wọ́n sì dáhùn kí kòkòrò náà tó tàn káàkiri.
Àwọn IoC tí kò dúró
Àwọn àkọsílẹ̀ SHA-256 wọ̀nyí bá ara wọn mu bundle.js awọn ayẹwo:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
Ni afikun, ṣọra fun awọn adaṣe wọnyi loorekoore:
- A
bundle.jsní gbòǹgbò àpò náà. "postinstall": "node bundle.js"inupackage.json.- Àwọn ibi ìpamọ́ tí a dárúkọ Shai Hulud.
- Awọn iṣan-iṣẹ GitHub ti o ni awọn iṣẹ-ṣiṣe
${{ toJSON(secrets) }}.
Àwọn IoC ìhùwàsí
Yàtọ̀ sí ìfọwọ́sowọ́pọ̀ fáìlì, ìṣiṣẹ́ kòkòrò máa ń fi ara rẹ̀ hàn nípasẹ̀ ìwà. Fún àpẹẹrẹ:
- Àwọn ìṣẹ̀lẹ̀ tí npm ń jáde lójijì láti ọ̀dọ̀ olùtọ́jú kan.
- Awọn iṣiṣẹ tuntun ti o n gbe data si awọn opin ita.
- Àwọn ìbéèrè POST tí ń jáde wá bẹ̀rẹ̀ láti ọ̀dọ̀ àwọn olùsáré CI.
- Láìpẹ́ yìí ni a ṣẹ̀dá àwọn ibi ìpamọ́ gbogbogbò pẹ̀lú àwọn ìdìpọ̀ tí a fi àmì sí.
Àwọn ìwá kiri kíákíá
Ìparí: Àwọn ẹ̀kọ́ láti ọ̀dọ̀ Shai-Hulud
awọn Ikọlu ẹ̀wọ̀n ipese Shai-Hulud Nínú àwọn ìdìpọ̀ npm, wọ́n fi bí ẹ̀wọ̀n ìpèsè sọ́fítíwèsì òde òní ṣe rí tó hàn. Kòkòrò yìí ṣe ju kí ó fi kódì búburú kún un lọ. Ó jí àwọn àmì ìdánimọ̀, ó fi dátà ránṣẹ́, lẹ́yìn náà ó tún tẹ̀ ara rẹ̀ jáde láìfọwọ́sí. Nítorí èyí, ìkọlù náà tàn kálẹ̀ ní wákàtí díẹ̀ dípò ọ̀sẹ̀.
Fún àwọn olùgbékalẹ̀ àti àwọn ẹgbẹ́ DevOps, àwọn ẹ̀kọ́ náà ṣe kedere:
- Gbogbo fifi sori ẹrọ lo koodu naa. Àní àkójọ npm tí ó wọ́pọ̀ pàápàá lè fi kòkòrò postinstall pamọ́.
- Gbogbo àmì ní iye tó ga. Nígbà tí wọ́n bá jí i, wọ́n lè lò ó láti tan malware kálẹ̀ síwájú sí i.
- Gbogbo pipeline nilo awọn ayẹwo. lai guardrails lórí àwọn ìgbẹ́kẹ̀lé, àwọn iṣẹ́-ṣíṣẹ́, àti àwọn àṣírí, ìforígbárí kan lè yára kọlu iṣẹ́-ṣíṣe.
Nítorí náà, dídúró àwọn ìkọlù bíi Shai-Hulud nílò àwọn ìṣàkóso tí ó jẹ́ aládàáṣe àti tí ó rọrùn láti fipá mú. Àwọn ẹgbẹ́ gbọ́dọ̀ ṣe àyẹ̀wò àwọn ìdìpọ̀ npm kí wọ́n tó fi sori ẹrọ, lo àwọn ìkọ́lé lockfile, ṣàwárí ìgbòkègbodò ìtẹ̀jáde àjèjì, kí wọ́n sì jẹ́ kí àwọn àmì náà wà fún ìgbà kúkúrú. Àwọn ìgbésẹ̀ wọ̀nyí kò jẹ́ àṣàyàn mọ́. Dípò bẹ́ẹ̀, wọ́n jẹ́ ìpìlẹ̀ ìfaradà ní òde òní. pipelines.
Ní Xygeni, a rí ìkọlù ẹ̀wọ̀n ìpèsè Shai-Hulud gẹ́gẹ́ bí ìkìlọ̀ fún gbogbo ètò ìṣẹ̀dá orísun ṣíṣí sílẹ̀. Ọ̀nà tí ó ṣeé gbé síwájú ni láti mú ààbò ẹ̀wọ̀n ìpèsè wá tààrà sínú ìlànà ìdàgbàsókè, níbi tí koodu, àwọn ìpèsè npm, àti pipelines so.
Àkójọ gbogbo àwọn npm packages àti àwọn ẹ̀yà tí a ròyìn pé wọ́n ti bàjẹ́ nínú Shai-Hulud nìyí. Lo ó láti ṣàyẹ̀wò àwọn lockfiles rẹ, registries, àti CI pipelines fún ìfarahàn.
Àkójọ àwọn àpò tí a ti bàjẹ́
📦 Àwòrán àwọn Package npm Compromised
| Orukọ package | version | Jade Ọjọ |
|---|---|---|
| json-ofin-ẹ̀rọ-rọrùn | 0.2.1 | 2025-09-14T17:58:51.203Z |
| awakọ ọkọ ofurufu | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-ìmọ̀-àwòrán | 1.2.1 | 2025-09-14T18:35:09.494Z |
| aṣọ afẹ́fẹ́ òfurufú | 0.3.1 | 2025-09-14T18:35:09.521Z |
| ẹnu-ọna fifọ | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/callback-window | 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/mojuto | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/àtúnṣe-àtúnṣe | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/àfihàn | 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/olùṣàkóso-àkóso | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/olùtọ́jú | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/olùtọ́jú | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/ìfìdí múlẹ̀ | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/mojuto | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ Wo Àkójọ Gbogbo Àwọn Àpò Tí A Ti Gbà
| Orukọ package | version | Jade Ọjọ |
|---|---|---|
| json-ofin-ẹ̀rọ-rọrùn | 0.2.1 | 2025-09-14T17:58:51.203Z |
| awakọ ọkọ ofurufu | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-ìmọ̀-àwòrán | 1.2.1 | 2025-09-14T18:35:09.494Z |
| aṣọ afẹ́fẹ́ òfurufú | 0.3.1 | 2025-09-14T18:35:09.521Z |
| ẹnu-ọna fifọ | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/callback-window | 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/mojuto | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/àtúnṣe-àtúnṣe | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/àfihàn | 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/olùṣàkóso-àkóso | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/olùtọ́jú | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/olùtọ́jú | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/ìfìdí múlẹ̀ | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/mojuto | 0.2.1 | 2025-09-14T20:45:55.888Z |
| @hestjs/cqrs | 0.1.6 | 2025-09-14T20:45:55.966Z |
| @hestjs/àwòrán | 0.1.7 | 2025-09-14T20:45:56.386Z |
| ng2-file-load | 7.0.3 | 2025-09-15T02:44:29.555Z |
| Olùdarí ìfitónilétí-kápá | 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 |
| awọn igbanilaaye 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/common | 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/web-app | 1.0.3 | 2025-09-15T05:21:20.383Z |
| @art-ws/ssl-info | 1.0.9 | 2025-09-15T05:21:20.927Z |




