Pomoc zdalna
alerty bezpieczeństwa

Złośliwy kod w pakiecie eslint-config-prettier (CVE-2025-54313): sprawdź projekty

Cztery wersje popularnego pakietu npm eslint-config-prettier zawierały celowo wstawiony złośliwy kod uruchamiany przy instalacji na Windows. CISA potwierdza wykorzystanie. Sprawdź projekty i wykonawców, a przy trafieniu wymień klucze.

  • Paweł Niedźwiecki
Paweł Niedźwiecki
17 września 2026 9 min czytania
Programista piszący kod na laptopie, zbliżenie na ekran z kodem

Ten alert jest dla zarządu, CTO i CFO firm, które tworzą oprogramowanie w JavaScript lub zlecają je zewnętrznym wykonawcom (sklepy internetowe, systemy rezerwacji, aplikacje webowe). Werdykt: jeśli w projektach lub u wykonawcy mogły zostać zainstalowane skażone wersje pakietu eslint-config-prettier, sprawdź pliki blokady zależności dziś, a przy trafieniu wymień wszystkie hasła i klucze z zainfekowanych komputerów.

1. CO SIĘ STAŁO? Fakty w pigułce

Amerykańska agencja CISA 22 stycznia 2026 roku dopisała CVE-2025-54313 do katalogu KEV, czyli listy luk, o których ma dowody, że są wykorzystywane w prawdziwych atakach. To nie jest zwykły błąd programisty, tylko celowo wstawiony złośliwy kod. 18 lipca 2025 roku napastnik, który wyłudził phishingiem token opiekuna popularnego pakietu eslint-config-prettier, opublikował w repozytorium npm cztery skażone wersje. Ich instalacja na Windows uruchamiała plik install.js, który odpalał złośliwą bibliotekę node-gyp.dll.

Pakiet jest pobierany ponad 30 milionów razy tygodniowo (wg BleepingComputer). Ta sama akcja objęła kilka innych pakietów tego samego opiekuna. Termin działania wyznaczony przez CISA minął 12 lutego 2026 roku.

Element

Szczegóły

Identyfikator CVE

CVE-2025-54313

Data dodania do CISA KEV

2026-01-22

Termin naprawy wg CISA

2026-02-12 (21 dni od wpisu)

Produkt

Prettier eslint-config-prettier (pakiet npm, narzędzie programistyczne do formatowania kodu)

Wersje zagrożone

eslint-config-prettier 8.10.1, 9.1.1, 10.1.6, 10.1.7. Ta sama akcja: eslint-plugin-prettier 4.2.2 i 4.2.3, synckit 0.11.9, @pkgr/core 0.2.8, napi-postinstall 0.3.1, got-fetch 5.1.1 i 5.1.2, aplikacja Homarr od 1.29.0 do wersji przed 1.30.0. Złośliwy kod działał na systemach Windows, uruchamiany samą instalacją pakietu

Wersje bezpieczne

eslint-config-prettier 10.1.8 (najnowsza), 9.1.2, 8.10.2 lub wersje do 10.1.5 włącznie. Homarr 1.30.0 i nowsze

Typ podatności

Wszczepiony złośliwy kod (atak na łańcuch dostaw oprogramowania); CWE-506

Ocena CVSS

MITRE (zapis w NVD): 7.5 (CVSS 3.1, WYSOKA). Wektor: przez sieć, wysoka złożoność, bez uprawnień i udziału użytkownika, skutki poza pakietem, wysoki wpływ na integralność, niski na poufność

2. O CO CHODZI W PROSTYCH SŁOWACH?

Wyobraź sobie warsztat, który składa maszyny z części kupowanych u dziesiątek dostawców. Pewnego dnia ktoś podszywa się pod jednego z nich i dosyła „nową wersję” zwykłej śrubki. W pudełku, obok śrubek, jest ukryty podsłuch, który włącza się w chwili rozpakowania. Nikt w warsztacie nie popełnił błędu: rozpakowanie zamówionej części to rutyna, a nie decyzja.

Tak działał ten atak. Programy są dziś składane z setek gotowych „części”, czyli pakietów pobieranych z publicznych repozytoriów. Instalacja pakietu może uruchomić dołączony do niego skrypt. W skażonych wersjach ten skrypt uruchamiał złośliwy program. Ofiarą nie był użytkownik gotowej aplikacji, tylko komputer programisty lub serwer budujący oprogramowanie, a tam leżą klucze do repozytoriów, serwerów, chmury i baz danych klientów.

💡 Pakiet npm to gotowy moduł kodu JavaScript pobierany z publicznego repozytorium npm. Atak na łańcuch dostaw to atak na dostawcę komponentów, a nie bezpośrednio na ofiarę. Plik blokady zależności (package-lock.json, yarn.lock, pnpm-lock.yaml) zapisuje dokładne wersje pakietów użytych w projekcie. CI/CD to automatyczne budowanie i wdrażanie oprogramowania. KEV (Known Exploited Vulnerabilities) to katalog CISA z lukami potwierdzonymi jako wykorzystywane w atakach.

Scenariusz

Normalnie

Z podatnością

Programista instaluje zależności projektu

Pobiera pliki narzędzia do formatowania kodu

Uruchamia złośliwy program na Windows

Automatyczna aktualizacja zależności (np. Dependabot, Renovate)

Podbija wersję na najnowszą

Mogła wciągnąć skażoną wersję bez udziału człowieka

Klucze do chmury i serwerów na komputerze programisty

Używane do pracy

Dostępne dla napastnika

Kod w repozytorium GitHub

Zgodny z opublikowanym pakietem

Brak zmian w repozytorium, złośliwe wersje tylko w npm

Gotowa aplikacja u klienta

Bez narzędzi programistycznych

Zwykle nietknięta, chyba że skażony pakiet wbudowano w produkt (np. Homarr)

Stos kolorowych plastikowych klocków konstrukcyjnych w różnych kształtachźródło: pexels.com

3. JAK HAKERZY TO WYKORZYSTUJĄ?

Poniżej typowy przebieg ataku dla tej klasy zagrożenia, oparty na opisie tego incydentu. To scenariusz poglądowy, a nie odtworzenie konkretnego włamania do firmy. Napastnik nie atakuje firmy bezpośrednio: czeka, aż skażony pakiet sam trafi na komputery programistów przy zwykłej instalacji zależności.

Etap

Czas

Akcja hakerów

Wynik

1. Phishing opiekuna

T+0

Mail z fałszywej domeny npnjs.com (podszywającej się pod npmjs.com) wyłudza token opiekuna pakietów

Kontrola nad publikacją pakietów

2. Publikacja skażonych wersji

T+godziny

Wydanie nowych wersji z dodanym skryptem instalacyjnym, bez zmian w repozytorium GitHub

Pułapka w publicznym repozytorium

3. Instalacja u ofiar

T+minuty do godzin

Programiści i automatyczne systemy budowania pobierają „najnowszą” wersję

Złośliwy program uruchomiony na Windows

4. Przejęcie komputera

T+minuty od instalacji

Uruchomienie node-gyp.dll, dostęp do plików i poświadczeń

Napastnik na komputerze programisty

5. Wykorzystanie kluczy

T+dni do tygodni

Użycie kluczy do chmury, repozytoriów, serwerów

Dostęp do systemów firmy i jej klientów

6. Skutek dla firmy

T+tygodnie

Kopiowanie baz danych, podmiana kodu, dalsze ataki na klientów

Wyciek danych, kompromitacja produktu

Konkretne scenariusze zagrożenia

  • 🔴 Scenariusz 1: zewnętrzna pracownia rozbudowuje system rezerwacji przychodni; programista na Windows instaluje zależności 18 lipca 2025, a tygodnie później z konta chmurowego przychodni wychodzi kopia bazy pacjentów wykonana prawidłowym kluczem wykonawcy.
  • 🔴 Scenariusz 2: automatyczny system aktualizacji zależności podbija wersję eslint-config-prettier do skażonej, a serwer budujący na Windows zostaje zainfekowany i napastnik może podmienić budowane oprogramowanie.
  • 🔴 Scenariusz 3: firma używa aplikacji Homarr w wersji 1.29.x zainstalowanej jako gotowy produkt i nie wie, że zawiera skażony komponent.

4. DLACZEGO TO RYZYKO DLA TWOJEJ FIRMY?

Komputery programistów i serwery budujące oprogramowanie mają dostęp do wszystkiego: kodu, serwerów produkcyjnych, chmury i danych klientów. Formalna ocena 7.5 mierzy cechy samego zdarzenia, a nie wartość tego, co leży na zainfekowanej maszynie. Dodatkowa trudność: zdarzenie mogło nastąpić u wykonawcy, poza kontrolą firmy.

Obszar biznesu

Potencjalny wpływ

Czas do wystąpienia

Koszty szacunkowe

Operacyjny

Wymiana wszystkich kluczy i haseł, przebudowa środowisk programistycznych, wstrzymanie wdrożeń

Dni od wykrycia

20 tys. do 200 tys. PLN (prace zespołu, opóźnienia projektów)

Bezpieczeństwo danych

Kradzież kodu, poświadczeń i danych klientów z systemów, do których miał dostęp programista

Dni do tygodni

30 tys. do 300 tys. PLN (analiza powłamaniowa, audyt kodu)

Finansowy

Koszty zewnętrznych specjalistów, rachunki za nadużyte zasoby chmurowe

Tygodnie

50 tys. do 500 tys. PLN łącznie

Reputacyjny

Utrata zaufania klientów, jeśli skażony produkt lub wyciek dotknął ich danych

Miesiące

30 tys. do 400 tys. PLN (utracone kontrakty)

Prawny

Przy wycieku danych osobowych zgłoszenie do UODO w 72 godziny; możliwa kara RODO do 20 mln EUR lub 4% rocznego obrotu, zależnie od okoliczności; spory z wykonawcą o odpowiedzialność

72 godziny od wykrycia

20 tys. do 150 tys. PLN (prawnicy, obsługa zgłoszeń), bez ewentualnej kary

Tomasz Kaczmarek
Tomasz Kaczmarek

Mogę Ci jakoś pomóc?

Kwoty są orientacyjnymi widełkami dla małej i średniej firmy, nie danymi z tego incydentu.

Macierz ryzyka dla firmy tworzącej lub zlecającej oprogramowanie JavaScript na Windows Wpływ 5 | . . . . . 4 | . ■ . . . ← ŚREDNIE 3 | . . . . . 2 | . . . . . 1 | . . . . . +-------------------- 1 2 3 4 5 Prawdopodobieństwo

Interpretacja: wpływ jest wysoki, bo zainfekowana maszyna trzyma klucze do systemów firmy, ale prawdopodobieństwo jest niskie, bo skażone wersje były dostępne krótko w lipcu 2025 roku i zostały wycofane; ryzyko rośnie, jeśli skażona wersja nadal widnieje w plikach blokady lub w starych kopiach środowisk.

5. CO MUSISZ ZROBIĆ NATYCHMIAST?

Lp.

Priorytet

Działanie

Termin

Odpowiedzialny

1

🔴 NATYCHMIAST

Przeszukać pliki blokady zależności we wszystkich projektach i historii repozytoriów pod kątem skażonych wersji (lista w sekcji 1)

Dziś

Kierownik zespołu programistów

2

🔴 NATYCHMIAST

Poprosić zewnętrznych wykonawców o pisemne potwierdzenie takiego sprawdzenia

Dziś

CTO

3

🔴 NATYCHMIAST

Przy trafieniu: odłączyć zainfekowane komputery i serwery budujące, zabezpieczyć je do analizy

Dziś

Administrator IT

4

🟠 PILNIE

Przy trafieniu: wymienić wszystkie hasła, tokeny i klucze (chmura, repozytoria, npm, serwery), do których był dostęp z zainfekowanej maszyny

Do 2 dni

Zespół programistów / administrator

5

🟠 PILNIE

Zaktualizować eslint-config-prettier do 10.1.8 (lub 9.1.2, 8.10.2), usunąć katalog node_modules i pamięć podręczną npm, zainstalować zależności od nowa

Do 3 dni

Zespół programistów

6

🟠 PILNIE

Sprawdzić wersję aplikacji Homarr, jeśli jest używana, i zaktualizować do 1.30.0 lub nowszej

Do 3 dni

Administrator IT

7

🟡 WAŻNIE

Wprowadzić przypinanie dokładnych wersji pakietów i przegląd zmian zależności przed scaleniem

Do 30 dni

Kierownik zespołu programistów

8

🟡 WAŻNIE

Zapisać w umowach z wykonawcami: dostęp czasowy i imienny, osobne klucze dla testów i produkcji, dane testowe bez danych osobowych, lista użytych komponentów przy odbiorze

Do 60 dni

CTO / CFO

Jeśli aktualizacja nie jest dostępna

Czyste wersje pakietu zostały wydane jeszcze 18 lipca 2025 roku, a skażone oznaczono jako wycofane. Obejścia w klasycznym sensie nie ma: rozwiązaniem jest wymiana wersji, a przy infekcji także wymiana poświadczeń. Oceny efektywności to ocena ekspercka.

Czasowa miara ochronna

Efektywność

Łatwość wdrożenia

Instalacja zależności z opcją wyłączającą skrypty instalacyjne (np. npm ci --ignore-scripts)

Wysoka wobec tego typu ataku

Średnia: część pakietów wymaga skryptów

Przypięcie dokładnych wersji i instalacja wyłącznie z pliku blokady (npm ci)

Wysoka wobec nagłych skażonych wydań

Łatwa

Opóźnienie przyjmowania nowych wersji pakietów o kilka dni w narzędziach automatycznych

Średnia do wysokiej: skażone wersje zwykle są wykrywane w ciągu godzin lub dni

Łatwa

Skaner pakietów wykrywający podejrzane skrypty instalacyjne

Średnia do wysokiej

Średnia

Budowanie oprogramowania w odizolowanych środowiskach bez stałych kluczy produkcyjnych

Wysoka jako ograniczenie skutków

Średnia do trudnej

Przed i po działaniu

Stan

Przed działaniem

Po działaniu

Wersje pakietów w projektach

Nieznane, możliwe skażone

Sprawdzone, czyste wersje w plikach blokady

Klucze i hasła programistów

Mogły wyciec

Wymienione tam, gdzie było trafienie

Wykonawcy zewnętrzni

Brak wiedzy o ich środowiskach

Pisemne potwierdzenie sprawdzenia

Dostęp wykonawców do produkcji

Stały, szeroki

Czasowy, imienny, osobne klucze

Aktualizacje zależności

Automatycznie „najnowsze”

Przypięte wersje, przegląd zmian

6. KONTEKST I SKALA ZAGROŻENIA

Aspekt

Informacja

Czy jest wykorzystywana?

TAK (potwierdzone przez CISA). Skażone wersje były opublikowane i pobierane w lipcu 2025 roku

Grupy przestępcze

Brak publicznych informacji o konkretnej grupie; atak poprzedziła kampania phishingowa z fałszywą domeną npnjs.com wymierzona w opiekunów pakietów npm

Kampanie ransomware

Brak potwierdzenia (CISA: Unknown)

Ocena CVSS

7.5 WYSOKA wg MITRE (CVSS 3.1)

PoC dostępny publicznie?

Nie dotyczy w zwykłym sensie: złośliwy kod był w samych pakietach; NVD oznacza analizy StepSecurity i BleepingComputer jako opisy wykorzystania

Liczba atakowanych firm

Brak publicznych danych o liczbie ofiar; sam pakiet eslint-config-prettier ma ponad 30 mln pobrań tygodniowo

Prognoza EPSS

Ok. 4,1% szansy próby wykorzystania w 30 dni, wyżej niż 90% śledzonych podatności (wg analizy źródłowej)

Reakcja dostawców

Red Hat oświadczył, że żaden jego produkt nie zawiera skażonych wersji

Sygnały zagrożenia dla CVE-2025-54313 CVSS 3.1 (MITRE) 7.5/10 ███████████████░░░░░ WYSOKA EPSS (próba w 30 dni) ~4,1% █░░░░░░░░░░░░░░░░░░░ percentyl 90+ CISA KEV TAK ████████████████████ wykorzystanie potwierdzone Złośliwy kod celowy TAK ████████████████████ atak na łańcuch dostaw Ransomware (CISA) Unknown ░░░░░░░░░░░░░░░░░░░░ brak potwierdzenia

Linia czasu incydentu

2025-07-18 Publikacja skażonych wersji w npm: 9.1.1, 8.10.1, 10.1.6 i 10.1.7 (ok. 15:51 do 16:13 UTC) 2025-07-18 Zgłoszenie społeczności w repozytorium GitHub; czyste wydania 10.1.8 (18:40 UTC), 8.10.2 i 9.1.2 (ok. 19:18 UTC) 2025-07-19 Publikacja CVE-2025-54313 w NVD; opisy phishingu opiekuna 2026-01-22 CISA dodaje wpis do katalogu KEV 2026-02-12 Termin działania wg CISA 2026-06-17 Ostatnia aktualizacja wpisu w NVD ... pół roku od publikacji do wpisu w KEV 2026-09-17: TUTAJ JESTEŚMY

7. BEZPOŚREDNI LINK DO DZIAŁANIA: checklista dla CTO/CFO

Historia wersji pakietu w npm: npmjs.com/package/eslint-config-prettier . Zgłoszenie i komunikat opiekuna: github.com/prettier/eslint-config-prettier/issues/339 . Wpis w NVD: nvd.nist.gov/vuln/detail/CVE-2025-54313 .

Lp.

Zadanie

Kto

Deadline

1

Ustalić, które projekty firmy i wykonawców używają JavaScript i npm

CTO

DZISIAJ

2

Zlecić przeszukanie plików blokady pod kątem skażonych wersji

CTO

DZISIAJ

3

Wysłać do wykonawców prośbę o pisemne potwierdzenie sprawdzenia

CTO

DZISIAJ

4

Przy trafieniu: zatwierdzić wymianę wszystkich kluczy i haseł

CTO

DO JUTRA

5

Sprawdzić, czy firma używa aplikacji Homarr i w jakiej wersji

CTO

DO JUTRA

6

Zarezerwować budżet na ewentualną analizę powłamaniową i audyt kodu

CFO

DO JUTRA

7

Przejrzeć umowy z wykonawcami pod kątem odpowiedzialności za bezpieczeństwo środowisk i komponentów

CFO

DO JUTRA

Tomasz Kaczmarek
Tomasz Kaczmarek

Mogę Ci jakoś pomóc?

8. PYTANIA DO TWOJEGO ZESPOŁU IT

#

Pytanie

Odpowiedź

Priorytet

1

Czy którykolwiek plik blokady w naszych projektach zawiera eslint-config-prettier 8.10.1, 9.1.1, 10.1.6 lub 10.1.7 albo inne skażone pakiety z listy?

TAK / NIE

🔴

2

Czy ktoś instalował zależności na Windows w dniach 18 i 19 lipca 2025?

TAK / NIE

🔴

3

Czy nasi wykonawcy potwierdzili na piśmie, że nie mieli skażonych wersji?

TAK / NIE, data: [data]

🔴

4

Jakie klucze i hasła są przechowywane na komputerach programistów i serwerach budujących?

[lista]

🟠

5

Czy automatyczne narzędzia mogą same podbijać wersje pakietów bez przeglądu?

TAK / NIE

🟠

6

Czy używamy aplikacji Homarr i w jakiej wersji?

TAK / NIE, [wersja]

🟠

7

Czy wykonawcy mają stały dostęp do systemów produkcyjnych i prawdziwych danych klientów?

TAK / NIE

🟡

Pytania diagnostyczne dla managera

  • ✓ Czy wiem, z jakich komponentów składa się oprogramowanie, za które płacę?
  • ✓ Czy przy odbiorze prac dostajemy od wykonawcy listę użytych komponentów?
  • ✓ Czy dostęp wykonawców do naszych systemów wygasa po zakończeniu prac?
  • ✓ Czy mamy procedurę zgłoszenia naruszenia danych do UODO w 72 godziny?
  • ✓ Czy reagujemy na publiczne informacje o zagrożeniach, czy czekamy na oficjalne ostrzeżenia?

Podsumowanie

CVE-2025-54313 to celowo wstawiony złośliwy kod w czterech wersjach pakietu eslint-config-prettier i kilku pokrewnych pakietach, uruchamiany samą instalacją na Windows. Zagrożone są komputery programistów i serwery budujące, a przez nie klucze do systemów firmy, więc zadanie na dziś to sprawdzić pliki blokady u siebie i u wykonawców, a przy trafieniu wymienić wszystkie poświadczenia.

Czytaj dalej

Powiązane artykuły

Zestaw zmienia się codziennie, więc przy kolejnej wizycie zobaczysz inny wycinek bloga.

Masz to samo u siebie?

Możemy się tym zająć

Krótka rozmowa wystarczy, żeby ocenić zakres prac i podać widełki kosztu. Bez zobowiązań.