TL; DR
14. septembril 2025 tuvastasid teadlased Shai Hulud, sees peidus olev ennastpaljunev uss npm paketid, muutes rutiinse sõltuvusvärskenduse täismõõduliseks tarneahela rünnakEsmakordselt märgatud @ctrl/tinycolor Daniel dos Santos Pereira loodud paketiga kogub Shai-Hulud saladusi, filtreerib need välja GitHubi hoidlate ja töövoogude kaudu ning avaldab end uuesti registris varastatud volituste abil. Mõne päeva jooksul hüppas nakatunud pakettide arv kümnetelt sadadele, mis kinnitas, et Shaihulud pole lihtsalt järjekordne trooja, vaid uss, mis on loodud automaatselt NPM-i ökosüsteemis levima.
Mõju: Iga arendaja või CI-käivitaja, kes installib avalikke npm-pakette, on ohus.
Kohesed toimingud: blokeerige teadaolevad versioonid, minge üle ainult lukustusfailidel põhinevatele installidele, vahetage npm-i ja GitHubi tokeneid, auditeerige töövooge ja jälgige kompromiteerimise indikaatoreid (IoC-sid).
Mis juhtub?
. Shai-Huludi tarneahela rünnak npm-pakettides on üks viimase aja häirivamaid intsidente. Erinevalt isoleeritud troojalastest seguneb see uss volituste vargus, automaatne väljatõrjumine ja eneserepliikSelle tulemusel lühenes nakatumise ajavahemik nädalatelt vaid tundidele.
DevOps meeskondade jaoks on õppetund selge: kui iga install saab koodi käivitada, siis iga sõltuvuse värskendus on potentsiaalne turvarikkumine.
Võimalik algvektor ja sihitud volitused
Varajane analüüs näitab, et rünnak algas tõenäoliselt varastatud volikirjadNäiteks õngitsuskampaaniad, mis võltsivad npm-i. login Või MFA-päringud võisid haarata arendaja märke. Kui ründajad olid selle esimese jalgealuse saanud, levis uss npm-pakettidesse manustades ja rohkem saladusi varastades:
- npm-i konfiguratsioonifailid nagu
.npmrc, mis sageli sisaldavad avaldamislubasid. - Keskkonnamuutujad ja konfiguratsioonid GitHubi PAT-idega ja CI/CD saladusi.
- Pilve metaandmete lõpp-punktid (AWS, GCP, Azure), mis annab lühiajalisi volitusi külgliikumiseks.
Seetõttu sai mandaatide vargusest alguse saamise viis. Kehtivate npm-tokenite ja GitHubi saladuste abil sai Shai-Hulud ise replikeeruda mitme paketi ja repositooriumi vahel ilma täiendava inimtööta.
Shai-Huludi tarneahela rünnaku mõju juhtkonnale
Shai-Hulud on tänapäevalgi aktiivne. See uss kiirendab mõju ajajoont. See, mis kunagi troojalasega nädalaid võttis, toimub nüüd tundidega. Selle tulemusena... levik on kiirem ja raskem ohjeldada. See edeneb järgmiselt:
- Npm-i avaldamismärkide ja GitHubi saladuste varastamine.
- Avaldab end uuesti teistes npm-pakettides.
- Pahatahtlike GitHub Actionsi töövoogude lisamine püsivuse tagamiseks.
Keda see mõjutab:
Iga meeskond, kes installib avalikke npm-pakette, on haavatav. Lisaks on suur risk arendajatel, kellel on vahemällu salvestatud npm- või GitHubi tokenid. Samuti on haavatavad CI-käitlejad, kes kasutavad laiaulatuslikke saladusi.
Äririsk
Mõju ettevõttele kasvab kiiresti. Varastatud märgid võivad viia konto ülevõtmiseni, pakettide kaaperdamiseni ja isegi pilve väärkasutamiseni. Lisaks raskendab püsivus GitHubi töövoogudes nende puhastamist. Seetõttupeavad meeskonnad käsitlema Shai-Huludi käimasoleva, mitte lõppenud intsidendina.
Kuidas Shai-Huludi tarneahela rünnak npm-pakettides toimib
Ründaja eesmärgid ja motiiv
Kampaania optimeerib kolme asja jaoks:
- Esimene eesmärk on varastada volitusi suures mahus arendajate sülearvutitest ja CI-käivitajatest. See hõlmab npm-i avaldamismärke, GitHubi märke ja pilvepõhiseid volikirju. Tegelikult kinnitavad mitmed analüüsid süstemaatilist salajaste andmete kogumist, näiteks TruffleHogi käitamine ja pilve metaandmete lõpp-punktide päringud.
- Teine eesmärk on levivad automaatselt kuritarvitades ohustatud hooldajate avaldamisõigusi. Selle tulemusel laieneb üks tugipunkt kiiresti paljudeks, kuna teiste pakettide uued nakatunud versioonid ilmuvad ilma täiendava inimtööta.
- Kolmas eesmärk on püsivad ja filtreeruvad usaldusväärselt GitHubi infrastruktuuri kaudu. Ründajad loovad avaliku hoidla nimega „Shai-Hulud“ kahekordse base64-ga andmed.jsonja lisaks loovad nad töövoo, mis serialiseerib ${{ toJSON(saladused) }} ja postitab selle staatilisse veebihooki.
Tõenäoline tasu hõlmab pikaajalist juurdepääsu registritele ja lähtekoodile, kiiret horisontaalset liikumist pilvekontodele ning võimalust tarneahelat veelgi relvana kasutada. Avalik aruandlus näitab, et privaatsed hoidlad on avalikeks muudetud. „-migratsioon” järelliide, mis suurendab andmetega kokkupuudet ja hoogu
Shai-Huludi kasuliku lasti sees: bundle.js npm-pakettides
Shai-Hulud laevad kui suur, Webpack-komplekteeritud ja tugevalt minimeeritud JavaScripti fail (bundle.js, umbes 3–3.7 MB) mis käivitatakse a-st pärast installimist haakima pakett.jsonJärelikult, Iga install käivitab kasuliku koormuse automaatselt. See disain peidab identifikaatorid, tihendab juhtimisvoo ja koondab kogu loogika ühte artefakti, mis käivitatakse installimise ajal. Analüütikud kinnitavad järjepidevalt Webpacki komplekteerimist, ebatavalist failisuurust ja installimise ajal käivitamist.
Näidetes esinevad hämamise ja analüüsivastased tunnused:
- Minimeeritud mooduligraaf numbriliste mooduli ID-de, hõredate kommentaaride ja lameda juhtimisvooga. Lisaks, See struktuur muudab käsitsi ülevaatamise äärmiselt keeruliseks.
- Stringi peitmine base64 kihtide ja ehitusabiliste kaudu. Näiteks, Korduv base64 kodeering ja dekodeerimine ilmneb tavaliselt väljafiltreerimisrutiinide ümbruses.
- Dünaamiline dispetšer läbi evalstiilis mustrid ja genereeritud funktsioonide kehad, võimaldades seega koodil käitumist käitusajal muuta.
- OS-i filtreerimine eelistada Linuxi ja macOS-i käitumist, eriti CI-töölaual ja arendajate sülearvutitel.
Funktsionaalsest vaatenurgast on komplekt modulaarne. Kirjeldatakse mooduleid operatsioonisüsteemi tuvastamiseks, failisüsteemi ja Giti salakoodide skannimiseks, pilve SDK-le juurdepääsuks, GitHubi API toiminguteks ja levitamismootoriks, mis redigeerib hooldajale kuuluvaid teisi pakette. Tegelikult toovad nii StepSecurity kui ka ReversingLabs esile funktsiooni, mis automaatselt pahatahtliku konksuga pakette värskendab.
Installiaegne täitmine Shai-Huludis: kuidas npm-paketid ussi käivitavad
Rünnak algab siis, kui pärast installimist käivitub sõlm bundle.js. Sel hetkel skript initsialiseerib ja pakib lahti mälus oleva tööoleku, luues eeldused ussi täielikuks toimimiseks.
Avastamine ja koristamine
- Kasulik koormus loob faili process.env ja skannib kohalikke faile kõrge entroopiaga saladuste ja tokeni eesliidete suhtes. Lisaks laiendab see ulatust TruffleHogi käitamisega.
- See pärib lühiajaliste volituste kogumiseks pilve metaandmete lõpp-punkte. Näiteks kõned
169.254.169.254AWS-is võimetadata.google.internalGCP-l esinevad sageli nakatunud peremeesorganismides. - Järelikult Iga leitud mandaat muutub koheselt kasutatavaks uute npm-pakettide avaldamiseks või GitHubi töövoogude edastamiseks.
Välja filtreerimine
- Uss loob uue GitHubi repositooriumi nimega Shai Hulud ja kirjutab topelt-base64 kodeeringuga
data.jsonplatvormi üksikasjade, keskkonnaväljavõtete ja saladustega. Nagu näha, on seda lärmakat käitumist lihtne märgata, kui kaitsjad teavad, kust otsida. - Samuti istutab see GitHub Actionsi töövoo, sageli harule nimega shai-hulud, mis serialiseerib
${{ toJSON(secrets) }}ja postitab andmed staatilisse veebihooki. Lisaks püsib see töövoog seni, kuni keegi selle aktiivselt eemaldab.
Paljundamine
- Iga avastatud npm-tokeni korral loetleb kasulik koormus kõik ohustatud hooldajale kuuluvad paketid. Seejärel hangib see iga tarballi, süstib bundle.js ja installijärgse kirje ning avaldab paketi uuesti.
- Selle tulemusel võib mõne tunniga ilmuda kümneid nakatunud pakke, mis mitmekordistavad plahvatuse raadiust kogu ökosüsteemis.
Püsivus ja kokkupuude
Uss hoiab pahatahtlikke töövooge elus ja mitmel juhul muudab privaatsed hoidlad avalikeks, kasutades „-migratsioon” järelliide. Kokkuvõttes tagab see ründajale jalgealuse säilitamise ja maksimeerib andmete lekke.
Võtme tuvastamise märkus
See ebatavaline kasutamine ${{ toJSON(secrets) }} toimingute töövoogudes on haruldane. Seetõttu võistkonnad peaksid seda jahi ajal käsitlema kõrge signaali indikaatorina.
Puhastatud töövoo muster, mida peaksite otsima
See ebatavaline kasutamine et JSON(saladused) Toimingutes on selle juhtumi puhul kõrge signaali indikaator.
Kõrgetasemelise leviku pseudokood (turvaline, kirjeldav)
Analüütikud täheldasid seda tsüklit ulatuslikult, mis seletab nakatunud pakettide arvu kiiret hüpet kümnetelt sadadele.
Miks see on uss pakendiökosüsteemis
Uss on pahavara, mis levib iseseisvalt, ilma et igas etapis oleks vaja käsitsi operaatori samme. Operatsioonisüsteemides kasutavad ussid tavaliselt võrgu haavatavusi ära, et ühest masinast teise liikuda. Seevastu Shai-Hulud tegutseb npm-registri sees. Selle efektiivne tee on läbi volituste taaskasutamine.
Uss kasutab ära varastatud npm-i avaldamismärke. Niipea kui see saab kehtivad volitused, avaldab see nakatunud versioonid uuesti sama hooldaja teiste pakettide all. Seejärel installivad need paketid pahaaimamatud arendajad või CI-käitajad ja tsükkel kordub.
Sel põhjusel on turvaanalüütikud, sealhulgas Tume lugemine, liigitage Shai-Hulud kui isepaljunev uss mitte lihtne troojalane või trükiviga. Erinevus on oluline: troojalane kahjustab tavaliselt ühte peremeesorganismi, aga uss võimendab oma mõju automaatselt kogu ökosüsteemis.
Spikker „Kuidas see töötab”
Shai-Huludi elutsükli kokkuvõtteks on siin üks miinuscisselle peamiste sammude jaotus:
- Pakett koos pärast installimist on paigaldatud ja
bundle.jstäideviib. - Kasulik koormus loob keskkonnamuutujad, skannib faile ja Giti ajalugu ning käivitab TruffleHogja pärib pilve metaandmete teenuseid. Järelikult muutub iga leitud saladus kohe kasulikuks.
- Eksfiltratsioon toimub kahel viisil: esiteks luues avaliku hoidla nimega Shai Hulud kahekordse base64-kodeeringuga
data.json; teiseks, GitHub Actionsi töövoo loomisega, mis postitab${{ toJSON(secrets) }}veebikonksu külge. - Kasutades mis tahes varastatud npm tokenit, avaldab uss kõik teised ohustatud hooldajale kuuluvad paketid sama pahatahtliku konksu abil. Sel viisil nakkus kiiresti levib.
- Lõpuks on ründajal rohkem saladusi, rohkem pakette, mida levitada, ja püsivus GitHubi kontode ja repositooriumide sees.
Kuidas seda tüüpi rünnakuid praktiliselt vältida
Shai-Hulud on äratuskell. Uss, mis varastab tokeneid ja avaldab end uuesti, ei ole tulevikuoht, see on reaalajas olemas. npm pakettide ökosüsteem täna. Selle tüübi vältimiseks tarneahela rünnakmeeskonnad vajavad programmeeritavaid, automatiseeritud ja otse süsteemis jõustatavaid kontrolle CI/CD pipelines. Need on samad kaitsemeetmed, mida saate juba rakendada Xygeni.
Peatage väravas halvad esemed
Enne arendajateni või CI-töödeni jõudmist peaksite skannima npm-pakette ja tarballe. bundle.js failid, kahtlased pärast installimist hooksja hägustamise markerid toimivad kõik varajaste ohumärkidena. Lisaks on ooteaegade ja kinnitatud versioonide jõustamine pipelines takistab värskete, kontrollimata väljalasete automaatset tarbimist.
Harden CI/CD vaikimisi
Guardrails in CI/CD on olulised. Nad lükkavad tagasi liitmised või installid, mis toovad kaasa uusi skripte või binaarfaile. Samal ajal blokeerivad nad töövooge, mis serialiseerivad saladusi või üritavad teha väliseid postitusi. Meeskonnad peaksid nõudma ka ainult lukustusfailidega installimisi (npm ci) kõigis pipelinenii et sõltuvuste komplektid jäävad reprodutseeritavaks ja turvaliseks.
Vähendage märgi plahvatusraadiust
Saladused ei tohi muutuda ainsaks rikkeallikaks. Skannige pidevalt koodi, konfiguratsioone ja pipeline väljund jaoks avalikustatud volitusedTokenite ulatust tuleks kitsalt piirata, anda neile lühike eluiga ja neid tuleks kokkupuute tuvastamisel automaatselt vahetada. Reeglina tuleks kõiki tokeneid, mida kasutatakse hostil, mis käivitas kahtlase installijärgse toimingu, käsitleda kompromiteerituna.
Näe usside käitumist varakult
Anomaalia tuvastamine on võtmetähtsusega. Näiteks npm-i avaldamissündmuste järsk suurenemine, ilma põhjuseta ilmuvad uued töövood või imelike kodeeritud failidega täidetud värsked avalikud repositooriumid võivad kõik viidata usside aktiivsusele. Seetõttu peaksid meeskonnad kiiresti hoiatusi andma ja isoleerima kõik hooldajad või käitajad, kes neid hoiatusmärke näitavad.
Paranda kiiresti ilma ehitusi rikkumata
Kiirus ja ohutus peavad käima käsikäes. Automatiseeritud pull requests saab asendada ohustatud npm-paketid kontrollitud versioonidega. Lisaks kättesaadavus ja ärakasutatavus Analüüs tagab uuenduste minimaalse püsimise ja stabiilsuse. Lõpuks, kui kokkupuude on kinnitust leidnud, taasta mõjutatud CI-jooksjad puhastest piltidest, takistades rünnaku edasist levikut.
Kompromissi indikaatorid (IoC)
Shai-Huludi analüüsimisel peaksid meeskonnad jälgima mõlemat staatilised IoC-d failides ja käitumuslikud IoC-d in pipelines. Koos aitavad need signaalid nakkusi varakult tuvastada ja reageerida enne, kui uss edasi levib.
Staatilised IoC-d
Täheldati järgmist SHA-256 дайджестide vastet bundle.js proovid:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
Lisaks jälgige neid korduvaid mustreid:
- A
bundle.jspaketi juurkataloogis. "postinstall": "node bundle.js"seespackage.json.- Nimetatud hoidlad Shai Hulud.
- GitHubi töövood, mis sisaldavad
${{ toJSON(secrets) }}.
Käitumuslikud IoC-d
Lisaks failisignatuuridele ilmneb ussi aktiivsus ka käitumise kaudu. Näiteks:
- Ühe hooldaja äkilised npm-i avaldamissündmuste pursked.
- Uued töövood, mis edastavad andmeid välistele lõpp-punktidele.
- CI-käivitajate poolt käivitatud väljaminevad POST-päringud.
- Hiljuti loodud avalikud repositooriumid kodeeritud blobidega.
Kiired jahid
Kokkuvõte: õppetunnid Shai-Huludilt
. Shai-Huludi tarneahela rünnak npm-pakettides näitab, kui hapraks on tänapäeva tarkvara tarneahel muutunud. See uss tegi enamat kui lihtsalt pahatahtliku koodi lisamist. See varastas tokeneid, saatis andmeid välja ja avaldas end seejärel automaatselt uuesti. Seetõttu levis rünnak nädalate asemel tundide jooksul.
Arendajatele ja DevOps meeskondadele on õppetunnid selged:
- Iga install käivitab koodi. Isegi tavaline npm-pakett võib peita installijärgse ussi.
- Igal žetoonil on kõrge väärtus. Kui see on varastatud, saab seda kasutada pahavara edasiseks levitamiseks.
- Iga pipeline vajaduste kontrollid. Ilma guardrails sõltuvuste, töövoogude ja saladuste osas võib üks kompromiss tootmist kiiresti mõjutada.
Seetõttu nõuab selliste rünnakute nagu Shai-Hulud peatamine automaatseid ja hõlpsasti jõustatavaid kontrolle. Meeskonnad peaksid enne installimist skannima npm-pakette, kasutama lukustusfailide järke, tuvastama kummalist avaldamistegevust ja hoidma tokenid lühiajalisena. Need sammud pole enam valikulised. Selle asemel on need tänapäeva maailmas vastupidavuse aluseks. pipelines.
Xygenis näeme Shai-Huludi tarneahela rünnakut hoiatusmärgina kogu avatud lähtekoodiga ökosüsteemile. Jätkusuutlik edasiminek on tarneahela turvalisuse otse arendusprotsessi kaasamine, koodi, npm-pakettide ja ... loomisel. pipelines ühenduvad.
Allpool on täielik nimekiri npm-pakettidest ja versioonidest, mille kohta on Shai-Huludis teatatud, et need on ohustatud. Kasutage seda oma lukustusfailide, registrite ja konfiguratsiooniliidese kontrollimiseks. pipelines särituse jaoks.
Ohustatud pakettide loend
📦 Kahjustatud npm-pakettide eelvaade
| Paketi nimi | versioon | Avaldaja kuupäev |
|---|---|---|
| json-rules-engine-lihtsustatud | 0.2.1 | 2025-09-14T17:58:51.203Z |
| õhupiloot | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-teadmiste-graaf | 1.2.1 | 2025-09-14T18:35:09.494Z |
| õhuväeülem | 0.3.1 | 2025-09-14T18:35:09.521Z |
| hüppevärav | 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/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/valideerimine | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/core | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ Vaata kahjustatud pakettide täielikku nimekirja
| Paketi nimi | versioon | Avaldaja kuupäev |
|---|---|---|
| json-rules-engine-lihtsustatud | 0.2.1 | 2025-09-14T17:58:51.203Z |
| õhupiloot | 0.8.8 | 2025-09-14T18:35:07.600Z |
| mcp-teadmiste-graaf | 1.2.1 | 2025-09-14T18:35:09.494Z |
| õhuväeülem | 0.3.1 | 2025-09-14T18:35:09.521Z |
| hüppevärav | 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/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/valideerimine | 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/skalaar | 0.1.7 | 2025-09-14T20:45:56.386Z |
| ng2-faili üleslaadimine | 7.0.3 | 2025-09-15T02:44:29.555Z |
| kondensaatori teavituskäitleja | 0.0.2 | 2025-09-15T04:54:48.431Z |
| kondensaatori pistikprogramm vonage | 1.0.2 | 2025-09-15T04:54:48.501Z |
| kondensaatori plugin-healthapp | 0.0.2 | 2025-09-15T04:54:48.704Z |
| kondensaatoriandroidi load | 0.0.4 | 2025-09-15T04:54:48.753Z |
| VoIP-kõnekomplekt | 1.0.2 | 2025-09-15T04:54:49.223Z |
| kondensaatori 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 |




