
Wprowadzenie do problemu / definicja
CVE-2026-39987 to krytyczna podatność typu pre-auth remote code execution w projekcie Marimo, open source’owym narzędziu do pracy z notebookami Pythona. Luka umożliwia nieuwierzytelnionemu atakującemu uzyskanie interaktywnej powłoki systemowej przez endpoint WebSocket terminala, bez konieczności logowania lub posiadania tokenu dostępu.
Przypadek ten pokazuje, jak bardzo skrócił się dziś czas między publicznym ujawnieniem błędu a jego praktycznym wykorzystaniem. W środowiskach wystawionych do internetu choćby kilka godzin opóźnienia w reakcji może oznaczać realne ryzyko kompromitacji.
W skrócie
- Podatność dotyczy wersji Marimo do 0.20.4 włącznie.
- Poprawkę udostępniono w wersji 0.23.0.
- Błąd wynika z braku walidacji uwierzytelnienia w endpointcie /terminal/ws.
- Atakujący może uzyskać pełną interaktywną sesję PTY i wykonywać polecenia systemowe zdalnie.
- Pierwsze próby wykorzystania odnotowano po 9 godzinach i 41 minutach od ujawnienia.
- Zaobserwowano szybkie działania ukierunkowane na pozyskanie sekretów i poświadczeń.
Kontekst / historia
Marimo to stosunkowo niszowe, ale coraz szerzej wdrażane narzędzie wykorzystywane w data science, analizie danych i interaktywnych workflow opartych o Pythona. Tego rodzaju platformy często działają w środowiskach deweloperskich, badawczych lub chmurowych, gdzie mają dostęp do wrażliwych danych operacyjnych, takich jak pliki .env, klucze API, poświadczenia do baz danych czy konta usługowe.
Podatność została ujawniona 8 kwietnia 2026 roku jako krytyczny problem bezpieczeństwa. W ciągu kilkunastu godzin od publikacji badacze zaobserwowali zarówno ruch rozpoznawczy, jak i aktywne próby eksploatacji, co potwierdza, iż cyberprzestępcy monitorują advisories open source niemal natychmiast po ich opublikowaniu.
To istotna lekcja dla zespołów bezpieczeństwa: zagrożenie nie dotyczy wyłącznie najpopularniejszych platform. choćby mniej znane komponenty mogą zostać bardzo gwałtownie objęte skanowaniem i próbami przejęcia, jeżeli oferują prosty wektor ataku oraz potencjalnie wysoki zwrot dla napastnika.
Analiza techniczna
Źródłem problemu była niespójna implementacja kontroli dostępu dla połączeń WebSocket. Podczas gdy inne endpointy WebSocket w Marimo prawidłowo wykonywały walidację uwierzytelnienia, endpoint /terminal/ws pomijał ten etap. W praktyce aplikacja sprawdzała jedynie tryb działania i dostępność obsługi terminala, po czym akceptowała połączenie od nieautoryzowanego klienta.
Po zestawieniu połączenia atakujący uzyskiwał pełną interaktywną sesję PTY, co umożliwiało wykonywanie dowolnych poleceń systemowych. W uproszczonych lub domyślnych wdrożeniach kontenerowych mogło to oznaczać uruchamianie poleceń z wysokimi uprawnieniami, choćby jako root.
Techniczny próg wejścia był bardzo niski. Atak nie wymagał przygotowania złożonego ładunku, obchodzenia filtrów wejścia ani budowy wieloetapowego łańcucha eksploatacji. Wystarczało otwarcie połączenia WebSocket do podatnego endpointu i rozpoczęcie interakcji z powłoką systemową.
Zaobserwowany scenariusz ataku był pragmatyczny i nastawiony na szybkie pozyskanie wartościowych danych. Operator najpierw potwierdził możliwość wykonywania komend, a następnie przeszedł do eksploracji systemu plików, ze szczególnym uwzględnieniem plików konfiguracyjnych, katalogów roboczych oraz potencjalnych kluczy SSH. Odnotowano również aktywność rozpoznawczą z wielu unikalnych adresów IP, choć tylko część ruchu przeszła od skanowania do rzeczywistej eksploatacji.
Konsekwencje / ryzyko
Ryzyko związane z CVE-2026-39987 jest bardzo wysokie. Po pierwsze, atak nie wymaga uwierzytelnienia. Po drugie, zapewnia natychmiastowy dostęp do interaktywnej powłoki, co znacząco skraca czas potrzebny na dalszą penetrację środowiska. Po trzecie, notebooki i środowiska analityczne często przechowują sekrety, dane projektowe oraz poświadczenia, które mogą posłużyć do ruchu bocznego.
W praktyce skutki incydentu mogą obejmować przejęcie sekretów aplikacyjnych, dostęp do zasobów chmurowych, kompromitację baz danych, wyciek danych operacyjnych oraz wykorzystanie hosta jako punktu wyjścia do dalszych działań w infrastrukturze organizacji.
Szczególnie niebezpieczny jest krótki czas od ujawnienia podatności do pierwszych prób jej wykorzystania. Oznacza to, iż tradycyjne procesy patch management mogą okazać się zbyt wolne, jeżeli podatna usługa jest dostępna bezpośrednio z internetu.
Rekomendacje
Najważniejszym działaniem jest natychmiastowa aktualizacja Marimo do wersji 0.23.0 lub nowszej. o ile wdrożenie poprawki nie jest możliwe od razu, instancje powinny zostać odizolowane od internetu, a dostęp do nich ograniczony przez reverse proxy, segmentację sieci oraz dodatkowe mechanizmy uwierzytelnienia.
- Zidentyfikować wszystkie instancje Marimo oraz podobnych platform notebookowych w środowisku.
- Zablokować publiczny dostęp do endpointów WebSocket, zwłaszcza funkcji terminala.
- Monitorować połączenia do /terminal/ws i korelować je z logami aplikacji oraz telemetrią sieciową.
- Przeprowadzić rotację sekretów, jeżeli istnieje podejrzenie odczytu plików .env, kluczy SSH lub tokenów.
- Sprawdzić historię procesów, logi kontenerów i artefakty sesji pod kątem manualnej aktywności operatora.
- Zweryfikować uprawnienia kont uruchamiających środowiska notebookowe i ograniczyć je zgodnie z zasadą najmniejszych uprawnień.
- Rozważyć wyłączenie funkcji terminala tam, gdzie nie jest ona niezbędna.
Dodatkowo organizacje powinny traktować advisories producentów i repozytoriów open source jako sygnał wymagający natychmiastowej oceny ekspozycji. Współczesne kampanie eksploatacji coraz częściej rozpoczynają się jeszcze przed pojawieniem się publicznych exploitów lub szerokiego omówienia w mediach branżowych.
Podsumowanie
CVE-2026-39987 to przykład krytycznej podatności, która łączy bardzo prosty wektor ataku z wysokim potencjałem przejęcia środowiska. Luka w Marimo umożliwia nieuwierzytelnione zdalne wykonanie kodu przez endpoint WebSocket terminala i została wykorzystana w mniej niż 10 godzin od ujawnienia.
Incydent potwierdza, iż choćby niszowe narzędzia open source mogą stać się celem niemal natychmiast po publikacji szczegółów technicznych. Dla zespołów bezpieczeństwa oznacza to konieczność objęcia internet-facing narzędzi deweloperskich i analitycznych takim samym rygorem ochrony jak systemów produkcyjnych.
Źródła
- Security Affairs — https://securityaffairs.com/190623/hacking/cve-2026-39987-marimo-rce-exploited-in-hours-after-disclosure.html
- GitHub Security Advisory: Pre-Auth Remote Code Execution via Terminal WebSocket Authentication Bypass — https://github.com/marimo-team/marimo/security/advisories/GHSA-2679-6mx9-h9xc
- Sysdig — Marimo OSS Python Notebook RCE: From Disclosure to Exploitation in Under 10 Hours — https://www.sysdig.com/blog/marimo-oss-python-notebook-rce-from-disclosure-to-exploitation-in-under-10-hours

