Shai hulud - pakiety npm - atak na łańcuch dostaw

Shai-Hulud: Wyjaśnienie robaka pakietów npm

TL; DR

14 września 2025 r. badacze zidentyfikowali Shai Hulud, samoreplikujący się robak ukryty w środku pakiety npm, zmieniając rutynową aktualizację zależności w pełnoskalową atak na łańcuch dostaw. Po raz pierwszy zauważono w @ctrl/tinycolor Pakiet autorstwa Daniela dos Santosa Pereiry, Shai-Hulud gromadzi sekrety, eksfiltruje je przez repozytoria i przepływy pracy GitHub, a następnie ponownie publikuje się w rejestrze, wykorzystując skradzione dane uwierzytelniające. W ciągu kilku dni liczba zainfekowanych pakietów wzrosła z kilkudziesięciu do setek, co potwierdza, że… Szajhulud nie jest po prostu kolejnym trojanem, lecz robakiem zaprojektowanym do automatycznego rozprzestrzeniania się w ekosystemie npm.

Wpływ: każdy programista lub uczestnik CI instalujący publiczne pakiety npm jest narażony na ryzyko.

Działania natychmiastowe: blokuj znane wersje, przełącz się na instalacje wyłącznie z użyciem plików blokady, wymień tokeny npm i GitHub, audytuj przepływy pracy i monitoruj wskaźniki zagrożenia (IoC).

Co się stało?

Atak na łańcuch dostaw Shai-Hulud w pakietach npm to jeden z najbardziej destrukcyjnych incydentów w ostatnich latach. W przeciwieństwie do izolowanych trojanów, ten robak łączy w sobie kradzież danych uwierzytelniających, automatyczna eksfiltracja i samoreplikacjaW rezultacie czas trwania infekcji skrócił się z kilku tygodni do zaledwie kilku godzin.

Dla zespołów DevOps wniosek jest jasny: jeśli każda instalacja może wykonywać kod, to każda aktualizacja zależności jest potencjalnym punktem naruszenia.

Możliwy początkowy wektor i docelowe dane uwierzytelniające

Wczesna analiza wskazuje, że atak prawdopodobnie rozpoczął się od skradzione dane uwierzytelniająceNa przykład kampanie phishingowe podszywające się pod npm login lub monity MFA mogły przechwycić tokeny programistów. Gdy atakujący zdobyli ten pierwszy punkt zaczepienia, robak rozprzestrzenił się, osadzając się w pakietach npm i kradnąc kolejne sekrety z:

  • pliki konfiguracyjne npm lubić .npmrc, często zawierające tokeny publikacji.
  • Zmienne środowiskowe i konfiguracje z GitHub PAT i CI/CD tajniki.
  • Punkty końcowe metadanych w chmurze (AWS, GCP, Azure) dają krótkotrwałe dowody na możliwość ruchu bocznego.

W związku z tym kradzież danych uwierzytelniających stała się punktem wyjścia. Dzięki prawidłowym tokenom npm i sekretom GitHub, Shai-Hulud mógł samoreplikować się w wielu pakietach i repozytoriach bez dodatkowego wysiłku ze strony człowieka.

Wpływ ataku na łańcuch dostaw Shai-Hulud na kadrę kierowniczą

Shai-Hulud jest nadal aktywny. Ten robak przyspiesza czas ataku. To, co kiedyś zajmowało tygodnie w przypadku trojana, teraz dzieje się w ciągu kilku godzin. W rezultacie, rozprzestrzenianie się jest szybsze i trudniejsze do powstrzymania. Postępuje poprzez:

  • Kradzież tokenów npm publish i sekretów GitHub.
  • Ponowne publikowanie w innych pakietach npm.
  • Dodawanie złośliwych przepływów pracy GitHub Actions w celu zapewnienia trwałości.

Kogo dotyczy:

Każdy zespół instalujący publiczne pakiety npm jest narażony na atak. Co więcej, programiści z buforowanymi tokenami npm lub GitHub są narażeni na wysokie ryzyko. Narażeni są również programiści CI, którzy używają sekretów o szerokim zakresie.

Ryzyko biznesowe

Wpływ na biznes rośnie w szybkim tempie. Skradzione tokeny mogą prowadzić do przejęcia konta, przejęcia pakietów, a nawet nadużyć w chmurze. Ponadto, uporczywość w przepływach pracy w GitHubie utrudnia ich czyszczenie. DlategoZespoły muszą traktować Shai-Hulud jako incydent trwający, a nie zamknięty.

Jak działa atak na łańcuch dostaw Shai-Hulud w pakietach npm

Cele i motyw atakującego

Kampania jest optymalizowana pod kątem trzech rzeczy:

  • Pierwszym celem jest kradzież danych uwierzytelniających na dużą skalę z laptopów programistów i narzędzi CI. Obejmuje to tokeny publikacji npm, tokeny GitHub i dane uwierzytelniające w chmurze. W rzeczywistości liczne analizy potwierdzają systematyczne gromadzenie sekretów, takie jak uruchamianie TruffleHog i wyszukiwanie w punktach końcowych metadanych w chmurze.
  • Drugim celem jest rozprzestrzeniać się automatycznie poprzez nadużywanie praw wydawniczych zainfekowanych administratorów. W rezultacie jeden punkt zaczepienia szybko rozszerza się na wiele innych, ponieważ nowe zainfekowane wersje innych pakietów pojawiają się bez dodatkowego wysiłku ludzkiego.
  • Trzecim celem jest przetrwać i niezawodnie się wydostać poprzez infrastrukturę GitHub. Atakujący tworzą publiczne repozytorium o nazwie „Shai-Hulud” z podwójnym base64 dane.jsoni dodatkowo wdrażają przepływ pracy, który serializuje ${{ toJSON(sekrety) }} i przesyła go do statycznego webhooka.

Prawdopodobne korzyści obejmują długotrwały dostęp do rejestrów i kodu źródłowego, szybkie przenoszenie danych na konta w chmurze oraz możliwość dalszego uzbrojenia łańcucha dostaw. Publiczne raporty pokazują, że prywatne repozytoria stały się publiczne, a "-emigracja" sufiks, który zwiększa ekspozycję danych i dynamikę

Wewnątrz ładunku Shai-Hulud: pakiet.js w pakietach npm

Shai-Hulud jest statkiem duży, dołączony do Webpacka i mocno zminimalizowany Plik JavaScript (pakiet.js, około 3–3.7 MB) który wykonuje z po instalacji zaczepić pakiet.json. W związku z tym, Każda instalacja automatycznie uruchamia ładunek. Ten projekt ukrywa identyfikatory, kompresuje przepływ sterowania i umieszcza całą logikę w jednym artefakcie, który jest wykonywany podczas instalacji. Analitycy konsekwentnie potwierdzają pakowanie Webpacka, nietypowy rozmiar pliku i wykonywanie w czasie instalacji.

Cechy zaciemniania i antyanalizy, które zobaczysz w próbkach:

  • Zminimalizowany graf modułów z numerycznymi identyfikatorami modułów, skąpymi komentarzami i spłaszczonym przepływem sterowania. Co więcej, taka struktura sprawia, że ​​ręczny przegląd jest niezwykle trudny.
  • Ukrywanie ciągu poprzez warstwy base64 i pomocników konstrukcyjnych. Na przykład, Powtarzające się kodowanie i dekodowanie base64 zwykle pojawia się w trakcie procedur eksfiltracji.
  • Dynamiczna wysyłka przez evalwzorce w stylu i generowane ciała funkcji, co pozwala na zmianę zachowania kodu w czasie wykonywania.
  • Filtrowanie systemu operacyjnego preferować uruchamianie systemów Linux i macOS, szczególnie na komputerach CI i laptopach programistów.

Z funkcjonalnego punktu widzenia pakiet jest modułowy. W artykułach opisano moduły do ​​wykrywania systemu operacyjnego, skanowania systemu plików i sekretów Git, dostępu do pakietu SDK w chmurze, operacji API GitHub oraz mechanizmu propagacji, który edytuje inne pakiety należące do administratora. Co więcej, zarówno StepSecurity, jak i ReversingLabs podkreślają funkcję, która automatycznie aktualizuje pakiety ze złośliwym hakiem.

Wykonywanie w czasie instalacji w Shai-Hulud: w jaki sposób pakiety npm wyzwalają robaka

Atak zaczyna się, gdy po instalacji uruchamia węzeł pakiet.js. W tym momencie skrypt inicjuje się i rozpakowuje stan roboczy w pamięci, przygotowując grunt pod pełne działanie robaka.

Odkrywanie i zbieranie

  • Ładunek zrzuca plik process.env i skanuje pliki lokalne w poszukiwaniu sekretów o wysokiej entropii oraz prefiksów tokenów. Dodatkowo rozszerza zasięg, uruchamiając TruffleHog.
  • Wysyła zapytania do punktów końcowych metadanych w chmurze w celu zebrania krótkotrwałych danych uwierzytelniających. Na przykład, dzwoni do 169.254.169.254 na AWS lub metadata.google.internal na GCP często pojawiają się u zakażonych gospodarzy.
  • W związku z tym, wszelkie znalezione dane uwierzytelniające stają się natychmiast gotowe do publikowania nowych pakietów npm lub przesyłania przepływów pracy GitHub.

Exfiltracja

  • Robak tworzy nowe repozytorium GitHub o nazwie Shai Hulud i zapisuje kodowanie w systemie podwójnym base64 data.json ze szczegółami platformy, zrzutami środowiska i sekretami. Jak widać, to hałaśliwe zachowanie jest łatwe do wykrycia, jeśli obrońcy wiedzą, gdzie szukać.
  • Umieszcza również przepływ pracy GitHub Actions, często na gałęzi o nazwie szaj-hulud, który serializuje ${{ toJSON(secrets) }} i przesyła dane do statycznego webhooka. Co więcej, ten przepływ pracy będzie trwał, dopóki ktoś go aktywnie nie usunie.

Propagacja

  • Po odkryciu każdego tokena npm, ładunek enumeruje wszystkie pakiety należące do zainfekowanego administratora. Następnie pobiera każdy plik tarball, wstrzykuje plik bundle.js i wpis postinstall, a następnie ponownie publikuje pakiet.
  • W rezultacie w ciągu kilku godzin mogą pojawić się dziesiątki zainfekowanych pakietów, co znacznie zwiększa promień rażenia w całym ekosystemie.

Wytrwałość i ekspozycja

  • Robak utrzymuje przy życiu złośliwe przepływy pracy i w kilku przypadkach zmienia prywatne repozytoria na publiczne za pomocą "-emigracja" Sufiks. W sumie zapewnia to atakującemu utrzymanie pozycji i maksymalizuje wyciek danych.

Notatka o wykryciu klucza
To nietypowe zastosowanie ${{ toJSON(secrets) }} w przepływach pracy Akcji jest rzadkością. Dlatego Zespoły powinny traktować to jako sygnał o wysokim poziomie podczas polowań.

Zdezynfekowany wzorzec przepływu pracy, którego powinieneś szukać

To nietypowe zastosowanie do JSON(sekrety) w Działaniach jest to wskaźnik wysokiego sygnału w tym incydencie.

Pseudokod propagacji wysokiego poziomu (bezpieczny, opisowy)

Analitycy zaobserwowali tę pętlę na dużą skalę, co wyjaśnia szybki wzrost liczby zainfekowanych pakietów z kilkudziesięciu do setek.

Dlaczego jest to robak w ekosystemie pakietów

Robak to złośliwe oprogramowanie, które rozprzestrzenia się samoistnie, bez konieczności ręcznego wykonywania czynności przez operatora na każdym etapie. W systemach operacyjnych robaki zazwyczaj wykorzystują luki w zabezpieczeniach sieci, aby przenosić się z jednej maszyny na drugą. Natomiast Shai-Hulud działa wewnątrz rejestru npm. Jego efektywna ścieżka przebiega przez… ponowne użycie poświadczeń.

Robak wykorzystuje skradzione tokeny npm publish. Gdy tylko uzyska prawidłowe dane uwierzytelniające, ponownie publikuje zainfekowane wersje w ramach innych pakietów należących do tego samego administratora. Następnie pakiety te są instalowane przez niczego niepodejrzewających programistów lub osoby odpowiedzialne za ciągłą integrację (CI), a cykl się powtarza.

Z tego powodu analitycy bezpieczeństwa, w tym Mroczne czytanie, klasyfikuje Shai-Hulud jako samoreplikujący się robak a nie zwykły trojan czy incydent typosquattingu. Różnica jest istotna: trojan zazwyczaj atakuje jednego hosta, ale robak automatycznie wzmacnia swój wpływ w całym ekosystemie.

„Jak to działa” – ściągawka

Podsumowując cykl życia Shai-Huluda, oto oszustwocisPodział głównych kroków:

  • Pakiet z po instalacji jest zainstalowany i bundle.js wykonuje.
  • Ładunek zrzuca zmienne środowiskowe, skanuje pliki i historię git, uruchamia się TruffleHogi zapytania do usług metadanych w chmurze. W rezultacie każdy znaleziony sekret staje się natychmiast przydatny.
  • Eksfiltracja odbywa się na dwa sposoby: po pierwsze, poprzez utworzenie publicznego repozytorium o nazwie Shai Hulud z podwójnym kodowaniem base64 data.json; po drugie, poprzez wdrożenie przepływu pracy GitHub Actions, który publikuje ${{ toJSON(secrets) }} do webhooka.
  • Wykorzystując skradziony token npm, robak ponownie publikuje wszystkie pozostałe pakiety należące do zainfekowanego administratora, używając tego samego złośliwego haka. W ten sposób infekcja szybko się rozmnaża.
  • Wreszcie atakujący ma więcej sekretów, więcej pakietów do rozpowszechnienia i uporczywość wewnątrz kont i repozytoriów GitHub.

Jak praktycznie uniknąć tego typu ataków

Shai-Hulud to sygnał ostrzegawczy. Robak, który kradnie tokeny i ponownie się publikuje, nie stanowi zagrożenia na przyszłość, jest aktywny w ekosystem pakietów npm dzisiaj. Aby zapobiec tego typu atak na łańcuch dostawZespoły potrzebują kontroli, które są programowalne, zautomatyzowane i egzekwowane bezpośrednio w CI/CD pipelines. Są to te same środki obrony, które możesz już wdrożyć Xygeni.

Zatrzymaj złe artefakty przy bramie

Powinieneś przeskanować pakiety npm i tarballe, zanim trafią do programistów lub do zadań CI. bundle.js pliki, podejrzane postinstalacje hooks, a znaczniki zaciemniania służą jako wczesne sygnały ostrzegawcze. Co więcej, egzekwowanie okresów karencji i przypinanie wersji w pipelines zapobiega automatycznemu pobieraniu nowych, niesprawdzonych wersji.

Stwardnieć CI/CD domyślnie

Guardrails in CI/CD Są niezbędne. Odrzucają scalanie lub instalacje wprowadzające nowe skrypty lub pliki binarne. Jednocześnie blokują przepływy pracy, które serializują sekrety lub próbują wysyłać zewnętrzne komunikaty. Zespoły powinny również wymagać instalacji wyłącznie w plikach blokady (npm ci) we wszystkich pipelineDzięki temu zestawy zależności pozostają powtarzalne i bezpieczne.

Zmniejsz promień wybuchu żetonu

Sekrety nie mogą stać się pojedynczymi punktami awarii. Nieustannie skanuj kod, konfiguracje i pipeline wyjście dla ujawnione dane uwierzytelniająceTokeny powinny mieć wąski zakres, krótki czas życia i być automatycznie rotowane po wykryciu wycieku. Zasadniczo każdy token używany na hoście, który wykonał podejrzaną operację po instalacji, należy traktować jako zagrożony.

Wczesne obserwowanie zachowania robaka

Wykrywanie anomalii Kluczowe jest to, że nagłe skoki liczby zdarzeń publikowania w npm, nowe przepływy pracy pojawiające się bez powodu lub nowe publiczne repozytoria wypełnione dziwnie zakodowanymi plikami mogą sygnalizować aktywność robaka. Dlatego zespoły powinny szybko zgłaszać alerty i izolować osoby utrzymujące lub uruchamiające oprogramowanie, które wykazują takie sygnały ostrzegawcze.

Szybka naprawa bez przerywania kompilacji

Prędkość i bezpieczeństwo muszą iść w parze. Automatyzacja pull requests może zastąpić zagrożone pakiety npm sprawdzonymi wersjami. Ponadto, osiągalność oraz podatność na wykorzystanie Analiza zapewnia minimalną liczbę aktualizacji i stabilność. Na koniec, po potwierdzeniu narażenia, odbudowujemy zainfekowane moduły CI z czystych obrazów, zapobiegając dalszemu rozprzestrzenianiu się ataku.

Wskaźniki kompromisu (IoC)

Analizując Shai-Hulud, zespoły powinny zwracać uwagę na oba statyczne wskaźniki IoC w plikach i behawioralne wskaźniki IoC in pipelines. Łącznie sygnały te pomagają wykryć infekcję na wczesnym etapie i zareagować, zanim robak rozprzestrzeni się dalej.

Statyczne wskaźniki IoC

Następujące skrócone wyniki SHA-256 są zgodne z zaobserwowanymi bundle.js próbki:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

Dodatkowo zwróć uwagę na następujące powtarzające się wzorce:

  • A bundle.js w katalogu głównym pakietu.
  • "postinstall": "node bundle.js" wewnątrz package.json.
  • Repozytoria o nazwie Shai Hulud.
  • Przepływy pracy GitHub zawierające ${{ toJSON(secrets) }}.

Wskaźniki behawioralne

Oprócz sygnatur plików, aktywność robaka ujawnia się poprzez zachowanie. Na przykład:

  • Nagłe serie publikowanych zdarzeń npm od jednego z konserwatorów.
  • Nowe przepływy pracy, które przesyłają dane do zewnętrznych punktów końcowych.
  • Żądania POST wychodzące wyzwalane przez programy uruchamiające CI.
  • Ostatnio utworzone publiczne repozytoria z zakodowanymi blobami.

Szybkie polowania

Wnioski: Lekcje z Shai-Hulud

Atak na łańcuch dostaw Shai-Hulud W npm packages widać, jak kruchy stał się dzisiejszy łańcuch dostaw oprogramowania. Ten robak nie tylko dodawał złośliwy kod. Kradł tokeny, wysyłał dane, a następnie automatycznie się ponownie publikował. Dzięki temu atak rozprzestrzenił się w ciągu kilku godzin, a nie tygodni.

Dla programistów i zespołów DevOps wnioski są jasne:

  • Każda instalacja uruchamia kod. Nawet zwykły pakiet npm może ukrywać robaka postinstall.
  • Każdy token ma wysoką wartość. Po kradzieży może on zostać wykorzystany do dalszego rozprzestrzeniania złośliwego oprogramowania.
  • Każdy pipeline wymaga sprawdzenia. Bez guardrails w przypadku zależności, przepływów pracy i sekretów, jeden kompromis może szybko wpłynąć na produkcję.

Dlatego powstrzymanie ataków takich jak Shai-Hulud wymaga automatycznych i łatwych do egzekwowania mechanizmów kontroli. Zespoły powinny skanować pakiety npm przed instalacjami, korzystać z kompilacji z plikami blokady, wykrywać podejrzaną aktywność publikowania i dbać o krótki czas życia tokenów. Te kroki nie są już opcjonalne. Stanowią one fundament odporności w nowoczesnych systemach. pipelines.

W Xygeni postrzegamy atak na łańcuch dostaw Shai-Hulud jako ostrzeżenie dla całego ekosystemu open source. Zrównoważonym rozwiązaniem jest włączenie bezpieczeństwa łańcucha dostaw bezpośrednio do procesu rozwoju, w momencie, gdy kod, pakiety npm i… pipelines połączyć.

Poniżej znajduje się pełna lista pakietów npm i ich wersji zgłoszonych jako zagrożone w Shai-Hulud. Użyj jej do sprawdzenia plików blokady, rejestrów i CI. pipelines dla ekspozycji.

Lista zagrożonych pakietów

📦 Podgląd zagrożonych pakietów npm

Nazwa Pakietu Wersja Data publikacji
Silnik reguł json-uproszczony0.2.12025-09-14T17:58:51.203Z
pilot lotniczy0.8.82025-09-14T18:35:07.600Z
wykres wiedzy mcp1.2.12025-09-14T18:35:09.494Z
szef lotnictwa0.3.12025-09-14T18:35:09.521Z
brama skokowa0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/okno-wywołania zwrotnego1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/walidacja0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ Zobacz pełną listę zagrożonych pakietów
Nazwa Pakietu Wersja Data publikacji
Silnik reguł json-uproszczony0.2.12025-09-14T17:58:51.203Z
pilot lotniczy0.8.82025-09-14T18:35:07.600Z
wykres wiedzy mcp1.2.12025-09-14T18:35:09.494Z
szef lotnictwa0.3.12025-09-14T18:35:09.521Z
brama skokowa0.0.22025-09-14T18:35:09.651Z
tvi-cli0.1.52025-09-14T18:35:10.996Z
@thangved/okno-wywołania zwrotnego1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/walidacja0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/skalar0.1.72025-09-14T20:45:56.386Z
ng2-file-upload7.0.32025-09-15T02:44:29.555Z
program obsługi powiadomień kondensatora0.0.22025-09-15T04:54:48.431Z
wtyczka-kondensatora-vonage1.0.22025-09-15T04:54:48.501Z
wtyczka kondensatora-healthapp0.0.22025-09-15T04:54:48.704Z
kondensatorandroiduprawnienia0.0.42025-09-15T04:54:48.753Z
zestaw połączeń VoIP1.0.22025-09-15T04:54:49.223Z
wtyczka-kondensatora-ihealth1.1.82025-09-15T04:55:08.113Z
@art-ws/common2.0.222025-09-15T05:21:15.411Z
@art-ws/config-eslint2.0.42025-09-15T05:21:17.199Z
ngx-ws1.1.52025-09-15T05:21:17.514Z
@art-ws/slf2.0.152025-09-15T05:21:17.524Z
@art-ws/serwer-http2.0.212025-09-15T05:21:17.745Z
pm2-gelf-json1.0.42025-09-15T05:21:18.413Z
@art-ws/di2.0.282025-09-15T05:21:18.488Z
@art-ws/di-node2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-context2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/web-app1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz swoje oprogramowanie i dostarczanie

z pakietem produktów Xygeni