Luka o krytyczności 9.6 w skali CVSS (Common Vulnerability Scoring System — skala 0-10 oceniająca powagę luki) została zidentyfikowana w popularnym pakiecie Pythona guardrails-ai [^1]. Złośliwa wersja biblioteki, dostępna w oficjalnym repozytorium przez około dwie godziny, mogła prowadzić do kradzieży kluczy API i tokenów deweloperskich [^2]. Incydent jest klasycznym przykładem ataku na łańcuch dostaw oprogramowania, gdzie zaufany kanał dystrybucji został tymczasowo skompromitowany [^3].

Każdy użytkownik, który zainstalował pakiet guardrails-ai w wersji 0.10.1 bezpośrednio z repozytorium PyPI w dniu 11 maja 2026 roku, jest zagrożony [^4]. Mimo że utrzymujący projekt nie zaobserwowali dowodów na aktywną eksploatację luki ani eksfiltrację danych przez ich systemy, charakter zagrożenia wymaga natychmiastowej reakcji [^5] [^6]. Polskie zespoły deweloperskie, coraz częściej wykorzystujące frameworki AI, powinny potraktować ten alert jako sygnał do weryfikacji swoich zależności i procedur bezpieczeństwa.

TL;DR

  • Produkt: guardrails-ai, framework Pythona do budowy aplikacji AI [^7].
  • Wektor: Atak na łańcuch dostaw. Publikacja złośliwej wersji 0.10.1 w oficjalnym repozytorium Python Package Index (PyPI) [^8] [^9].
  • Identyfikator: CVE-2026-45758, z wynikiem CVSS 9.6 (Krytyczny) [^10] [^1].
  • Wskaźnik kompromitacji: Instalacja pakietu guardrails-ai==0.10.1 w dniu 11 maja 2026 roku [^11].
  • Kogo dotyczy: Deweloperzy i systemy CI/CD, które pobrały i zainstalowały złośliwą wersję pakietu w wąskim oknie czasowym.
  • Główne ryzyko: Zdalne wykonanie kodu (RCE — Remote Code Execution) podczas instalacji, co może prowadzić do kradzieży poświadczeń: tokenów GitHub, kluczy chmurowych i innych kluczy API [^12] [^13].
  • Pierwszy ruch: Natychmiastowa weryfikacja zainstalowanych wersji guardrails-ai i rotacja wszystkich kluczy API oraz tokenów na maszynach, gdzie mogło dojść do instalacji [^14].

Wektor ataku

Incydent związany z CVE-2026-45758 to atak na łańcuch dostaw oprogramowania [^3]. 11 maja 2026 roku, około godziny 18:00 czasu pacyficznego, nieznany sprawca opublikował w oficjalnym repozytorium PyPI złośliwą wersję pakietu guardrails-ai oznaczoną numerem 0.10.1 [^15]. Pakiet ten zawierał osadzony złośliwy kod, sklasyfikowany jako CWE-506 (Embedded Malicious Code) [^16]. CWE (Common Weakness Enumeration) to system klasyfikacji typów błędów bezpieczeństwa w oprogramowaniu.

Mechanizm ataku był prosty i skuteczny. Każdy deweloper lub zautomatyzowany system (np. CI/CD), który w tym czasie wykonał polecenie pip install guardrails-ai==0.10.1, nieświadomie pobierał i uruchamiał złośliwy kod na swojej maszynie [^17]. Proces instalacji pakietu Pythona może uruchamiać skrypty setup.py, co jest częstym wektorem w tego typu atakach. Kod został zaprojektowany w celu eksfiltracji wrażliwych danych z komputera ofiary [^18]. Celem były przede wszystkim poświadczenia deweloperskie, takie jak:

  • Osobiste tokeny dostępu do GitHuba (Personal Access Tokens, PATs).
  • Klucze dostępu do dostawców chmury (AWS, Azure, GCP).
  • Tokeny uwierzytelniające do rejestrów pakietów (np. PyPI, Docker Hub).
  • Inne klucze API przechowywane w zmiennych środowiskowych lub plikach konfiguracyjnych [^13].

Zalecenie audytu kont GitHub pod kątem nieautoryzowanych przepływów pracy lub repozytoriów sugeruje, że złośliwy kod mógł również próbować utrwalić dostęp lub rozprzestrzeniać się wewnątrz organizacji ofiary [^19].

Na szczęście złośliwy pakiet został zidentyfikowany przez badaczy bezpieczeństwa w ciągu około dwóch godzin od publikacji [^2]. Niedługo potem administratorzy PyPI poddali repozytorium kwarantannie, uniemożliwiając dalsze pobieranie zainfekowanej wersji [^20]. Mimo krótkiego okna ekspozycji, każda instalacja w tym czasie powinna być traktowana jako pełna kompromitacja środowiska.

Wskaźniki kompromitacji

Jedynym wskaźnikiem kompromitacji (IoC — Indicators of Compromise) w tym przypadku jest fakt instalacji konkretnej wersji pakietu w określonym oknie czasowym. Nie zidentyfikowano publicznie adresów IP serwerów C2 (Command and Control — serwer kontrolujący zainfekowane maszyny) ani hashy plików powiązanych z tym atakiem.

Kluczowy wskaźnik:

  • Nazwa pakietu: guardrails-ai
  • Złośliwa wersja: 0.10.1 [^21]
  • Okno ataku: Instalacja wykonana 11 maja 2026 roku [^4] [^11]

Aby sprawdzić, czy system jest zagrożony, należy zweryfikować historię instalacji pakietów Pythona lub sprawdzić aktualnie zainstalowaną wersję poleceniem w terminalu:

pip show guardrails-ai

Jeśli wynik pokaże Version: 0.10.1, a logi systemowe, historia powłoki (history | grep 'pip install guardrails-ai') lub logi z systemu CI/CD wskazują na instalację w dniu 11 maja 2026, maszynę należy traktować jako skompromitowaną i natychmiast podjąć działania naprawcze.

Co zrobić w 24-48h

Zespoły, które mogły zainstalować złośliwą wersję, powinny przyjąć, że doszło do kompromitacji i postępować według poniższego planu. Rekomendowane podejście nie zastępuje pełnej analizy incydentu, ale stanowi pierwszą linię obrony.

  1. Identyfikacja i izolacja.

    • Przeprowadź audyt wszystkich środowisk deweloperskich i systemów CI/CD pod kątem obecności guardrails-ai==0.10.1.
    • Każdą maszynę, na której zidentyfikowano złośliwy pakiet, należy natychmiast odizolować od sieci, aby zapobiec dalszemu wyciekowi danych lub komunikacji z serwerem C2.
  2. Rotacja wszystkich poświadczeń.

    • To krok o najwyższym priorytecie. Należy unieważnić i wygenerować na nowo wszystkie poświadczenia, do których zainfekowana maszyna mogła mieć dostęp [^14].
    • Lista obejmuje, ale nie ogranicza się do: kluczy SSH, tokenów GitHub/GitLab, kluczy dostępowych do AWS/Azure/GCP, kluczy API do usług zewnętrznych (Stripe, SendGrid, etc.), tokenów do repozytoriów pakietów.
    • Dla polskich firm, gdzie często jedna stacja robocza dewelopera ma dostęp do wielu krytycznych zasobów, ten krok jest kluczowy. Wyciek poświadczeń może prowadzić do naruszenia ochrony danych, co podlega zgłoszeniu do Prezesa UODO zgodnie z RODO.
      1. Audyt dostępu i aktywności.
    • Przeanalizuj logi dostępu do wszystkich usług, do których klucze mogły wyciec. Szukaj nietypowej aktywności, logowań z nieznanych adresów IP lub podejrzanych operacji API.
    • Zgodnie z rekomendacją, przeprowadź szczegółowy audyt kont GitHub pod kątem nowo dodanych, nieautoryzowanych repozytoriów, przepływów pracy (GitHub Actions) lub dodanych kluczy SSH/deploy keys [^19].
      1. Oczyszczenie i aktualizacja.
    • Po wykonaniu powyższych kroków, należy całkowicie usunąć złośliwą wersję pakietu.
    • Zainstaluj bezpieczną wersję, wykonując pip install --upgrade guardrails-ai w celu pobrania najnowszej wersji (powyżej 0.10.2) lub pip install guardrails-ai==0.10.0, aby cofnąć się do ostatniej znanej bezpiecznej wersji [^22].
  3. Wzmocnienie prewencji.

    • Rozważ wdrożenie polityk bezpieczeństwa dla zależności (np. pip-audit, safety) w procesach CI/CD.
    • Organizacje podlegające dyrektywie NIS2 powinny wykorzystać ten incydent do przeglądu i wzmocnienia swoich procedur zarządzania ryzykiem w łańcuchu dostaw oprogramowania. Dokumentacja podjętych kroków będzie kluczowa podczas audytu.
    • Źródła

  4. [^7] [^15] [^4] [^2] [^20] [^5] [^6] [^22] [^14] nvd.nist.gov › CVE 2026 45758

  5. [^10] [^1] [^12] [^8] [^9] [^17] [^3] [^11] [^18] [^13] [^19] thehackerwire.com › cve 2026 45758 guardrails ai malicious pypi pack…

  6. [^21] [^16] [^23] https://radar.offseq.com/threat/cve-2026-45758-cwe-506-embedded-malicious-code-in—296c81fb

Zobacz też