Krytyczna luka RCE w Marimo (CVE-2026-39987) wykorzystana w mniej niż 10 godzin od ujawnienia - Security Bez Tabu

Krytyczna luka RCE w Marimo (CVE-2026-39987) wykorzystana w mniej niż 10 godzin od ujawnienia

Cybersecurity news

Wprowadzenie do problemu / definicja

CVE-2026-39987 to krytyczna podatność typu pre-auth remote code execution w środowisku Marimo, otwartoźródłowym notebooku Python wykorzystywanym do analizy danych, eksperymentów i pracy interaktywnej. Luka umożliwiała zdalne wykonanie kodu bez uwierzytelnienia poprzez endpoint WebSocket obsługujący terminal, co w praktyce oznaczało możliwość przejęcia wystawionej do sieci instancji bez znajomości jakichkolwiek poświadczeń.

Problem miał szczególnie duże znaczenie dla środowisk uruchamianych w trybie edycyjnym i dostępnych spoza zaufanej sieci. W takich przypadkach atakujący mógł uzyskać interaktywny dostęp do powłoki systemowej i wykonywać dowolne polecenia na hoście.

W skrócie

  • Podatność dotyczyła endpointu /terminal/ws, który nie wymuszał prawidłowej walidacji uwierzytelnienia.
  • Skutkiem był nieuwierzytelniony dostęp do terminala i możliwość zdalnego wykonania kodu.
  • Problem został usunięty w wersji 0.23.0.
  • Pierwsze próby wykorzystania luki odnotowano po około 9 godzinach i 41 minutach od publicznego ujawnienia.
  • Atakujący koncentrowali się m.in. na plikach .env, kluczach SSH oraz rekonesansie systemu plików.

Kontekst / historia

Marimo zyskuje popularność jako nowoczesne środowisko notebookowe dla Pythona, używane przez analityków, inżynierów danych i programistów. Tego typu narzędzia są często wdrażane szybko, z myślą o wygodzie pracy, a następnie bywają błędnie wystawiane do sieci lokalnej lub internetu bez odpowiednich zabezpieczeń brzegowych.

W przypadku CVE-2026-39987 problem dotyczył architektury dostępu do terminala przez WebSocket. Producent wskazał, że inne endpointy realizowały poprawną kontrolę autoryzacji, natomiast /terminal/ws pomijał ten krok. To sprawiło, że środowiska korzystające z wbudowanego mechanizmu uwierzytelniania Marimo mogły pozostać podatne, jeśli notebook działał w trybie edycyjnym i był osiągalny z zewnątrz, na przykład poprzez nasłuchiwanie na 0.0.0.0.

Incydent dobrze pokazuje skracające się okno między ujawnieniem podatności a jej realnym wykorzystaniem. Atakujący nie musieli czekać na publicznie dostępny exploit, ponieważ sam opis błędu i obserwacja zachowania aplikacji wystarczyły do przygotowania skutecznego ataku.

Analiza techniczna

Źródłem problemu była błędna implementacja kontroli dostępu dla terminalowego endpointu WebSocket. Mechanizm odpowiedzialny za obsługę /terminal/ws nie wykonywał pełnej walidacji uwierzytelnienia przed ustanowieniem sesji. W efekcie napastnik mógł połączyć się z usługą bez logowania i uzyskać pseudo-terminal powiązany z procesem aplikacji.

Z technicznego punktu widzenia otwierało to drogę do wykonywania poleceń systemowych, przeglądania plików i katalogów, odczytu konfiguracji oraz przejmowania lokalnie zapisanych sekretów. W źle odseparowanych środowiskach mogło to również prowadzić do dalszej eskalacji uprawnień lub ruchu bocznego do innych zasobów infrastruktury.

Analizy opublikowane po ujawnieniu błędu wskazują, że obserwowany atak miał charakter manualny. Po ustanowieniu sesji operator rozpoczął rekonesans systemu plików, następnie próbował uzyskać dane z plików .env, wyszukiwał klucze SSH i przeglądał zawartość plików potencjalnie zawierających informacje operacyjne. To typowy wzorzec działania w początkowej fazie kompromitacji środowisk deweloperskich, gdzie najcenniejszym celem są sekrety chmurowe, tokeny API i poświadczenia umożliwiające dalsze przejęcia.

Warto podkreślić, że najwyższe ryzyko dotyczyło notebooków uruchomionych w trybie edycyjnym. Instalacje działające jako aplikacja, niewystawione do internetu lub osłonięte dodatkowym reverse proxy z niezależnym uwierzytelnianiem, nie wpisywały się w ten sam scenariusz zagrożenia.

Konsekwencje / ryzyko

Ryzyko związane z CVE-2026-39987 należy ocenić jako bardzo wysokie. Mamy tu do czynienia z połączeniem braku uwierzytelnienia, zdalnego wykonania kodu, prostego wektora sieciowego oraz niemal natychmiastowego pojawienia się aktywnej eksploatacji. Dla organizacji oznacza to, że podatna instancja mogła zostać przejęta w bardzo krótkim czasie od ujawnienia problemu.

  • kradzież sekretów z plików środowiskowych i konfiguracji,
  • przejęcie kluczy SSH, tokenów API i innych danych dostępowych,
  • dostęp do kodu źródłowego, danych analitycznych i artefaktów roboczych,
  • możliwość instalacji dodatkowych narzędzi utrzymania dostępu,
  • wykorzystanie hosta jako punktu wejścia do dalszego ataku na infrastrukturę.

Szczególnie zagrożone są środowiska laboratoryjne, analityczne i deweloperskie. Nawet jeśli nie przechowują one danych produkcyjnych, często zawierają uprzywilejowane poświadczenia do baz danych, usług chmurowych, repozytoriów kodu czy pipeline’ów CI/CD. Z perspektywy atakującego to atrakcyjny punkt startowy do rozwinięcia kompromitacji.

Rekomendacje

Organizacje korzystające z Marimo powinny potraktować tę podatność jako problem wymagający natychmiastowej reakcji operacyjnej. Samo załatanie błędu jest niezbędne, ale przy potwierdzonej aktywnej eksploatacji równie ważne jest sprawdzenie, czy nie doszło już do nieautoryzowanego dostępu.

  • niezwłocznie zaktualizować Marimo do wersji 0.23.0 lub nowszej,
  • zidentyfikować wszystkie instancje wystawione do internetu lub sieci współdzielonych,
  • ograniczyć ekspozycję notebooków edycyjnych do zaufanych segmentów sieci,
  • nie polegać wyłącznie na wbudowanym uwierzytelnianiu przy usługach dostępnych z zewnątrz,
  • wdrożyć reverse proxy z niezależną kontrolą dostępu, MFA i filtrowaniem ruchu,
  • przeanalizować logi połączeń WebSocket oraz historię aktywności na hostach,
  • sprawdzić, czy nie odczytano plików .env, kluczy SSH, tokenów lub innych sekretów,
  • przeprowadzić rotację poświadczeń, które mogły być dostępne z podatnych instancji,
  • zweryfikować integralność hosta pod kątem backdoorów, zadań cron, skryptów i nietypowych procesów,
  • wzmocnić segmentację sieci i zasadę minimalnych uprawnień dla środowisk notebookowych.

Dobrą praktyką pozostaje traktowanie narzędzi data science i notebooków jako komponentów wysokiego ryzyka. Jeśli aplikacja udostępnia terminal, interpreter lub funkcje uruchamiania kodu, powinna być zabezpieczana z taką samą starannością jak systemy administracyjne.

Podsumowanie

CVE-2026-39987 to kolejny przykład tego, jak szybko krytyczne podatności przechodzą z etapu disclosure do aktywnej eksploatacji. Luka w Marimo umożliwiała nieuwierzytelnione zdalne wykonanie kodu przez terminalowy endpoint WebSocket, a pierwsze próby wykorzystania pojawiły się w mniej niż 10 godzin od ujawnienia. Dla zespołów bezpieczeństwa to wyraźny sygnał, że czas reakcji na publicznie ogłoszone błędy nadal się skraca.

Priorytetem powinny być szybkie aktualizacje, ograniczanie ekspozycji usług notebookowych oraz pełna weryfikacja, czy z podatnych instancji nie wyciekły sekrety lub dane dostępowe. W praktyce to właśnie środowiska deweloperskie i analityczne coraz częściej stają się najłatwiejszą drogą do szerszej kompromitacji organizacji.

Źródła

  1. https://thehackernews.com/2026/04/marimo-rce-flaw-cve-2026-39987.html
  2. https://github.com/marimo-team/marimo/releases/tag/0.23.0
  3. https://www.sysdig.com/blog/marimo-oss-python-notebook-rce-from-disclosure-to-exploitation-in-under-10-hours
  4. https://www.endorlabs.com/learn/root-in-one-request-marimos-critical-pre-auth-rce-cve-2026-39987