Socket.dev 23 kwietnia 2026 roku wykrył zainfekowaną wersję oficjalnego pakietu @bitwarden/cli w rejestrze npm. Wersja 2026.4.0 zawierała plik bw1.js, który w ciągu 19 godzin wykradał z zainfekowanych maszyn klucze GitHub, AWS, Azure, GCP, konfigurację npm, klucze SSH, a także pliki konfiguracyjne Claude i MCP. Dlatego to nie tylko kolejny atak supply chain, ale też przypomnienie, że atakujący coraz lepiej rozumieją jak wygląda codzienny workflow polskiego dewelopera. Bitwarden obsługuje ponad 10 milionów użytkowników i 50 tysięcy firm. Pobrań zainfekowanej wersji zanim została usunięta? Tylko 334, jednak każde z nich to potencjalnie wyczyszczone konto w chmurze albo przejęty GitHub.
Co dokładnie się stało z pakietem Bitwarden CLI
Atakujący przejął GitHub Action używane w pipeline CI/CD Bitwarden i wstrzyknął złośliwy skrypt bw1.js bezpośrednio do paczki. Wersja 2026.4.0 trafiła do rejestru npm w standardowy sposób. Żadnych alertów, żadnych zmian w dokumentacji, żadnych zgłoszeń od użytkowników. Natomiast sama zawartość pakietu została wzbogacona o moduł, który podczas instalacji przeszukiwał system w poszukiwaniu wszystkich liczących się poświadczeń.
Lista tego, co malware zabierał, jest szczegółowa i bardzo dobrze dobrana. Pierwszy cel to GitHub tokens, pozyskiwane przez memory scraping procesu GitHub Actions Runner.Worker. Drugi to dane uwierzytelniające AWS z katalogu ~/.aws/ oraz zmiennych środowiskowych. Następnie tokeny Azure pobierane przez azd, a ponadto poświadczenia GCP z gcloud config. Czwarty cel to plik .npmrc z tokenami publikacji pakietów, co otwiera drogę do kolejnych ataków supply chain. Na koniec klucze SSH oraz pliki konfiguracyjne Claude i MCP, dlatego atakujący najprawdopodobniej szukają też kluczy API Anthropic w katalogach ~/.claude/.
Wszystkie pozyskane dane trafiały na endpoint audit.checkmarx.cx/v1/telemetry. Nazwa domeny sugeruje powiązanie z kampanią określaną jako Checkmarx, prowadzoną przez grupę znaną jako TeamPCP. Konkretna atrybucja akurat tej wersji bw1.js nadal pozostaje niepewna. Co ciekawe, w kodzie znaleziono ideologiczne odwołania do powieści science fiction Dune, jednak w praktyce nie zmienia to natury ataku.
19 godzin w rejestrze. 334 pobrań. 10 milionów użytkowników Bitwarden. Atakujący nie musiał złamać jednej osoby, tylko poczekać aż 334 pipeline’y CI/CD same pobiorą zainfekowaną wersję i wyślą wszystkie klucze na serwer.
Dlaczego malware kradnie pliki konfiguracyjne Claude i MCP
Ten element jest nowy w porównaniu do poprzednich ataków na npm typu axios czy wycieku Vercel z Context.ai. Atakujący dodali do listy celów katalog ~/.claude/, w którym developerzy używający Claude Code trzymają zwykle klucze API Anthropic, konfigurację serwerów MCP oraz pliki skilli. Pokazuje to, że zespoły atakujące aktywnie śledzą trendy w ekosystemie developerskim.
Polski deweloper używający Claude Code, który pobrał zainfekowanego Bitwardena, oddał napastnikowi więcej niż tylko klucze do GitHuba. W efekcie oddał też bramę do swojej produktywnej platformy AI. Atakujący może teraz wysyłać dowolną liczbę zapytań, potencjalnie wyciągać kontekst poprzednich rozmów i podpinać złośliwe serwery MCP do workflow ofiary. Dla firmy używającej Claude Code w produkcji to scenariusz, w którym kompromitacja jednego narzędzia łańcuchowo wpływa na cały stos.
Dodatkowo .npmrc z tokenami publikacji to osobna katastrofa. Jeśli ofiara publikuje pakiety npm pod swoim kontem, atakujący może teraz publikować zainfekowane wersje w jej imieniu. Dlatego atak, który zaczął się od Bitwardena, może w ciągu kilku dni rozlać się na setki innych pakietów, w zależności od tego, kto pobrał 2026.4.0.
Co zrobić, jeśli pobrałeś wersję 2026.4.0
Pierwsza akcja to sprawdzenie, czy w ogóle miałeś tę wersję. W katalogu projektu uruchom npm ls @bitwarden/cli. Dla globalnej instalacji użyj npm list -g @bitwarden/cli. Jeżeli wynik pokazuje 2026.4.0, masz problem. Natomiast jeśli widzisz wersję wcześniejszą lub późniejszą (po naprawie Bitwarden wypuścił bezpieczny patch), jesteś bezpieczny przed tym konkretnym atakiem.
Jeśli miałeś zainfekowaną wersję, musisz wykonać trzy kroki po kolei. Najpierw odinstaluj pakiet i wyczyść lokalną pamięć podręczną komendą npm cache clean --force. Następnie zrotuj wszystkie poświadczenia: GitHub Personal Access Tokens, AWS credentials, Azure service principals, GCP service accounts, tokeny npm, klucze Anthropic i klucze SSH. Na koniec sprawdź GitHub pod kątem nieautoryzowanego tworzenia repozytoriów. Audituj też logi CI/CD z ostatnich dni pod kątem podejrzanych zapytań.
Jako prewencja na przyszłość, wprowadź opóźnienie dla nowych wersji pakietów w swoim menadżerze. W npm 11.10 lub nowszym ustaw min-release-age=7. W pnpm odpowiednikiem jest minimum-release-age=10080 (minuty). Dla uv zastosuj exclude-newer = "7 days". Dzięki temu Twój CI nie pobierze wersji młodszej niż tydzień, co zabezpieczyłoby większość użytkowników przed tym konkretnym atakiem, ponieważ 2026.4.0 została wykryta i usunięta w ciągu 19 godzin.
Kurs n8n 2.0 · Kodożercy
Automatyzacja to dziś jedna z najbardziej poszukiwanych umiejętności
Firmy szukają ludzi którzy łączą procesy z narzędziami. Kurs n8n 2.0 na Kodożercach da Ci praktyczne umiejętności – webhooki, API, automatyczne przepływy danych – które możesz pokazać już jutro.
Zobacz program kursu →

Co z tego wynika dla polskich firm
Bitwarden ma około 50 tysięcy klientów biznesowych na całym świecie, natomiast wśród polskich agencji, startupów i software house’ów jest to narzędzie bardzo popularne. Zespoły DevOps często instalują @bitwarden/cli w swoich potokach CI, żeby automatycznie pobierać sekrety podczas buildów. To dokładnie ta konfiguracja, która najbardziej ucierpiała w tym ataku, ponieważ skompromitowana maszyna CI ma zwykle dostęp do szerokiego zestawu poświadczeń.
Drugi wniosek dotyczy tego, jak łatwo jednym pakietem otworzyć cały stos. Jeśli ktoś w Twoim zespole pobrał zainfekowaną wersję na swoim laptopie, atakujący ma teraz nie tylko klucze do jego GitHuba. Ma również potencjalny dostęp do Claude Code z pełnym katalogiem ~/.claude/. Dlatego warto zweryfikować w zespole, kto używa Bitwarden CLI, i kiedy ostatnio aktualizował pakiet. Jeśli data koliduje z 23-24 kwietnia 2026 roku, rotacja kluczy jest obowiązkowa.
Trzeci wniosek to lekcja dla architektów bezpieczeństwa. Ataki typu supply chain stały się w 2026 roku codziennością, co pisaliśmy już przy okazji axios i backdoor w pluginach WordPress. Wspólnym mianownikiem jest zawsze zbyt szerokie zaufanie do zewnętrznych pakietów oraz brak opóźnień w instalacji świeżych wersji. Cooldown 7 dni na aktualizacje załatwiłby większość tych ataków. Bitwarden naprawił problem w kilkanaście godzin, jednak 334 maszyny, które pobrały zły pakiet wcześniej, muszą teraz robić pełną rotację.
FAQ – najczęstsze pytania o atak na Bitwarden CLI
Która wersja Bitwarden CLI była zainfekowana?
Wersja 2026.4.0 pakietu @bitwarden/cli w rejestrze npm. Złośliwy plik nazywał się bw1.js. Wersja trafiła do npm około 22 kwietnia 2026 roku i została usunięta około 19 godzin później, gdy Socket.dev zgłosił incydent. Inne wersje, w tym poprzednie i patch po naprawie, są bezpieczne.
Czy aplikacja Bitwarden (nie CLI) też jest dotknięta?
Nie. Atak dotyczył wyłącznie pakietu npm @bitwarden/cli. Sama aplikacja Bitwarden do przechowywania haseł (desktop, web, mobile, przeglądarkowe rozszerzenie) nie była dotknięta. Jeśli używasz Bitwardena jako menadżera haseł bez narzędzia CLI, nie masz powodu do paniki.
Ile osób pobrało zainfekowaną wersję?
Socket.dev podaje liczbę 334 pobrań zanim wersja została usunięta z rejestru npm. Każde z tych pobrań to potencjalnie osobna maszyna lub pipeline, który wysłał klucze na serwer atakującego. W skali 10 milionów użytkowników Bitwarden brzmi to mało, jednak 334 pipeline’y CI/CD to setki firm i tysiące kont w chmurze.
Jak sprawdzić, czy mam zainfekowaną wersję?
W katalogu projektu wpisz npm ls @bitwarden/cli. Dla globalnej instalacji użyj npm list -g @bitwarden/cli. Jeśli wynik pokazuje 2026.4.0, masz problem i musisz rotować wszystkie poświadczenia. Jeżeli widzisz inną wersję, jesteś bezpieczny przed tym atakiem.
Co to znaczy, że malware kradł pliki Claude i MCP?
Atakujący dodali do listy celów katalog ~/.claude/, w którym developerzy trzymają klucze API Anthropic, konfigurację serwerów MCP oraz własne skille. Dlatego po ataku atakujący może korzystać z Twojej subskrypcji Claude, potencjalnie analizować Twoje rozmowy z modelem i podpinać złośliwe serwery MCP do Twojego workflow.
Podsumowanie
Atak na @bitwarden/cli 2026.4.0 to kolejny element trwającej kampanii Checkmarx, która w ostatnich miesiącach uderzyła już w popularne pakiety npm. Tym razem atakujący wykorzystali kompromitację GitHub Action w pipeline CI/CD Bitwarden i w ciągu 19 godzin zebrali klucze z 334 maszyn. Lista skradzionych poświadczeń jest szeroka: GitHub, AWS, Azure, GCP, npm, SSH oraz pliki konfiguracyjne Claude i MCP.
Dla polskich firm są trzy praktyczne konsekwencje. Pierwsza: jeśli używasz Bitwarden CLI, sprawdź wersję i rotuj klucze, jeśli trafiłeś na 2026.4.0. Druga: włącz min-release-age w swoim menadżerze pakietów, ponieważ cooldown 7 dni załatwiłby większość takich ataków. Na koniec pamiętaj, że kompromitacja jednego narzędzia otwiera teraz cały stos, razem z kluczami API Anthropic w ~/.claude/. Era, w której wystarczyło ochronić .env z hasłem do bazy danych, definitywnie się skończyła.
Newsletter · DevstockAcademy & Kodożercy
Bądź na bieżąco ze światem IT, AI i automatyzacji
Co wtorek: newsy z branży, praktyczne tipy i narzędzia które warto znać. Zero spamu.



