TL; DR
Tutkijat tunnistivat 14. syyskuuta 2025 Shai Hulud, itseään lisääntyvä mato piilossa sisällä npm-paketit, muuttaen rutiininomaisen riippuvuuspäivityksen täysimittaiseksi toimitusketjun hyökkäysEnsimmäisen kerran havaittu @ctrl/tinycolor Daniel dos Santos Pereiran paketin avulla Shai-Hulud kerää salaisuuksia, suodattaa ne GitHubin repositorioiden ja työnkulkujen kautta ja julkaisee itsensä uudelleen rekisterissä varastettujen tunnistetietojen avulla. Muutamassa päivässä tartunnan saaneiden pakettien määrä nousi kymmenistä satoihin, mikä vahvistaa, että Shaihulud ei ole vain yksi troijalainen lisää, vaan mato, joka on suunniteltu leviämään automaattisesti npm-ekosysteemissä.
Vaikutus: Jokainen kehittäjä tai CI-ajuri, joka asentaa julkisia npm-paketteja, on vaarassa.
Välittömät toimet: estä tunnetut versiot, vaihda pelkkiin lukitustiedostoihin perustuviin asennuksiin, kierrätä npm- ja GitHub-tokenit, tarkasta työnkulut ja valvo vaarantumisindikaattoreita (IoC).
Mitä tapahtuu?
Shai-Huludin toimitusketjuhyökkäys npm-paketeissa on yksi viime aikojen häiritsevimmistä tapahtumista. Toisin kuin yksittäiset troijalaiset, tämä mato sekoittuu tunnistetietojen varastaminen, automaattinen vuotaminen ja itsereplikointiTämän seurauksena tartunta-aika lyheni viikoista vain tunteihin.
DevOps-tiimeille opetus on selvä: jos jokainen asennus voi suorittaa koodia, jokainen riippuvuuspäivitys on mahdollinen tietomurtokohta.
Mahdollinen alkuperäinen vektori ja kohdennetut tunnistetiedot
Varhainen analyysi viittaa siihen, että hyökkäys todennäköisesti alkoi varastetut valtakirjatEsimerkiksi tietojenkalastelukampanjat, jotka väärentävät npm:ää. login tai MFA-kehotteet ovat saattaneet kaapata kehittäjätokenit. Kun hyökkääjät saivat ensimmäisen jalansijan, mato levisi upottamalla itsensä npm-paketteihin ja varastamalla lisää salaisuuksia:
- npm-määritystiedostot pitää
.npmrc, usein sisältäen julkaisutunnuksia. - Ympäristömuuttujat ja konfiguroi GitHub PATs -tiedostoilla ja CI/CD salaisuuksia.
- Pilvimetatietojen päätepisteet (AWS, GCP, Azure) antavat lyhytaikaisia valtuuksia sivuttaisliikkeeseen.
Siksi tunnistetietojen varastamisesta tuli lähtökohta. Voimassa olevien npm-tokenien ja GitHub-salaisuuksien avulla Shai-Hulud kykeni itsereplikoitumaan useiden pakettien ja repositorioiden välillä ilman ylimääräistä ihmisen työtä.
Shai-Huludin toimitusketjuhyökkäyksen vaikutus johtoon
Shai-Hulud on edelleen aktiivinen. Tämä mato nopeuttaa iskun aikataulua. Se, mikä ennen kesti viikkoja troijalaisen kanssa, tapahtuu nyt tunneissa. Tämän seurauksena... leviäminen on nopeampaa ja vaikeampaa hillitä. Se etenee seuraavasti:
- Npm-julkaisutunnusten ja GitHub-salaisuuksien varastaminen.
- Julkaisee itsensä uudelleen muissa npm-paketteissa.
- Haitallisten GitHub Actions -työnkulkujen lisääminen pysyvyyden parantamiseksi.
Ketä se koskee:
Kaikki julkisia npm-paketteja asentavat tiimit ovat alttiina. Lisäksi kehittäjät, joilla on välimuistissa olevia npm- tai GitHub-tokeneja, ovat suuressa vaarassa. Myös laaja-alaisia salaisuuksia käyttävät CI-ajurit ovat haavoittuvia.
Liiketoiminnan riski
Liiketoimintavaikutus kasvaa nopeasti. Varastetut tokenit voivat johtaa tilin kaappaukseen, pakettien kaappaukseen ja jopa pilvipalvelun väärinkäyttöön. Lisäksi niiden pysyvyys GitHub-työnkuluissa vaikeuttaa niiden puhdistamista. Siksijoukkueiden on käsiteltävä Shai-Huludia jatkuvana tapauksena, ei suljettuna sellaisena.
Kuinka Shai-Hulud-toimitusketjuhyökkäys toimii npm-paketeissa
Hyökkääjän tavoitteet ja motiivi
Kampanja optimoidaan kolmen asian perusteella:
- Ensimmäinen tavoite on varastaa valtakirjoja laajamittaisesti kehittäjien kannettavilta tietokoneilta ja CI-ajureilta. Tähän sisältyvät npm-julkaisutunnukset, GitHub-tunnukset ja pilvitunnistetiedot. Itse asiassa useat analyysit vahvistavat systemaattisen salaisen tiedon keräämisen, kuten TruffleHogin suorittamisen ja pilvimetatietojen päätepisteiden kyselyn.
- Toinen tavoite on levitä automaattisesti väärinkäyttämällä vaarantuneiden ylläpitäjien julkaisuoikeuksia. Tämän seurauksena yksi jalansija laajenee nopeasti moniksi, koska muiden pakettien uusia tartunnan saaneita versioita ilmestyy ilman lisäinhimillistä työtä.
- Kolmas tavoite on säilyvät ja erittyvät luotettavasti GitHub-infrastruktuurin kautta. Hyökkääjät luovat julkisen repon nimeltä ”Shai-Hulud” ja käyttävät kahta base64-arvoa. data.jsonja lisäksi he ottavat käyttöön työnkulun, joka sarjoittaa ${{ toJSON(salaisuudet) }} ja lähettää sen staattiseen webhookiin.
Todennäköisiin hyödyihin kuuluvat pitkäaikainen pääsy rekistereihin ja lähdekoodiin, nopea siirtyminen pilvitileille ja mahdollisuus toimitusketjun aseistamiseen entisestään. Julkinen raportointi osoittaa, että yksityiset arkistot on muutettu julkisiksi. "-muutto" pääte, joka lisää datan altistumista ja vauhtia
Shai-Hulud-hyötykuorman sisällä: bundle.js npm-paketeissa
Shai-Hulud laivoina suuri, Webpack-paketti ja vahvasti minifioitu JavaScript-tiedosto (bundle.js, noin 3–3.7 Mt) joka suoritetaan jostakin asennuksen jälkeen koukku package.jsonNäin ollen, Jokainen asennus käynnistää hyötykuorman automaattisesti. Tämä suunnittelu piilottaa tunnisteet, pakkaa ohjausvirran ja tuo kaiken logiikan yhteen funktioon, joka suoritetaan asennuksen aikana. Analyytikot vahvistavat johdonmukaisesti Webpack-niputuksen, epätavallisen tiedostokoon ja asennuksenaikaisen suorituksen.
Esimerkeissä havaittavat hämärtämis- ja analyysinvastaisuuspiirteet:
- Pienennetyn moduulin graafi numeerisilla moduulitunnisteilla, harvoilla kommenteilla ja litistetyllä ohjausvirralla. Lisäksi, Tämä rakenne tekee manuaalisesta tarkastelusta erittäin vaikeaa.
- Merkkijonojen piilottaminen base64-tasojen ja rakennusapuohjelmien kautta. Esimerkiksi, Toistuvaa base64-koodausta ja -dekoodausta esiintyy yleensä vuotorutiinien yhteydessä.
- Dynaaminen lähetys kautta eval-tyyliset kuviot ja luodut funktiorungot, mikä mahdollistaa koodin toiminnan muuttamisen suorituksen aikana.
- Käyttöjärjestelmän suodatus suosia Linux- ja macOS-suoritusta erityisesti CI-käyttöjärjestelmissä ja kehittäjien kannettavissa tietokoneissa.
Toiminnallisesta näkökulmasta katsottuna paketti on modulaarinen. Kirjoitukset kuvaavat moduuleja käyttöjärjestelmän löytämiseen, tiedostojärjestelmän ja git-salaisuuksien skannaukseen, pilvi-SDK:n käyttöön, GitHub API -toimintoihin ja levittämismoottoriin, joka muokkaa ylläpitäjän omistamia muita paketteja. Itse asiassa sekä StepSecurity että ReversingLabs korostavat funktiota, joka päivittää paketit automaattisesti haitallisen koukun avulla.
Asennusaikainen suoritus Shai-Huludissa: Kuinka npm-paketit laukaisevat madon
Hyökkäys alkaa, kun asennuksen jälkeiset suoritukset solmu bundle.js. Tässä vaiheessa skripti alustaa ja purkaa toimintatilan muistissa, mikä luo pohjan madon täydelle toiminnalle.
Löytö ja sadonkorjuu
- Hyötykuorma luo process.env-tiedoston ja skannaa paikalliset tiedostot korkean entropian salaisuuksien ja token-etuliitteiden varalta. Lisäksi se laajentaa kattavuutta suorittamalla TruffleHogin.
- Se kyselee pilvimetatietojen päätepisteitä kerätäkseen lyhytaikaisia tunnistetietoja. Esimerkiksi puhelut
169.254.169.254AWS:ssä taimetadata.google.internalGCP:ssä esiintyvät usein tartunnan saaneissa isännissä. - Näin ollen Kaikki löydetyt tunnistetiedot ovat välittömästi käytettävissä uusien npm-pakettien julkaisemiseen tai GitHub-työnkulkujen ajamiseen.
exfiltration
- Mato luo uuden GitHub-repon nimeltä Shai Hulud ja kirjoittaa kaksinkertaisen base64-koodatun
data.jsonalustan yksityiskohtien, ympäristövedosten ja salaisuuksien kera. Kuten voidaan nähdä, tämä äänekäs käyttäytyminen on helppo havaita, jos puolustajat tietävät, mistä etsiä. - Se myös istuttaa GitHub Actions -työnkulun, usein haaraan nimeltä shai-hulud, joka sarjoittaa
${{ toJSON(secrets) }}ja lähettää tiedot staattiseen webhookiin. Lisäksi tämä työnkulku jatkuu, kunnes joku poistaa sen aktiivisesti.
Eteneminen
- Kaikista löydetyistä npm-tokeneista hyötykuorma luetteloi kaikki vaarantuneen ylläpitäjän omistamat paketit. Sitten se noutaa jokaisen tarballin, lisää bundle.js-tiedoston ja asennuksen jälkeisen merkinnän ja julkaisee paketin uudelleen.
- Tämän seurauksena kymmeniä tartunnan saaneita paketteja voi ilmestyä muutamassa tunnissa, mikä moninkertaistaa räjähdyksen säteen ekosysteemissä.
Pysyvyys ja altistuminen
Mato pitää haitalliset työnkulut hengissä ja useissa tapauksissa muuttaa yksityiset arkistot julkisiksi käyttämällä "-muutto" pääte. Kaiken kaikkiaan tämä varmistaa, että hyökkääjä säilyttää jalansijan ja maksimoi tietovuodon.
Avaimen tunnistushuomautus
Tämä epätavallinen käyttö ${{ toJSON(secrets) }} Toimintojen työnkuluissa on harvinaista. Näin ollen, joukkueiden tulisi pitää sitä korkean signaalin indikaattorina metsästysten aikana.
Puhdistettu työnkulkumalli, jota sinun kannattaa etsiä
Tämä epätavallinen käyttö että JSON(salaisuudet) Toiminnoissa on tässä tapauksessa korkea signaali-indikaattori.
Korkean tason etenemispseudokoodi (turvallinen, kuvaileva)
Analyytikot havaitsivat tämän silmukan laajamittaisesti, mikä selittää tartunnan saaneiden pakettien määrän nopean kasvun kymmenistä satoihin.
Miksi tämä on mato pakettiekosysteemissä
Mato on haittaohjelma, joka leviää itsestään ilman manuaalisia käyttäjän toimia jokaisessa vaiheessa. Käyttöjärjestelmissä madot yleensä hyödyntävät verkon haavoittuvuuksia siirtyäkseen koneelta toiselle. Shai-Hulud sitä vastoin toimii npm-rekisterin sisällä. Sen tehokas reitti on valtakirjojen uudelleenkäyttö.
Mato hyödyntää varastettuja npm-julkaisutunnisteita. Heti saatuaan kelvolliset tunnistetiedot se julkaisee tartunnan saaneet versiot uudelleen saman ylläpitäjän omistamien muiden pakettien alla. Tämän jälkeen tietämättömät kehittäjät tai CI-ajurit asentavat kyseiset paketit, ja sykli toistuu.
Tästä syystä turvallisuusanalyytikot, mukaan lukien Tumma lukeminen, luokittele Shai-Hulud yhdeksi itseään lisääntyvä mato pikemminkin kuin pelkkä troijalainen tai kirjoitusasuvirhe. Ero on tärkeä: troijalainen tyypillisesti vaarantaa yhden isännän, mutta mato vahvistaa vaikutustaan automaattisesti koko ekosysteemissä.
”Näin se toimii” -huijausarkki
Yhteenvetona Shai-Huludin elinkaaresta, tässä on haittapuolicissen päävaiheiden erittely:
- Paketti, jossa on asennuksen jälkeen on asennettu, ja
bundle.jstoteuttaa. - Hyötykuorma dumppaa ympäristömuuttujat, skannaa tiedostot ja git-historian, suorittaa Tryffeli-Sikaja kyselee pilvimetatietopalveluista. Näin ollen kaikista löydetyistä salaisuuksista tulee välittömästi hyödyllisiä.
- Purkaminen tapahtuu kahdella tavalla: ensinnäkin luomalla julkinen arkisto nimeltä Shai Hulud kaksinkertaisella base64-koodauksella
data.json; toiseksi, luomalla GitHub Actions -työnkulun, joka julkaisee${{ toJSON(secrets) }}webhookiin. - Käyttämällä mitä tahansa varastettua npm-tokenia mato julkaisee uudelleen kaikki muut vaarantuneen ylläpitäjän omistamat paketit samalla haitallisella koukulla. Tällä tavoin tartunta lisääntyy nopeasti.
- Lopuksi hyökkääjällä on enemmän salaisuuksia, enemmän paketteja levitettäväksi ja sitkeys GitHub-tilien ja -repositorioiden sisällä.
Kuinka välttää tämän luokan hyökkäys käytännössä
Shai-Hulud on herätys. Tokeneita varastava ja itsensä uudelleenjulkaiseva mato ei ole tulevaisuuden riski, se on olemassa. npm-pakettien ekosysteemi tänään. Tämän tyyppisen estämiseksi toimitusketjun hyökkäystiimit tarvitsevat ohjelmoitavia, automatisoituja ja suoraan valvottuja kontrolleja CI/CD pipelines. Nämä ovat samoja puolustuskeinoja, joita voit jo toteuttaa Xygeni.
Pysäytä huonot esineet portilla
Sinun tulisi skannata npm-paketit ja tarball-tiedostot ennen kuin ne päätyvät kehittäjille tai CI-töihin. Ylisuuri bundle.js tiedostot, epäilyttävät asennuksen jälkeiset tiedostot hooksja hämärtämismerkit toimivat kaikki varhaisina varoituslippuina. Lisäksi jäähyaikojen ja kiinnitettyjen versioiden valvonta pipelines estää tuoreiden, tarkistamattomien julkaisujen automaattisen kulutuksen.
Kovettua CI/CD oletuksena
Guardrails in CI/CD ovat välttämättömiä. Ne hylkäävät yhdistämiset tai asennukset, jotka tuovat mukanaan uusia skriptejä tai binaareja. Samalla ne estävät työnkulut, jotka sarjoittavat salaisuuksia tai yrittävät ulkoisia julkaisuja. Tiimien tulisi myös vaatia vain lukitustiedostoja sisältäviä asennuksia (npm ci) kaikissa pipelinejotta riippuvuusjoukot pysyvät toistettavissa ja turvallisina.
Pienennä merkkiräjähdyssädettä
Salaisuuksien ei pidä muuttua yksittäisiksi vikaantumispisteiksi. Tarkista koodia, konfiguraatioita ja pipeline lähtö varten paljastuneet tunnistetiedotTunnusten käyttöalue tulisi rajata tarkasti, niille tulisi antaa lyhyt käyttöikä ja ne tulisi kierrättää automaattisesti, kun altistuminen havaitaan. Pääsääntöisesti kaikkia tunnuksia, joita käytetään isännässä, joka suoritti epäilyttävän asennuksen jälkeisen komennon, tulisi käsitellä vaarantuneina.
Näe matojen käyttäytyminen varhain
Poikkeamien havaitseminen on avainasemassa. Esimerkiksi npm-julkaisutapahtumien äkilliset piikit, ilman syytä ilmestyvät uudet työnkulut tai outoja koodattuja tiedostoja täynnä olevat tuoreet julkiset arkistot voivat kaikki viestiä matoaktiivisuudesta. Siksi tiimien tulisi tehdä hälytyksiä nopeasti ja eristää kaikki ylläpitäjät tai suorittajat, jotka osoittavat näitä varoitusmerkkejä.
Korjaa nopeasti rikkomatta rakennuksia
Nopeuden ja turvallisuuden on kuljettava käsi kädessä. Automatisoitu pull requests voi korvata vaarantuneet npm-paketit tarkistetuilla versioilla. Lisäksi saavutettavuus ja hyödynnettävyys Analyysi varmistaa, että päivitykset pysyvät minimaalisina ja vakaina. Lopuksi, kun altistuminen on vahvistettu, rakenna uudelleen tartunnan saaneet CI-runnerit puhtaista levykuvista, jotta hyökkäys ei leviä enempää.
Kompromissin indikaattorit (IoC)
Shai-Huludia analysoidessaan joukkueiden tulisi kiinnittää huomiota molempiin staattiset IoC:t tiedostoissa ja käyttäytymiseen liittyvät IoC:t in pipelines. Yhdessä nämä signaalit auttavat havaitsemaan infektiot varhaisessa vaiheessa ja reagoimaan ennen kuin mato leviää pidemmälle.
Staattiset IoC:t
Seuraavat SHA-256-tiivistelmien osumat havaittu bundle.js näytteitä:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
Lisäksi kannattaa tarkkailla näitä toistuvia kaavoja:
- A
bundle.jspaketin juuressa. "postinstall": "node bundle.js"sisälläpackage.json.- Nimetyt arkistot Shai Hulud.
- GitHub-työnkulut, jotka sisältävät
${{ toJSON(secrets) }}.
Käyttäytymiseen perustuvat IoC:t
Tiedostotunnisteiden lisäksi matojen toiminta ilmenee myös käyttäytymisen kautta. Esimerkiksi:
- Yhden ylläpitäjän äkilliset npm-julkaisutapahtumien purkaukset.
- Uudet työnkulut, jotka lähettävät tietoja ulkoisiin päätepisteisiin.
- CI-ajokoneiden laukaisemat lähtevät POST-pyynnöt.
- Äskettäin luodut julkiset säilöstöt, joissa on koodattuja blobeja.
Pikajahdit
Johtopäätös: Shai-Huludin opetukset
Shai-Huludin toimitusketjun hyökkäys npm-paketeissa osoittaa, kuinka hauras nykypäivän ohjelmistotoimitusketju on tullut. Tämä mato teki enemmän kuin lisäsi haitallista koodia. Se varasti tokeneita, lähetti tietoja ja julkaisi itsensä sitten automaattisesti uudelleen. Tämän vuoksi hyökkäys levisi tunneissa viikkojen sijaan.
Kehittäjille ja DevOps-tiimeille opetukset ovat selvät:
- Jokainen asennus suorittaa koodia. Jopa tavallinen npm-paketti voi piilottaa asennuksen jälkeisen madon.
- Jokaisella tokenilla on korkea arvo. Kun se on kerran varastettu, sitä voidaan käyttää haittaohjelmien levittämiseen edelleen.
- Joka pipeline tarpeiden tarkistuksia. Ilman guardrails Riippuvuuksien, työnkulkujen ja salaisuuksien osalta yksi kompromissi voi nopeasti vaikuttaa tuotantoon.
Siksi Shai-Huludin kaltaisten hyökkäysten pysäyttäminen vaatii automaattisia ja helposti valvottavia hallintakeinoja. Tiimien tulisi skannata npm-paketit ennen asennuksia, käyttää lukitustiedostojen koontiversioita, havaita outoa julkaisutoimintaa ja pitää tokenit lyhytikäisinä. Nämä vaiheet eivät ole enää valinnaisia. Sen sijaan ne ovat nykyaikaisten järjestelmien resilienssin perusta. pipelines.
Xygenillä näemme Shai-Huludin toimitusketjuhyökkäyksen varoituksena koko avoimen lähdekoodin ekosysteemille. Kestävä tie eteenpäin on tuoda toimitusketjun turvallisuus suoraan kehitysprosessiin, siihen pisteeseen, jossa koodi, npm-paketit ja... pipelines-yhteys.
Alla on täydellinen luettelo Shai-Huludissa vaarantuneiksi ilmoitetuista npm-paketeista ja -versioista. Käytä sitä tarkistaaksesi lukitustiedostosi, rekisterisi ja CI:si. pipelines altistumista varten.
Vaarantuneista paketeista löytyvä luettelo
📦 Vaarantuneiden npm-pakettien esikatselu
| Paketin nimi | Versio | Julkaisupäivä |
|---|---|---|
| json-rules-engine-simplified | 0.2.1 | 2025-09-14T17:58:51.203Z |
| lentäjä | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-tietograafi | 1.2.1 | 2025-09-14T18:35:09.494Z |
| ilmapäällikkö | 0.3.1 | 2025-09-14T18:35:09.521Z |
| hyppyportti | 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/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/react-table | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 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/metsuri | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/loggeri | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/validointi | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/ydin | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ Katso täydellinen luettelo vaarantuneista paketeista
| Paketin nimi | Versio | Julkaisupäivä |
|---|---|---|
| json-rules-engine-simplified | 0.2.1 | 2025-09-14T17:58:51.203Z |
| lentäjä | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-tietograafi | 1.2.1 | 2025-09-14T18:35:09.494Z |
| ilmapäällikkö | 0.3.1 | 2025-09-14T18:35:09.521Z |
| hyppyportti | 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/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/react-table | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 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/metsuri | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/loggeri | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/validointi | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/ydin | 0.2.1 | 2025-09-14T20:45:55.888Z |
| @hestjs/cqrs | 0.1.6 | 2025-09-14T20:45:55.966Z |
| @hestjs/skalaari | 0.1.7 | 2025-09-14T20:45:56.386Z |
| ng2-tiedoston lataus | 7.0.3 | 2025-09-15T02:44:29.555Z |
| kondensaattori-ilmoituskäsittelijä | 0.0.2 | 2025-09-15T04:54:48.431Z |
| kondensaattori-plugin-vonage | 1.0.2 | 2025-09-15T04:54:48.501Z |
| kondensaattori-laajennus-terveyssovellus | 0.0.2 | 2025-09-15T04:54:48.704Z |
| capacitorandroid-käyttöoikeudet | 0.0.4 | 2025-09-15T04:54:48.753Z |
| VoIP-puhelupaketti | 1.0.2 | 2025-09-15T04:54:49.223Z |
| kondensaattori-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-palvelin | 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 |




