TL; DR
14. septembra 2025 výskumníci identifikovali Shai Hulud, samoreplikujúci sa červ ukrytý vo vnútri npm balíky, čím sa bežná aktualizácia závislostí premení na plnohodnotnú útok na dodávateľský reťazecPrvýkrát spozorovaný v @ctrl/malá farba Balík od Daniela dos Santosa Pereiru, Shai-Hulud, zbiera tajné údaje, odcudzuje ich prostredníctvom repozitárov a pracovných postupov GitHub a znova sa publikuje v registri pomocou ukradnutých prihlasovacích údajov. V priebehu niekoľkých dní sa počet infikovaných balíkov zvýšil z desiatok na stovky, čo potvrdzuje, že Šajhulud nie je len ďalší trójsky kôň, ale červ navrhnutý tak, aby sa automaticky šíril v ekosystéme npm.
vplyv: Každý vývojár alebo bežec CI, ktorý inštaluje verejné npm balíky, je vystavený riziku.
Okamžité akcie: blokovať známe verzie, prepínať na inštalácie iba z uzamknutých súborov, rotovať tokeny npm a GitHub, auditovať pracovné postupy a monitorovať indikátory kompromitácie (IoC).
Čo sa stane?
Útok na dodávateľský reťazec Shai-Hulud v balíkoch npm je jedným z najničivejších incidentov v poslednej dobe. Na rozdiel od izolovaných trójskych koní tento červ mieša krádež poverení, automatizované odcudzenie a samoreplikáciaV dôsledku toho sa časový harmonogram infekcie skrátil z týždňov na len hodiny.
Pre tímy DevOps je ponaučenie jasné: ak každá inštalácia dokáže spustiť kód, potom je každá aktualizácia závislostí potenciálnym bodom narušenia bezpečnosti.
Možné počiatočné vektorové a cielené poverenia
Včasná analýza naznačuje, že útok pravdepodobne začal ukradnuté prihlasovacie údajeNapríklad phishingové kampane falšujúce npm login alebo výzvy MFA mohli zachytiť vývojárske tokeny. Keď útočníci získali túto prvú pozíciu, červ sa rozšíril vložením do npm balíkov a krádežou ďalších tajných údajov z:
- konfiguračné súbory npm Ako
.npmrc, často obsahujúce publikačné tokeny. - Premenné prostredia a konfigurácie s GitHub PAT a CI/CD tajomstvo.
- Koncové body cloudových metadát (AWS, GCP, Azure) čo prináša krátkodobé poverenia pre laterálny pohyb.
Krádež poverení sa preto stala odrazovým mostíkom. S platnými tokenmi npm a tajnými údajmi GitHub sa Shai-Hulud mohol sám replikovať naprieč viacerými balíkmi a repozitármi bez dodatočného ľudského úsilia.
Dopad útoku Shai-Hulud na dodávateľský reťazec vo vedení spoločnosti
Shai-Hulud je stále aktívny. Tento červ urýchľuje časový harmonogram dopadu. Čo kedysi trvalo týždne s trójskym koňom, teraz sa odohráva v priebehu hodín. V dôsledku toho, šírenie je rýchlejšie a ťažšie sa dá zastaviť. Postupuje sa prostredníctvom:
- Krádež npm publish tokenov a GitHub secrets.
- Opätovné publikovanie seba samého do iných npm balíkov.
- Pridávanie škodlivých pracovných postupov akcií GitHub pre zachovanie perzistencie.
Koho sa to týka:
Každý tím, ktorý inštaluje verejné npm balíčky, je vystavený riziku. Okrem toho čelia vysokému riziku aj vývojári s uloženými npm alebo GitHub tokenmi. Zraniteľní sú aj behovníci CI, ktorí používajú tajné heslá so širokým rozsahom.
Obchodné riziko
Dopad na podnikanie rýchlo rastie. Ukradnuté tokeny môžu viesť k prevzatiu kontroly nad účtom, únosu balíkov a dokonca aj k zneužitiu cloudu. Okrem toho, perzistencia v pracovných postupoch GitHubu sťažuje ich čistenie. PretoTímy musia brať Shai-Hulud ako prebiehajúci incident, nie ako uzavretý.
Ako funguje útok Shai-Hulud Supply Chain v balíkoch npm
Ciele a motív útočníka
Kampaň je optimalizovaná pre tri veci:
- Prvým cieľom je kradnúť poverenia vo veľkom rozsahu z vývojárskych notebookov a bežcov CI. Patria sem tokeny npm publish, tokeny GitHub a cloudové prihlasovacie údaje. V skutočnosti viaceré analýzy potvrdzujú systematický zber tajných údajov, ako je spúšťanie TruffleHog a dotazovanie koncových bodov cloudových metadát.
- Druhým cieľom je automaticky sa šíri zneužívaním publikačných práv kompromitovaných správcov. V dôsledku toho sa jedna opora rýchlo rozšíri na mnoho, pretože nové infikované verzie iných balíkov sa objavia bez dodatočného ľudského úsilia.
- Tretím cieľom je pretrvávajú a spoľahlivo sa vylučujú prostredníctvom infraštruktúry GitHub. Útočníci vytvoria verejné úložisko s názvom „Shai-Hulud“ s dvojitou základňou64 data.jsona okrem toho zavádzajú pracovný postup, ktorý serializuje ${{ toJSON(tajomstvá) }} a uverejní ho na statickom webhooku.
Pravdepodobným prínosom je dlhodobý prístup k registrom a zdrojovému kódu, rýchly laterálny presun do cloudových účtov a možnosť ďalšieho vyzbrojenia dodávateľského reťazca. Verejné správy ukazujú, že súkromné repozitáre boli prevedené na verejné s... „-migrácia“ prípona, ktorá zvyšuje expozíciu dátam a dynamiku
Vnútri užitočného nákladu Shai-Hulud: bundle.js v balíkoch npm
Shai-Hulud sa dodáva ako veľký, zoskupený s Webpackom a silne minimalizovaný Súbor JavaScriptu (bundle.js, približne 3 – 3.7 MB) ktorý sa vykonáva z po inštalácii zavesiť package.jsonV dôsledku toho, Každá inštalácia automaticky spúšťa užitočné zaťaženie. Tento dizajn skrýva identifikátory, komprimuje tok riadenia a vkladá všetku logiku do jedného artefaktu, ktorý sa vykoná počas inštalácie. Analytici opakovane potvrdzujú zväzovanie Webpackov, nezvyčajnú veľkosť súborov a vykonávanie počas inštalácie.
Zmätok a antianalytické vlastnosti, ktoré uvidíte vo vzorkách:
- Minifikovaný graf modulov s číselnými ID modulov, riedkymi komentármi a splošteným tokom riadenia. Navyše, Táto štruktúra mimoriadne sťažuje manuálnu kontrolu.
- Skrývanie reťazca prostredníctvom vrstiev base64 a konštrukčných pomocníkov. Napríklad, Opakované kódovanie a dekódovanie base64 sa zvyčajne objavuje okolo rutín exfiltrácie.
- Dynamické odoslanie cez eval-štýlové vzory a generované telá funkcií, čo umožňuje kódu meniť správanie počas behu.
- Filtrovanie OS uprednostňovať spustenie v systémoch Linux a macOS, najmä na bežiacich CI a vývojárskych notebookoch.
Z funkčného hľadiska je balík modulárny. Štúdie opisujú moduly na objavovanie operačného systému, skenovanie súborového systému a tajných údajov Git, prístup k cloudovému SDK, operácie s GitHub API a propagačný engine, ktorý upravuje ďalšie balíky, ktoré správca vlastní. V skutočnosti StepSecurity aj ReversingLabs zdôrazňujú funkciu, ktorá automaticky aktualizuje balíky so škodlivým hookom.
Vykonanie počas inštalácie v Shai-Hulud: Ako npm balíky spúšťajú červa
Útok začína, keď poinštalácii sa spustí uzol bundle.js. V tomto bode sa skript inicializuje a rozbalí pracovný stav v pamäti, čím sa pripraví pôda pre plnú prevádzku červa.
Objav a zber
- Úžitková záťaž vypíše súbor process.env a prehľadá lokálne súbory, či neobsahujú tajné kódy s vysokou entropiou a prefixy tokenov. Okrem toho rozširuje pokrytie spustením TruffleHog.
- Dotazuje koncové body cloudových metadát na zhromažďovanie krátkodobých poverení. Napríklad, hovory na
169.254.169.254na AWS alebometadata.google.internalna GCP sa často objavujú u infikovaných hostiteľov. - V dôsledku toho, Akékoľvek nájdené poverenia sa stanú okamžite použiteľnými na publikovanie nových npm balíčkov alebo na spúšťanie pracovných postupov GitHub.
Exfiltrácia
- Červ vytvorí nové úložisko GitHub s názvom Shai Hulud a zapíše súbor s dvojitým kódovaním base64
data.jsons podrobnosťami o platforme, výpismi prostredia a tajnými údajmi. Ako je vidieť, toto hlučné správanie sa dá ľahko odhaliť, ak obrancovia vedia, kde hľadať. - Taktiež vytvára pracovný postup GitHub Actions, často na vetve s názvom šaj-hulud, ktorý serializuje
${{ toJSON(secrets) }}a odošle dáta do statického webhooku. Okrem toho tento pracovný postup pretrváva, kým ho niekto aktívne neodstráni.
Propagácia
- S akýmkoľvek objaveným npm tokenom dátový súbor vymenuje všetky balíčky, ktoré vlastní napadnutý správca. Potom načíta každý tarball, vloží súbor bundle.js a položku po inštalácii a znova publikuje balíček.
- V dôsledku toho sa v priebehu niekoľkých hodín môžu objaviť desiatky infikovaných balíkov, čím sa znásobí polomer šírenia v celom ekosystéme.
Vytrvalosť a expozícia
Červ udržiava škodlivé pracovné postupy pri živote a v niekoľkých prípadoch premieňa súkromné repozitáre na verejné pomocou... „-migrácia“ prípona. Celkovo to zabezpečuje, že si útočník udrží oporu a maximalizuje únik údajov.
Poznámka k detekcii kľúča
Toto nezvyčajné použitie ${{ toJSON(secrets) }} v pracovných postupoch Akcie je zriedkavé. Preto, Tímy by to mali počas lovu považovať za indikátor vysokého signálu.
Prepracovaný vzor pracovného postupu, ktorý by ste mali hľadať
Toto nezvyčajné použitie na JSON (tajomstvá) v Akciách je v tomto incidente indikátorom vysokého signálu.
Pseudokód na propagáciu na vysokej úrovni (bezpečný, popisný)
Analytici pozorovali túto slučku vo veľkom meradle, čo vysvetľuje rýchly nárast z desiatok na stovky infikovaných balíkov.
Prečo je to červ v ekosystéme balíkov
Červ je malvér, ktorý sa šíri sám bez nutnosti manuálnych krokov operátora v každej fáze. V operačných systémoch červy zvyčajne zneužívajú zraniteľnosti siete na presun z jedného počítača na druhý. Naproti tomu Shai-Hulud funguje vo vnútri registra npm. Jeho efektívna cesta vedie cez opätovné použitie poverení.
Červ využíva ukradnuté npm publish tokeny. Hneď ako získa platné prihlasovacie údaje, znova publikuje infikované verzie v rámci iných balíkov vlastnených tým istým správcom. Následne tieto balíky nainštalujú nič netušiaci vývojári alebo bežci CI a cyklus sa opakuje.
Z tohto dôvodu bezpečnostní analytici vrátane Temné čítanie, klasifikovať Šaj-Hulúda ako samoreplikujúci sa červ a nie obyčajný trójsky kôň alebo incident s typosquattingom. Rozdiel je dôležitý: trójsky kôň zvyčajne napadne jedného hostiteľa, ale červ automaticky zosilňuje svoj dopad v celom ekosystéme.
Podvodník „Ako to funguje“
Aby sme zhrnuli životný cyklus Shai-Huluda, tu je jeden podvodcisrozdelenie jeho hlavných krokov:
- Balíček s po inštalácii je nainštalovaný a
bundle.jsvykonáva. - Úžitkové zaťaženie vypíše premenné prostredia, prehľadá súbory a históriu gitu, spustí TruffleHoga dotazuje cloudové služby metadát. V dôsledku toho sa akýkoľvek nájdený tajný údaj stáva okamžite užitočným.
- K exfiltrácii dochádza dvoma spôsobmi: po prvé, vytvorením verejného repozitára s názvom Shai Hulud s dvojitým kódovaním base64
data.jsonpo druhé, zavedením pracovného postupu akcií GitHub, ktorý uverejňuje príspevky${{ toJSON(secrets) }}k webhooku. - Pomocou akéhokoľvek ukradnutého npm tokenu červ znova publikuje všetky ostatné balíky vlastnené napadnutým správcom s rovnakým škodlivým hookom. Týmto spôsobom sa infekcia rýchlo množí.
- Nakoniec, útočník má viac tajomstiev, viac balíkov na šírenie a vytrvalosť v rámci účtov a repozitárov GitHub.
Ako sa prakticky vyhnúť tomuto typu útoku
Shai-Hulud je varovným signálom. Červ, ktorý kradne tokeny a znova sa publikuje, nepredstavuje budúce riziko, je aktívny v... ekosystém balíčkov npm dnes. Aby sa predišlo tomuto typu útok na dodávateľský reťazectímy potrebujú kontroly, ktoré sú programovateľné, automatizované a priamo vynucované CI/CD pipelineToto sú tie isté obrany, ktoré už môžete implementovať pomocou Xygeni.
Zastavte zlé artefakty pri bráne
Balíky a tarbally npm by ste mali skenovať skôr, ako sa dostanú k vývojárom alebo k úlohám CI. Nadmerná veľkosť bundle.js súbory, podozrivé po inštalácii hooksa značky zahmlievania slúžia ako včasné varovné signály. Okrem toho, presadzovanie období na upokojenie a pripnuté verzie v pipelines zabraňuje automatickému konzumovaniu čerstvých, neoverených vydaní.
stvrdnúť CI/CD V predvolenom nastavení
Guardrails in CI/CD sú nevyhnutné. Odmietajú zlúčenia alebo inštalácie, ktoré zavádzajú nové skripty alebo binárne súbory. Zároveň blokujú pracovné postupy, ktoré serializujú tajné údaje alebo sa pokúšajú o externé príspevky. Tímy by mali tiež vyžadovať inštalácie iba s uzamykateľnými súbormi (npm ci) vo všetkých pipelinetakže sady závislostí zostávajú reprodukovateľné a bezpečné.
Znížte polomer výbuchu žetónov
Tajomstvá sa nesmú stať jedinými bodmi zlyhania. Neustále skenujte kód, konfigurácie a pipeline výstup pre odhalené prihlasovacie údajeTokeny by mali mať úzky rozsah, krátku životnosť a mali by sa automaticky rotovať pri detekcii vystavenia. Spravidla by sa každý token použitý na hostiteľovi, ktorý vykonal podozrivú poinštaláciu, mal považovať za kompromitovaný.
Včasné zistenie správania červov
Detekcia anomálie je kľúčové. Napríklad náhle nárasty udalostí publikovania npm, nové pracovné postupy, ktoré sa objavia bezdôvodne, alebo nové verejné repozitáre naplnené zvláštnymi kódovanými súbormi môžu signalizovať aktivitu červov. Preto by tímy mali rýchlo spustiť upozornenia a izolovať všetkých správcov alebo bežcov, ktorí vykazujú tieto varovné signály.
Rýchla oprava bez narušenia zostavy
Rýchlosť a bezpečnosť musia ísť ruka v ruke. Automatizované pull requests môže nahradiť kompromitované npm balíky overenými verziami. Okrem toho dosiahnuteľnosť a využiteľnosť Analýza zabezpečuje, že aktualizácie zostanú minimálne a stabilné. Nakoniec, po potvrdení expozície, znovu vytvorte postihnuté bežce CI z čistých obrazov, čím zabránite ďalšiemu šíreniu útoku.
Indikátory kompromisu (IoC)
Pri analýze Shai-Huluda by si tímy mali všímať oboje statické IoC v súboroch a behaviorálne IoC in pipelineTieto signály spolu pomáhajú včas odhaliť infekcie a reagovať skôr, ako sa červ ďalej rozšíri.
Statické IoC
Nasledujúce zhody SHA-256 digestov boli pozorované bundle.js vzorky:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
Okrem toho si všímajte tieto opakujúce sa vzorce:
- A
bundle.jsv koreňovom adresári balíka. "postinstall": "node bundle.js"vo vnútripackage.json.- Pomenované repozitáre Shai Hulud.
- Pracovné postupy GitHubu obsahujúce
${{ toJSON(secrets) }}.
Behaviorálne IoC
Okrem podpisov súborov sa aktivita červov prejavuje aj správaním. Napríklad:
- Náhle výbuchy udalostí publikovania npm od jedného správcu.
- Nové pracovné postupy, ktoré prenášajú dáta do externých koncových bodov.
- Odchádzajúce požiadavky POST spustené z bežcov CI.
- Nedávno vytvorené verejné repozitáre s kódovanými blobmi.
Rýchle lovy
Záver: Poučenie od Šaj-Hulúda
Útok na dodávateľský reťazec Shai-Hulud v npm balíkoch ukazuje, aký krehký sa stal dnešný dodávateľský reťazec softvéru. Tento červ urobil viac než len pridanie škodlivého kódu. Ukradol tokeny, odoslal dáta a potom sa automaticky znova publikoval. Z tohto dôvodu sa útok rozšíril v priebehu hodín namiesto týždňov.
Pre vývojárov a DevOps tímy sú ponaučenia jasné:
- Každá inštalácia spúšťa kód. Dokonca aj bežný npm balík môže skrývať poinštalačného červa.
- Každý token má vysokú hodnotu. Po odcudzení sa môže použiť na ďalšie šírenie škodlivého softvéru.
- každý pipeline potrebuje kontroly. Bez guardrails čo sa týka závislostí, pracovných postupov a tajných údajov, jeden kompromis môže rýchlo zasiahnuť produkčný systém.
Zastavenie útokov, ako je Shai-Hulud, si preto vyžaduje automatické a ľahko vynucovateľné kontroly. Tímy by mali pred inštaláciami skenovať balíčky npm, používať zostavenia lockfile, detekovať zvláštnu publikačnú aktivitu a udržiavať tokeny krátkodobé. Tieto kroky už nie sú voliteľné. Namiesto toho sú základom odolnosti v modernej... pipelines.
V spoločnosti Xygeni vnímame útok Shai-Hulud na dodávateľský reťazec ako varovanie pre celý ekosystém open source. Udržateľnou cestou vpred je zaviesť bezpečnosť dodávateľského reťazca priamo do vývojového procesu, v bode, kde sa kód, npm balíčky a pipelines pripojením.
Nižšie je uvedený kompletný zoznam balíkov a verzií npm, ktoré boli v Shai-Hulud nahlásené ako kompromitované. Použite ho na kontrolu súborov lockfile, registrov a CI. pipelines pre expozíciu.
Zoznam kompromitovaných balíkov
📦 Ukážka kompromitovaných npm balíkov
| Package Name | verzia | Dátum zverejnenia |
|---|---|---|
| zjednodušený engine pre pravidlá JSON | 0.2.1 | 2025-09-14T17:58:51.203Z |
| pilot lietadla | 0.8.8 | 2025-09-14T18:35:07.600Z |
| graf znalostí mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| veliteľ letectva | 0.3.1 | 2025-09-14T18:35:09.521Z |
| skoková brána | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tv-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/okno-spätného-volania | 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/validácia | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/jadro | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ Zobraziť kompletný zoznam kompromitovaných balíkov
| Package Name | verzia | Dátum zverejnenia |
|---|---|---|
| zjednodušený engine pre pravidlá JSON | 0.2.1 | 2025-09-14T17:58:51.203Z |
| pilot lietadla | 0.8.8 | 2025-09-14T18:35:07.600Z |
| graf znalostí mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| veliteľ letectva | 0.3.1 | 2025-09-14T18:35:09.521Z |
| skoková brána | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tv-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/okno-spätného-volania | 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/validácia | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/jadro | 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 |
| nahrávanie súborov ng2 | 7.0.3 | 2025-09-15T02:44:29.555Z |
| obsluha upozornení na kondenzátor | 0.0.2 | 2025-09-15T04:54:48.431Z |
| kondenzátor-plugin-vonage | 1.0.2 | 2025-09-15T04:54:48.501Z |
| capacitor-plugin-healthapp | 0.0.2 | 2025-09-15T04:54:48.704Z |
| povolenia pre kondenzátor pre Android | 0.0.4 | 2025-09-15T04:54:48.753Z |
| VoIP-callkit | 1.0.2 | 2025-09-15T04:54:49.223Z |
| kondenzátor-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-kontext | 2.0.21 | 2025-09-15T05:21:19.814Z |
| @art-ws/openapi | 0.1.9 | 2025-09-15T05:21:19.969Z |
| @art-ws/webová aplikácia | 1.0.3 | 2025-09-15T05:21:20.383Z |
| @art-ws/ssl-info | 1.0.9 | 2025-09-15T05:21:20.927Z |




