TL; DR
Ing tanggal 14 September 2025, para peneliti nemokake Shai-Hulud, cacing sing bisa nggandakake awake dhewe sing ndhelik ing njero paket npm, ngowahi pembaruan ketergantungan rutin dadi skala lengkap serangan chain sumberKapisan ditemokake ing @ctrl/warna cilik paket dening Daniel dos Santos Pereira, Shai-Hulud ngumpulake rahasia, ngekstrak liwat repo lan alur kerja GitHub, lan nerbitake maneh ing registri nggunakake kredensial sing dicolong. Sajrone sawetara dina, jumlah paket sing kena infeksi mundhak saka puluhan dadi atusan, ngonfirmasi manawa Shaihulud dudu mung trojan liyané nanging cacing sing dirancang kanggo nyebar kanthi otomatis ing ekosistem npm.
Impact: sembarang pangembang utawa CI runner sing nginstal paket npm umum ana ing risiko.
Tindakan langsung: mblokir versi sing dikenal, ngalih menyang instalasi mung-lockfile, muter token npm lan GitHub, audit alur kerja, lan ngawasi Indikator Kompromi (IoC).
Apa sing kedadeyan?
The Serangan rantai pasokan Shai-Hulud ing paket npm minangka salah sawijining kedadeyan sing paling ngganggu ing memori anyar. Ora kaya trojan sing terisolasi, cacing iki nyampur pencurian kredensial, eksfiltrasi otomatis, lan replikasi mandiriAkibate, jangka wektu infeksi nyusut saka sawetara minggu dadi mung sawetara jam.
Kanggo tim DevOps, piwulange jelas: yen saben instalasi bisa nglakokake kode, mula saben nganyari dependensi minangka titik pelanggaran potensial.
Vektor Awal lan Kredensial sing Ditargetake sing Bisa Ditindakake
Analisis awal nuduhake yen serangan kasebut kemungkinan diwiwiti karo credentials dicolongUmpamane, kampanye phishing spoofing npm login utawa panjaluk MFA bisa uga wis nyekel token pangembang. Sawise penyerang entuk pijakan pisanan, cacing kasebut nyebar kanthi nyematke awake dhewe menyang paket npm lan nyolong rahasia liyane saka:
- file konfigurasi npm seneng
.npmrc, asring ngemot token publikasi. - Variabel lingkungan lan konfigurasi nganggo GitHub PAT lan CI/CD rahasia.
- Titik pungkasan metadata awan (AWS, GCP, Azure) ngasilake kredensial sing umure cendhak kanggo gerakan lateral.
Mulane, nyolong kredensial dadi landasan peluncuran. Kanthi token npm sing valid lan rahasia GitHub, Shai-Hulud bisa nggandakake dhewe ing pirang-pirang paket lan repositori tanpa gaweyan manungsa tambahan.
Dampak Eksekutif saka Serangan Rantai Pasokan Shai-Hulud
Shai-Hulud isih aktif nganti saiki. Cacing iki nyepetake wektu dampak. Apa sing biyen butuh pirang-pirang minggu karo trojan saiki bisa nyebar sajrone pirang-pirang jam. Akibate, panyebarane luwih cepet lan luwih angel dikendhaleni. Iku maju kanthi:
- Nyolong token publikasi npm lan rahasia GitHub.
- Nerbitake maneh awake dhewe menyang paket npm liyane.
- Nambahake alur kerja GitHub Actions sing mbebayani kanggo persistensi.
Sapa sing kena pengaruh:
Tim apa wae sing nginstal paket npm umum bakal kena pengaruh. Kajaba iku, para pangembang kanthi token npm utawa GitHub sing disimpen ing cache ngadhepi risiko dhuwur. Pelari CI sing nggunakake rahasia sing jembar uga rentan.
Risiko bisnis
Dampak bisnis saya tambah cepet. Token sing dicolong bisa nyebabake pengambilalihan akun, pembajakan paket, lan malah penyalahgunaan cloud. Kajaba iku, alur kerja GitHub sing terus-terusan ndadekake luwih angel diresiki. Mulane, tim kudu nganggep Shai-Hulud minangka kedadeyan sing lagi ditindakake, dudu kedadeyan sing ditutup.
Cara Kerja Serangan Rantai Pasokan Shai-Hulud ing Paket npm
Tujuan lan motif penyerang
Kampanye iki ngoptimalake telung perkara:
- Tujuan pisanan yaiku kanggo nyolong kredensial kanthi skala gedhe saka laptop pangembang lan CI runner. Iki kalebu token publikasi npm, token GitHub, lan kredensial maya. Nyatane, pirang-pirang analisis ngonfirmasi panen rahasia sistematis, kayata mbukak TruffleHog lan query titik pungkasan metadata maya.
- Tujuan kapindho yaiku kanggo nyebar kanthi otomatis kanthi nyalahgunakake hak penerbitan saka pangurus sing kena pengaruh. Akibate, siji pijakan cepet ngembang dadi akeh, amarga versi anyar saka paket liyane sing kena infeksi muncul tanpa gaweyan manungsa tambahan.
- Tujuan kaping telu yaiku kanggo tetep lan bisa diekstrak kanthi dipercaya liwat infrastruktur GitHub. Penyerang nggawe repo umum jenenge "Shai-Hulud" kanthi basis ganda64 data.json, lan saliyane iku, dheweke nandur alur kerja sing nggawe serialisasi ${{ toJSON(rahasia) }} lan ngirim menyang webhook statis.
Keuntungan sing bisa uga kalebu akses jangka panjang menyang registri lan kode sumber, gerakan lateral sing cepet menyang akun maya, lan pilihan kanggo nggawe rantai pasokan luwih lanjut. Pelaporan umum nuduhake repo pribadi sing dibalik menyang publik kanthi "-migrasi" akhiran, sing nambah paparan data lan momentum
Ing njero Muatan Shai-Hulud: bundel.js ing Paket npm
Kapal Shai-Hulud minangka gedhe, dibundel Webpack lan diminimalake banget Berkas JavaScript (bundel.js, udakara 3–3.7 MB) sing nglakokake saka sawise instalasi nyambung paket.jsonAkibate, Saben instalasi micu muatan kanthi otomatis. Desain iki ndhelikake pengenal, ngompres aliran kontrol, lan ndorong kabeh logika dadi siji artefak sing dieksekusi sajrone instalasi. Analis terus-terusan ngonfirmasi bundling Webpack, ukuran file sing ora biasa, lan eksekusi wektu instalasi.
Sipat-sipat obfuskasi lan anti-analisis sing bakal sampeyan deleng ing conto:
- Grafik modul sing diminimalake kanthi ID modul numerik, komentar sing jarang, lan aliran kontrol sing rata. Kajaba iku, struktur iki ndadekake review manual dadi angel banget.
- Ndhelikake tali liwat lapisan base64 lan pembantu konstruksi. Contone, Encoding lan decoding base64 sing diulang-ulang biasane katon ing sekitar rutinitas exfiltration.
- Pangiriman dinamis liwat evalpola gaya lan awak fungsi sing digawe, saengga kode bisa ngowahi prilaku nalika runtime.
- Penyaringan OS luwih seneng eksekusi Linux lan macOS utamane ing CI runner lan laptop pangembang.
Saka sudut pandang fungsional, bundel iki modular. Writeup njlèntrèhaké modul kanggo panemuan OS, pemindaian rahasia sistem berkas lan git, akses SDK méga, operasi API GitHub, lan mesin propagasi sing nyunting paket liya sing diduwèni déning maintainer. Nyatane, StepSecurity lan ReversingLabs loro-lorone nyorot fungsi sing kanthi otomatis nganyari paket nganggo hook jahat.
Eksekusi Wektu Instalasi ing Shai-Hulud: Kepiye Paket npm Micu Worm
Serangan kasebut diwiwiti nalika sawise instalasi mbukak node bundel.js. Ing titik iki, skrip kasebut bakal nginisialisasi lan mbukak status kerja ing memori, nyetel tahapan kanggo operasi lengkap worm kasebut.
Panemon lan panen
- Payload dumps ngolah .env lan mindhai file lokal kanggo rahasia entropi dhuwur lan awalan token. Kajaba iku, iki uga ngembangake jangkoan kanthi mbukak TruffleHog.
- Iki nggoleki titik pungkasan metadata méga kanggo ngumpulake kredensial sing umure cendhak. Kayata, nelpon menyang
169.254.169.254ing AWS utawametadata.google.internaling GCP asring katon ing host sing kena infeksi. - Akibate, Kredensial apa wae sing ditemokake bakal langsung bisa digunakake kanggo nerbitake paket npm anyar utawa nglakokake alur kerja GitHub.
Exfiltration
- Cacing kasebut nggawe repo GitHub anyar sing jenenge Shai-Hulud lan nulis kode ganda sing dienkode base64
data.jsonkanthi rincian platform, pembuangan lingkungan, lan rahasia. Kaya sing bisa dideleng, prilaku rame iki gampang dideleng yen para pembela ngerti ngendi kudu nggoleki. - Iku uga nandur alur kerja GitHub Actions, asring ing cabang sing jenenge shai-hulud, sing nggawe serial
${{ toJSON(secrets) }}lan ngirim data menyang webhook statis. Salajengipun, alur kerja iki terus nganti ana wong sing mbusak kanthi aktif.
Panyebaran
- Kanthi token npm sing ditemokake, payload bakal ndhaptar kabeh paket sing diduweni dening maintainer sing wis disusupi. Banjur, payload bakal njupuk saben tarball, nyuntikake bundle.js lan entri pasca-instalasi, lan nerbitake maneh paket kasebut.
- Akibate, puluhan paket sing kena infeksi bisa muncul sajrone sawetara jam, sing nambah radius ledakan ing saindenging ekosistem.
Kegigihan lan paparan
Cacing iki njaga alur kerja sing ala supaya tetep urip lan, ing sawetara kasus, mbalikke repo pribadi menyang publik kanthi "-migrasi" akhiran. Sakabèhé, iki njamin penyerang njaga pijakan lan ngoptimalake kebocoran data.
Cathetan deteksi kunci
Panggunaan sing ora umum iki ${{ toJSON(secrets) }} Alur kerja ing Tindakan arang banget. Mulane, tim kudu nganggep iki minangka indikator sinyal dhuwur sajrone perburuan.
Pola alur kerja sing resik sing kudu sampeyan goleki
Panggunaan sing ora umum iki kanggo JSON (rahasia) ing Tindakan minangka indikator sinyal dhuwur ing kedadeyan iki.
Pseudo-kode propagasi tingkat dhuwur (aman, deskriptif)
Para analis mirsani puteran iki kanthi skala gedhe, sing nerangake lompatan cepet saka puluhan nganti atusan paket sing kena infeksi.
Apa sebabe iki cacing ing ekosistem paket?
Cacing iku malware sing nyebar dhewe tanpa mbutuhake langkah operator manual ing saben tahapan. Ing sistem operasi, cacing biasane ngeksploitasi kerentanan jaringan kanggo pindhah saka siji mesin menyang mesin liyane. Kosok baline, Shai-Hulud beroperasi ing njero registri npm. Jalur sing efisien yaiku liwat panggunaan maneh kredensial.
Cacing iki njupuk kauntungan saka token npm publish sing dicolong. Sanalika entuk kredensial sing valid, bakal nerbitake maneh versi sing kena infeksi ing sangisore paket liyane sing diduweni dening pengelola sing padha. Sabanjure, paket kasebut diinstal dening pangembang utawa pelari CI sing ora curiga, lan siklus kasebut diulang.
Amarga saka iku, analis keamanan, kalebu Wacan peteng, nglasifikasikake Shai-Hulud minangka cacing sing bisa nggandakake awake dhewe tinimbang trojan prasaja utawa kedadeyan typo. Bedane penting: trojan biasane ngrusak siji host, nanging cacing kanthi otomatis nambah dampak ing sawijining ekosistem.
Lembar contekan "Cara kerjane"
Kanggo ngringkes siklus urip Shai-Hulud, iki ana contonecisrincian langkah-langkah utama:
- Paket karo sawise instalasi wis dipasang, lan
bundle.jsnglakokake. - Payload mbuwang variabel lingkungan, mindhai file lan riwayat git, mbukak TruffleHog, lan nggoleki layanan metadata méga. Akibate, rahasia apa waé sing ditemokake bakal langsung migunani.
- Eksfiltrasi kedadeyan kanthi rong cara: pisanan, kanthi nggawe repo umum sing jenenge Shai-Hulud kanthi kode base64 dobel
data.json; kapindho, kanthi nandur alur kerja GitHub Actions sing ngirim${{ toJSON(secrets) }}menyang webhook. - Nggunakake token npm sing dicolong, worm kasebut nerbitake maneh kabeh paket liyane sing diduweni dening maintainer sing disusupi nganggo hook jahat sing padha. Kanthi cara iki, infeksi kasebut saya tambah akeh kanthi cepet.
- Pungkasanipun, penyerang nyimpen luwih akeh rahasia, luwih akeh paket kanggo disebarake, lan ketekunan ing njero akun lan repositori GitHub.
Kepiye carane supaya ora kena serangan kaya ngene iki, kanthi praktis
Shai-Hulud kuwi kaya weker. Cacing sing nyolong token lan nerbitake maneh awake dhewe dudu risiko ing mangsa ngarep, nanging urip ing ekosistem paket npm dina iki. Kanggo nyegah jinis iki serangan chain sumber, tim butuh kontrol sing bisa diprogram, otomatis, lan dileksanakake langsung ing CI/CD pipelines. Iki minangka pertahanan sing padha sing wis bisa sampeyan lakoni Xygeni.
Mungkasi artefak ala ing gapura
Sampeyan kudu mindhai paket npm lan tarball sadurunge tekan proyek pangembang utawa CI. Ukuran gedhe banget bundle.js file, pasca instalasi sing mencurigakan hooks, lan tandha-tandha obfuscation kabeh dadi tandha bebaya awal. Kajaba iku, ngetrapake periode pendinginan lan versi sing disemat ing pipelines nyegah rilis seger sing durung diverifikasi supaya ora dikonsumsi kanthi otomatis.
Harden CI/CD kanthi gawan
Guardrails in CI/CD iku penting. Dheweke nolak gabungan utawa instalasi sing ngenalake skrip utawa binar anyar. Ing wektu sing padha, dheweke mblokir alur kerja sing nggawe rahasia serial utawa nyoba kiriman eksternal. Tim uga kudu mbutuhake instalasi mung file kunci (npm ci) ing kabeh pipelinesupaya set ketergantungan tetep bisa direproduksi lan aman.
Kurangi radius ledakan token
Rahasia ora kena dadi siji-sijine titik kegagalan. Terus-terusan pindai kode, konfigurasi, lan pipeline output kanggo kredensial sing wis kabongkarToken kudu diwatesi kanthi sempit, diwenehi umur sing cendhak, lan diputer kanthi otomatis nalika paparan dideteksi. Minangka aturan, anggep token apa wae sing digunakake ing host sing nglakokake instalasi sawise sing mencurigakake minangka disusupi.
Delengen prilaku cacing luwih awal
Deteksi anomali iku kuncine. Contone, lonjakan dadakan ing acara publikasi npm, alur kerja anyar sing katon tanpa alesan, utawa repo publik anyar sing kebak file sing dienkode aneh kabeh bisa menehi sinyal aktivitas cacing. Mulane, tim kudu cepet-cepet menehi tandha lan ngisolasi para pengelola utawa pelari sing nuduhake tandha-tandha peringatan kasebut.
Ndandani kanthi cepet tanpa ngrusak bangunan
Kacepetan lan keamanan kudu bebarengan. Otomatis pull requests bisa ngganti paket npm sing wis disusupi nganggo versi sing wis diverifikasi. Kajaba iku, jangkauan lan kemampuan kanggo dieksploitasi Analisis njamin peningkatan tetep minimal lan stabil. Pungkasan, bangun maneh pelari CI sing kena pengaruh saka gambar sing resik sawise paparan dikonfirmasi, supaya serangan ora nyebar luwih lanjut.
Indikator Kompromi (IoCs)
Nalika nganalisis Shai-Hulud, tim kudu ngati-ati loro-lorone IoC statis ing file lan IoC perilaku in pipelines. Bebarengan, sinyal-sinyal iki mbantu ndeteksi infeksi luwih awal lan nanggapi sadurunge cacing nyebar luwih lanjut.
IoC Statis
Intisari SHA-256 ing ngisor iki cocog sing diamati bundle.js conto:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
Kajaba iku, gatekna pola-pola sing bola-bali iki:
- A
bundle.jsing oyot paket. "postinstall": "node bundle.js"nangpackage.json.- Gudang sing dijenengi Shai-Hulud.
- Alur kerja GitHub sing ngemot
${{ toJSON(secrets) }}.
IoC Perilaku
Saliyane tandha tangan file, aktivitas cacing katon liwat prilaku. Contone:
- Semburan dadakan saka acara nerbitake npm saka siji pangurus.
- Alur kerja anyar sing ngirim data menyang titik pungkasan eksternal.
- Panjaluk POST metu dipicu saka CI runners.
- Repo umum sing bubar digawe nganggo blob sing dienkode.
Mburu cepet
Dudutan: Piwulang saka Shai-Hulud
The Serangan rantai pasokan Shai-Hulud Ing paket npm nuduhake betapa ringkih rantai pasokan piranti lunak saiki. Cacing iki ora mung nambah kode angkoro. Dheweke nyolong token, ngirim data, banjur nerbitake maneh awake dhewe kanthi otomatis. Amarga iki, serangan kasebut nyebar sajrone pirang-pirang jam tinimbang pirang-pirang minggu.
Kanggo para pangembang lan tim DevOps, piwulange wis jelas:
- Saben instalasi mbukak kode. Sanajan paket npm umum bisa ndhelikake worm pasca-instalasi.
- Saben token nduweni nilai sing dhuwur. Sawise dicolong, bisa digunakake kanggo nyebarake malware luwih lanjut.
- Saben pipeline butuh pamriksaan. tanpa guardrails babagan katergantungan, alur kerja, lan rahasia, siji kompromi bisa cepet ngrusak produksi.
Mulane, nyegah serangan kaya Shai-Hulud mbutuhake kontrol sing otomatis lan gampang dileksanakake. Tim kudu mindhai paket npm sadurunge nginstal, nggunakake lockfile build, ndeteksi aktivitas penerbitan sing aneh, lan njaga token tetep cendhak. Langkah-langkah iki ora opsional maneh. Nanging, iki minangka pondasi ketangguhan ing jaman modern. pipelines.
Ing Xygeni, kita ndeleng serangan rantai pasokan Shai-Hulud minangka peringatan kanggo kabeh ekosistem sumber terbuka. Cara sing lestari yaiku nggawa keamanan rantai pasokan langsung menyang proses pangembangan, ing titik ing ngendi kode, paket npm, lan pipelinenyambung s.
Ing ngisor iki dhaptar lengkap paket lan versi npm sing dilapurake wis disusupi ing Shai-Hulud. Gunakake kanggo mriksa file kunci, registri, lan CI sampeyan. pipelines kanggo paparan.
Daftar paket sing kena kompromi
📦 Pratinjau Paket npm sing Dikompromi
| Jeneng Paket | versi | Tanggal Publish |
|---|---|---|
| mesin-aturan-json-disederhanakake | 0.2.1 | 2025-09-14T17:58:51.203Z |
| pilot udara | 0.8.8 | 2025-09-14T18:35:07.600Z |
| grafik-kawruh-mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| panglima udara | 0.3.1 | 2025-09-14T18:35:09.521Z |
| gapura mlumpat | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/jendhela-panggilan-bali | 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/inti | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/tabel-reaksi | 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/manajer-konfigurasi | 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/validasi | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/inti | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ Deleng Dhaptar Lengkap Paket sing Dikompromi
| Jeneng Paket | versi | Tanggal Publish |
|---|---|---|
| mesin-aturan-json-disederhanakake | 0.2.1 | 2025-09-14T17:58:51.203Z |
| pilot udara | 0.8.8 | 2025-09-14T18:35:07.600Z |
| grafik-kawruh-mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| panglima udara | 0.3.1 | 2025-09-14T18:35:09.521Z |
| gapura mlumpat | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/jendhela-panggilan-bali | 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/inti | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/tabel-reaksi | 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/manajer-konfigurasi | 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/validasi | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/inti | 0.2.1 | 2025-09-14T20:45:55.888Z |
| @hestjs/cqrs | 0.1.6 | 2025-09-14T20:45:55.966Z |
| @hestjs/skalar | 0.1.7 | 2025-09-14T20:45:56.386Z |
| unggahan-berkas-ng2 | 7.0.3 | 2025-09-15T02:44:29.555Z |
| penanganan notifikasi kapasitor | 0.0.2 | 2025-09-15T04:54:48.431Z |
| kapasitor-plugin-vonage | 1.0.2 | 2025-09-15T04:54:48.501Z |
| plugin-kapasitor-aplikasi-kesehatan | 0.0.2 | 2025-09-15T04:54:48.704Z |
| kapasitorandroidpermissions | 0.0.4 | 2025-09-15T04:54:48.753Z |
| voip-callkit | 1.0.2 | 2025-09-15T04:54:49.223Z |
| kapasitor-plugin-ihealth | 1.1.8 | 2025-09-15T04:55:08.113Z |
| @art-ws/umum | 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/aplikasi-web | 1.0.3 | 2025-09-15T05:21:20.383Z |
| @art-ws/ssl-info | 1.0.9 | 2025-09-15T05:21:20.927Z |




