TL; DR
Op 14 septimber 2025 identifisearren ûndersikers Shai Hulud, in selsrepliserende wjirm ferburgen binnenin npm pakketten, it feroarjen fan in routine ôfhinklikheidsupdate yn in folsleine supply chain oanfalEarst sjoen yn 'e @ctrl/lytse kleur pakket fan Daniel dos Santos Pereira, Shai-Hulud rispet geheimen, ekstrahearret se fia GitHub-repos en workflows, en publisearret himsels opnij oer it register mei stellen ynloggegevens. Binnen dagen sprong it oantal ynfekteare pakketten fan tsientallen nei hûnderten, wat befêstiget dat Shaihulud is net gewoan in oare trojan, mar in wjirm ûntworpen om automatysk te fersprieden oer it npm-ekosysteem.
Impact: elke ûntwikkelder of CI-runner dy't iepenbiere npm-pakketten ynstalleart, rint risiko.
Direkte aksjes: bekende ferzjes blokkearje, oerskeakelje nei allinich-lockfile-ynstallaasjes, npm- en GitHub-tokens rotearje, workflows kontrolearje en kontrolearje op Yndikatoaren fan Kompromis (IoC's).
Wat is der bard?
De Shai-Hulud oanfal op supply chain yn npm-pakketten is ien fan 'e meast fersteurende ynsidinten yn it resinte ûnthâld. Oars as isolearre trojanen, mingt dizze wjirm diefstal fan ynloggegevens, automatisearre eksfiltraasje en selsreplikaasjeDêrtroch krimp de ynfeksjetiidline fan wiken nei mar oeren.
Foar DevOps-teams is de les dúdlik: as elke ynstallaasje koade útfiere kin, dan is elke ôfhinklikheidsupdate in potinsjeel brekpunt.
Mooglike earste vektor en rjochte ynloggegevens
Iere analyze jout oan dat de oanfal wierskynlik begûn is mei stellen bewiisbrievenBygelyks, phishingkampanjes dy't npm ferfalskje login of MFA-prompts kinne ûntwikkeldertokens fongen hawwe. Sadree't oanfallers dy earste fuot oan 'e grûn krigen hiene, fersprate de wjirm him troch himsels yn npm-pakketten yn te bouwen en mear geheimen te stellen fan:
- npm-konfiguraasjebestannen lykas
.npmrc, faak mei publisearringstokens. - Miljeu fariabelen en konfiguraasjes mei GitHub PAT's en CI/CD geheimen.
- Eindpunten fan metadata yn 'e wolk (AWS, GCP, Azure) wat koarte-libbene bewiisbrieven oplevert foar laterale beweging.
Dêrom waard it stellen fan ynloggegevens it útgongspunt. Mei jildige npm-tokens en GitHub-geheimen koe Shai-Hulud himsels replikearje oer meardere pakketten en repositories sûnder ekstra minsklike ynspanning.
Ynfloed op 'e útfierende macht fan 'e Shai-Hulud Supply Chain-oanfal
Shai-Hulud is hjoed de dei noch aktyf. Dizze wjirm fersnelt de tiidline fan 'e ynfloed. Wat eartiids wiken duorre mei in trojan ûntfoldt him no yn oeren. As gefolch, de fersprieding is rapper en dreger te beheinen. It giet foarút troch:
- It stellen fan npm-publisearringstokens en GitHub-geheimen.
- himsels opnij publisearje yn oare npm-pakketten.
- Kweade GitHub Actions-workflows tafoegje foar persistinsje.
Wa wurdt beynfloede:
Elk team dat iepenbiere npm-pakketten ynstallearret, wurdt bleatsteld. Boppedat rinne ûntwikkelders mei yn 'e cache opsleine npm- of GitHub-tokens foar in heech risiko. CI-runners dy't breed gebrûk meitsje fan geheimen binne ek kwetsber.
Business risiko
De ynfloed op it bedriuw groeit rap. Stellen tokens kinne liede ta akkountoername, pakketkaping en sels misbrûk fan 'e wolk. Derneist makket persistinsje yn GitHub-workflows it dreger om op te romjen. Dêrom, teams moatte Shai-Hulud behannelje as in oanhâldend ynsidint, net as in sletten ynsidint.
Hoe't de Shai-Hulud Supply Chain Attack wurket yn npm-pakketten
Doelen en motyf fan 'e oanfaller
De kampanje optimalisearret foar trije dingen:
- De earste doelstelling is om stelle ynloggegevens op skaal fan ûntwikkelderslaptops en CI-runners. Dit omfettet npm-publisearringstokens, GitHub-tokens en wolkgegevens. Eins befêstigje meardere analyses systematyske geheime rispinge, lykas it útfieren fan TruffleHog en it opfreegjen fan wolkmetadata-eindpunten.
- It twadde doel is om automatysk ferspriede troch misbrûk te meitsjen fan de publisearringsrjochten fan kompromittearre ûnderhâlders. As gefolch dêrfan wreidet ien fuotsteun him fluch út nei in protte, om't nije ynfekteare ferzjes fan oare pakketten ferskine sûnder ekstra minsklike ynspanning.
- It tredde doel is om oanhâlde en betrouber útfiltrearje fia GitHub-ynfrastruktuer. Oanfallers meitsje in iepenbiere repo mei de namme "Shai-Hulud" mei in dûbele basis64 gegevens.json, en derneist plante se in workflow dy't serialisearret ${{ neiJSON(geheimen) }} en pleatst it op in statyske webhook.
De wierskynlike beleanning omfettet langduorjende tagong ta registers en boarnekoade, rappe laterale beweging nei wolkakkounts, en de opsje om de supply chain fierder te bewapenjen. Iepenbiere rapportaazje lit sjen dat partikuliere repo's nei it publyk binne omset mei in "-migraasje" efterheaksel, wat gegevenseksposysje en momentum fergruttet
Binnen de Shai-Hulud lading: bondel.js yn npm-pakketten
Shai-Hulud ferstjoert as in grut, Webpack-bondele en swier minimalisearre JavaScript triem (bondel.js, sawat 3–3.7 MB) dat útfiert fanút in nei ynstallaasje heakje yn pakket.jsonDêrtroch, elke ynstallaasje triggert de lading automatysk. Dit ûntwerp ferberget identifiers, komprimearret de kontrôlestream en komprimearret alle logika yn ien artefakt dat útfierd wurdt tidens de ynstallaasje. Analysten befêstigje konsekwint Webpack-bundeling, ungewoane bestânsgrutte en útfiering tidens ynstallaasje.
Fertsjustering en anty-analyse-eigenskippen dy't jo sille sjen yn foarbylden:
- Fermindere modulegrafyk mei numerike module-ID's, sparse kommentaren en in platte kontrôlestream., dizze struktuer makket hânmjittige resinsje ekstreem lestich.
- String ferbergje fia base64-lagen en konstruksjehelpers. Bygelyks, werhelle base64-kodearring en dekodearring ferskine meastentiids om eksfiltraasjeroutines hinne.
- Dynamyske ferstjoering troch eval-stylpatroanen en generearre funksjelichems, wêrtroch koade it gedrach by runtime kin feroarje.
- OS-filtering om foarkar te jaan oan Linux- en macOS-útfiering, benammen op CI-rinners en laptops foar ûntwikkelders.
Fanút in funksjoneel eachpunt is de bondel modulêr. Writups beskriuwe modules foar OS-ûntdekking, scans fan triemsystemen en git-geheimen, tagong ta de cloud SDK, GitHub API-operaasjes, en in propagaasjemotor dy't oare pakketten bewurket dy't de ûnderhâlder hat. Eins markearje StepSecurity en ReversingLabs beide in funksje dy't pakketten automatysk bywurket mei de kwea-aardige hook.
Útfiering op ynstallaasjetiid yn Shai-Hulud: Hoe npm-pakketten de wjirm triggerje
De oanfal begjint wannear postinstall fiert knooppunt út bondel.js. Op dit punt inisjalisearret it skript en ûntpakt it de wurkstatus yn it ûnthâld, wêrtroch't de basis leit foar de folsleine operaasje fan 'e wjirm.
Untdekking en rispinge
- De payload dumpt process.env en scant lokale bestannen op geheimen mei hege entropie en token-prefiksen. Derneist wreidet it dekking út troch TruffleHog út te fieren.
- It freget wolkmetadata-eindpunten om koartlibjende ynloggegevens te sammeljen. Bygelyks, ropt nei
169.254.169.254op AWS ofmetadata.google.internalop GCP ferskine faak yn ynfekteare gastheren. - Dêrom, elke fûne ynloggegevens wurde direkt brûkber om nije npm-pakketten te publisearjen of GitHub-workflows te pushen.
Exfiltration
- De wjirm makket in nije GitHub-repo mei de namme Shai Hulud en skriuwt in dûbele base64-kodearre
data.jsonmei platfoarmdetails, omjouwingsdumps en geheimen. Lykas te sjen is, is dit lawaaierige gedrach maklik te spotten as ferdigeners witte wêr't se sykje moatte. - It plant ek in GitHub Actions-workflow, faak op in tûke mei de namme shai-hulud, dat serialisearret
${{ toJSON(secrets) }}en pleatst de gegevens nei in statyske webhook. Fierder bliuwt dizze workflow bestean oant immen it aktyf fuorthellet.
Fersegeling
- Mei elke ûntdutsen npm-token listet de payload alle pakketten op dy't eigendom binne fan 'e kompromittearre ûnderhâlder. Dan hellet it elke tarball op, ynjektearret bundle.js en in postinstall-yngong, en publisearret it it pakket opnij.
- As gefolch kinne tsientallen ynfekteare pakketten binnen in pear oeren ferskine, wêrtroch't de eksploazjeradius oer it ekosysteem fermannichfâldige wurdt.
Persistinsje en bleatstelling
De wjirm hâldt kweade workflows yn libben en, yn ferskate gefallen, makket privee repositories iepenbier mei in "-migraasje" efterheaksel. Alles byinoar soarget dit derfoar dat de oanfaller in fuot oan 'e grûn hâldt en gegevenslekkage maksimalisearret.
Notysje fan kaaideteksje
Dit ûngewoane gebrûk fan ${{ toJSON(secrets) }} yn Aksjes binne workflows seldsum. Dêrom, teams moatte it behannelje as in yndikator fan hege sinjalen tidens jachten.
Sanearre workflowpatroan wêr't jo nei sykje moatte
Dit ûngewoane gebrûk fan nei JSON (geheimen) yn Aksjes is in yndikator fan in heech sinjaal yn dit ynsidint.
Pseudo-koade foar propagaasje op heech nivo (feilich, beskriuwend)
Analysten hawwe dizze lus op skaal waarnommen, wat de rappe sprong fan tsientallen nei hûnderten ynfekteare pakketten ferklearret.
Wêrom dit in wjirm is yn in pakket-ekosysteem
In wjirm is malware dy't himsels ferspriedt sûnder dat der yn elke faze manuele stappen fan in operator nedich binne. Yn bestjoeringssystemen brûke wjirms meastentiids kwetsberheden yn it netwurk om fan de iene masine nei de oare te gean. Yn tsjinstelling dêrmei operearret Shai-Hulud binnen it npm-register. Syn effisjinte paad giet fia werbrûk fan ynloggegevens.
De wjirm makket gebrûk fan stellen npm-publisearringstokens. Sadree't er jildige ynloggegevens krijt, publisearret er ynfekteare ferzjes opnij ûnder oare pakketten dy't eigendom binne fan deselde ûnderhâlder. Dêrnei wurde dy pakketten ynstalleare troch ûnfermoedende ûntwikkelders of CI-runners, en de syklus werhellet him.
Om dizze reden, feiligensanalysten, ynklusyf Tsjuster lêzen, klassifisearje Shai-Hulud as in selsrepliserende wjirm ynstee fan in ienfâldige trojan of in typosquatting-ynsidint. It ferskil is wichtich: in trojan kompromittearret typysk ien host, mar in wjirm fersterket syn ynfloed automatysk oer in ekosysteem.
Spiekbriefke "Hoe't it wurket"
Om de libbensyklus fan Shai-Hulud gear te fetsjen, is hjir in neidielcisin ferdieling fan syn wichtichste stappen:
- In pakket mei nei ynstallaasje ynstalleare is, en
bundle.jsútfiert. - De payload dumpt omjouwingsfariabelen, scant bestannen en git-skiednis, rint út Truffelhog, en freget wolkmetadatatsjinsten. Dêrtroch wurdt elk fûn geheim direkt nuttich.
- Eksfiltraasje bart op twa manieren: earst, troch it meitsjen fan in iepenbiere repository mei de namme Shai Hulud mei in dûbele base64-kodearre
data.json; twadde, troch in GitHub Actions-workflow te plantsjen dy't pleatst${{ toJSON(secrets) }}nei in webhook. - Mei help fan in stellen npm-token publisearret de wjirm alle oare pakketten dy't eigendom binne fan 'e kompromittearre ûnderhâlder opnij mei deselde kweade heak. Op dizze manier fermannichfâldiget de ynfeksje him rap.
- Uteinlik hat de oanfaller mear geheimen, mear pakketten om troch te fersprieden, en persistinsje binnen GitHub-akkounts en repositories.
Hoe kinne jo dizze klasse oanfal foarkomme, praktysk
Shai-Hulud is in wekker. In wjirm dy't tokens stielt en himsels opnij publisearret is gjin takomstich risiko, it libbet yn 'e npm-pakketten ekosysteem hjoed. Om dit soarte fan te foarkommen supply chain oanfal, teams hawwe kontrôles nedich dy't programmearber, automatisearre en direkt ynfierd wurde kinne CI/CD pipelines. Dit binne deselde ferdigeningswurken dy't jo al kinne ymplementearje mei Xygeni.
Stopje minne artefakten by de poarte
Jo moatte npm-pakketten en tarballs scannen foardat se ûntwikkelders of CI-taken berikke. bundle.js bestannen, fertochte postinstallaasje hooks, en obfuskaasjemarkers tsjinje allegear as iere reade flaggen. Boppedat, it hanthavenjen fan ôfkuolperioaden en fêstmakke ferzjes yn pipelines foarkomt dat nije, net-kontrolearre releases automatysk konsumearre wurde.
Harden CI/CD standert
Guardrails in CI/CD binne essensjeel. Se wegerje gearfoegings of ynstallaasjes dy't nije skripts of binêre bestannen yntrodusearje. Tagelyk blokkearje se workflows dy't geheimen serialisearje of eksterne berjochten besykje. Teams moatte ek allinich lockfile-ynstallaasjes fereaskje (npm ci) oer alles pipelines sadat ôfhinklikheidssets reprodusearber en feilich bliuwe.
Ferminderje de radius fan 'e token-eksploazje
Geheimen meie gjin ienige punten fan falen wurde. Scan kontinu koade, konfiguraasjes en pipeline útfier foar bleatstelde ynloggegevensTokens moatte smel begrinzge wurde, koarte libbensdoer hawwe, en automatysk rotearre wurde as bleatstelling wurdt ûntdutsen. Behannelje yn 'e regel elke token dy't brûkt wurdt op in host dy't in fertochte postinstall útfierd hat as kompromittearre.
Sjoch it gedrach fan wjirms betiid
Anomaly deteksje is wichtich. Bygelyks, hommelse pieken yn npm-publisearringseveneminten, nije workflows dy't sûnder reden ferskine, of nije iepenbiere repositories fol mei frjemde kodearre bestannen kinne allegear in sinjaal wêze foar wjirmaktiviteit. Dêrom moatte teams fluch warskôgings útjaan en alle ûnderhâlders of runners isolearje dy't dizze warskôgingsbuorden sjen litte.
Fluch reparearje sûnder builds te brekken
Snelheid en feiligens moatte tegearre gean. Automatisearre pull requests kinne kompromittearre npm-pakketten ferfange troch kontrolearre ferzjes. Derneist, berikberens en eksploitabiliteit analyze soarget derfoar dat upgrades minimaal en stabyl bliuwe. Uteinlik, werbouwe troffen CI-runners fan skjinne ôfbyldings as de bleatstelling befêstige is, sadat de oanfal him net fierder ferspriedt.
Yndikatoaren fan kompromis (IoC's)
By it analysearjen fan Shai-Hulud moatte teams op beide lette statyske IoC's yn triemmen en gedrachs-IoC's in pipelines. Tegearre helpe dizze sinjalen ynfeksjes betiid te detektearjen en te reagearjen foardat de wjirm him fierder ferspriedt.
Statyske IoC's
De folgjende SHA-256 digests komme oerien bundle.js foarbylden:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
Let derneist op dizze weromkommende patroanen:
- A
bundle.jsby de root fan it pakket. "postinstall": "node bundle.js"binnenkantpackage.json.- Repositories neamd Shai Hulud.
- GitHub-workflows dy't befetsje
${{ toJSON(secrets) }}.
Gedrachs-IoC's
Utsein bestânshântekeningen, lit wjirmaktiviteit himsels sjen troch gedrach. Bygelyks:
- Ynienen útbarstings fan npm publisearje eveneminten fan ien ûnderhâlder.
- Nije workflows dy't gegevens nei eksterne einpunten stjoere.
- Utgeande POST-oanfragen aktivearre fan CI-runners.
- Koartlyn oanmakke iepenbiere repos mei kodearre blobs.
Fluch jachten
Konklúzje: Lessen fan Shai-Hulud
De Oanfal op 'e oanfierketen fan Shai-Hulud yn npm-pakketten lit sjen hoe kwetsber de software-leveringsketen fan hjoed wurden is. Dizze wjirm die mear as allinich kweade koade tafoegje. Hy stiel tokens, ferstjoerde gegevens út, en publisearre himsels doe automatysk opnij. Dêrtroch fersprate de oanfal him yn oeren ynstee fan wiken.
Foar ûntwikkelders en DevOps-teams binne de lessen dúdlik:
- Elke ynstallaasje fiert koade út. Sels in gewoan npm-pakket kin in postinstall-wjirm ferbergje.
- Elke token hat in hege wearde. As it ienris stellen is, kin it brûkt wurde om malware fierder te fersprieden.
- Elk pipeline hat kontrôles nedich. sûnder guardrails op ôfhinklikheden, workflows en geheimen kin ien kompromis de produksje fluch reitsje.
Dêrom fereasket it stopjen fan oanfallen lykas Shai-Hulud kontrôles dy't automatysk en maklik te hanthavenjen binne. Teams moatte npm-pakketten scannen foar ynstallaasjes, lockfile-builds brûke, frjemde publisearringsaktiviteit detektearje en tokens koart hâlde. Dizze stappen binne net langer opsjoneel. Ynstee dêrfan binne se de basis fan fearkrêft yn moderne ... pipelines.
By Xygeni sjogge wy de Shai-Hulud supply chain-oanfal as in warskôging foar it hiele iepen boarne-ekosysteem. De duorsume wei foarút is om supply chain-feiligens direkt yn it ûntwikkelingsproses te bringen, op it punt wêr't koade, npm-pakketten, en pipelines ferbine.
Hjirûnder stiet de folsleine list mei npm-pakketten en ferzjes dy't rapportearre binne as kompromittearre yn Shai-Hulud. Brûk it om jo lockfiles, registers en CI te kontrolearjen. pipelines foar bleatstelling.
List mei kompromittearre pakketten
📦 Foarbyld fan kompromittearre npm-pakketten
| Namme fan pakket | Ferzje | Datum publisearje |
|---|---|---|
| json-regels-motor-ferienfâldige | 0.2.1 | 2025-09-14T17:58:51.203Z |
| loftpiloat | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-kennisgrafyk | 1.2.1 | 2025-09-14T18:35:09.494Z |
| loftkaptein | 0.3.1 | 2025-09-14T18:35:09.521Z |
| springpoarte | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/werombelfinster | 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/kearn | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/reagearje-tabel | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-konfiguraasje | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-konfiguraasje | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/konfiguraasjebehearder | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/falidaasje | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/kearn | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ Besjoch de folsleine list mei kompromittearre pakketten
| Namme fan pakket | Ferzje | Datum publisearje |
|---|---|---|
| json-regels-motor-ferienfâldige | 0.2.1 | 2025-09-14T17:58:51.203Z |
| loftpiloat | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-kennisgrafyk | 1.2.1 | 2025-09-14T18:35:09.494Z |
| loftkaptein | 0.3.1 | 2025-09-14T18:35:09.521Z |
| springpoarte | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/werombelfinster | 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/kearn | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/reagearje-tabel | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-konfiguraasje | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-konfiguraasje | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/konfiguraasjebehearder | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/falidaasje | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/kearn | 0.2.1 | 2025-09-14T20:45:55.888Z |
| @hestjs/cqrs | 0.1.6 | 2025-09-14T20:45:55.966Z |
| @hestjs/skalêr | 0.1.7 | 2025-09-14T20:45:56.386Z |
| ng2-bestân-upload | 7.0.3 | 2025-09-15T02:44:29.555Z |
| kondensator-notifikaasjehandler | 0.0.2 | 2025-09-15T04:54:48.431Z |
| kondensator-plugin-vonage | 1.0.2 | 2025-09-15T04:54:48.501Z |
| kondensator-plugin-sûnensapp | 0.0.2 | 2025-09-15T04:54:48.704Z |
| kondensatorandroidtastimmingen | 0.0.4 | 2025-09-15T04:54:48.753Z |
| voip-opropkit | 1.0.2 | 2025-09-15T04:54:49.223Z |
| kondensator-plugin-ihealth | 1.1.8 | 2025-09-15T04:55:08.113Z |
| @keunst-ws/mienskiplik | 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 |
| @keunst-ws/slf | 2.0.15 | 2025-09-15T05:21:17.524Z |
| @art-ws/http-tsjinner | 2.0.21 | 2025-09-15T05:21:17.745Z |
| pm2-gelf-json | 1.0.4 | 2025-09-15T05:21:18.413Z |
| @keunst-ws/di | 2.0.28 | 2025-09-15T05:21:18.488Z |
| @keunst-ws/di-node | 2.0.13 | 2025-09-15T05:21:18.849Z |
| @keunst-ws/konfiguraasje-ts | 2.0.7 | 2025-09-15T05:21:19.408Z |
| @keunst-ws/db-kontekst | 2.0.21 | 2025-09-15T05:21:19.814Z |
| @keunst-ws/iepenapi | 0.1.9 | 2025-09-15T05:21:19.969Z |
| @keunst-ws/web-app | 1.0.3 | 2025-09-15T05:21:20.383Z |
| @keunst-ws/ssl-ynfo | 1.0.9 | 2025-09-15T05:21:20.927Z |




