Krytyczna luka w NocoBase pozwala na ucieczkę z sandboxa VM i zdalne wykonanie kodu - Security Bez Tabu

Krytyczna luka w NocoBase pozwala na ucieczkę z sandboxa VM i zdalne wykonanie kodu

Cybersecurity news

Wprowadzenie do problemu / definicja

W platformie NocoBase ujawniono krytyczną podatność oznaczoną jako CVE-2026-34156, która dotyczy mechanizmu wykonywania skryptów JavaScript w komponencie Workflow Script Node. Błąd wynika z niewłaściwej izolacji kodu uruchamianego w środowisku opartym o Node.js vm, co umożliwia obejście ograniczeń piaskownicy i uzyskanie dostępu do obiektów hosta. W praktyce prowadzi to do zdalnego wykonania kodu na serwerze aplikacji.

Problem jest szczególnie istotny, ponieważ dotyczy funkcji automatyzacji workflow, a więc obszaru często wykorzystywanego przez administratorów, operatorów i zaawansowanych użytkowników technicznych. W efekcie nawet częściowo uprzywilejowane konto może stać się punktem wyjścia do pełnej kompromitacji instancji.

W skrócie

  • Podatność dotyczy wersji NocoBase do 2.0.27 włącznie.
  • Poprawka została wprowadzona w wersji 2.0.28.
  • Atak wykorzystuje dostęp do obiektu console przekazanego do sandboxa.
  • Możliwe jest wyjście z piaskownicy, uzyskanie dostępu do process i załadowanie child_process.
  • Skutkiem może być zdalne wykonanie poleceń systemowych na serwerze.
  • Według opisu exploita atak wymaga uwierzytelnienia, ale wystarczyć mogą uprawnienia do modułu workflow.

Kontekst / historia

Podatność została publicznie opisana pod koniec marca 2026 roku, a 7 maja 2026 roku opublikowano publiczny exploit demonstracyjny. Luka wpisuje się w znaną klasę problemów bezpieczeństwa związanych z błędnym traktowaniem mechanizmów izolacji w Node.js jako pełnoprawnej granicy bezpieczeństwa.

W tego typu scenariuszach ryzyko pojawia się wtedy, gdy do środowiska sandbox przekazywane są obiekty pochodzące z kontekstu hosta. Nawet jeśli aplikacja stosuje listę dozwolonych modułów lub ogranicza API dostępne dla skryptów użytkownika, pojedynczy błąd projektowy może całkowicie zniwelować te zabezpieczenia.

W przypadku NocoBase zagrożony był mechanizm workflow, co ma znaczenie operacyjne. Funkcje automatyzacji zwykle działają blisko logiki biznesowej, danych aplikacyjnych i integracji z usługami zewnętrznymi, dlatego ich kompromitacja może mieć znacznie szersze skutki niż incydent ograniczony do jednego konta użytkownika.

Analiza techniczna

Sednem luki było udostępnienie skryptowi użytkownika obiektu console, którego właściwości, takie jak console._stdout i console._stderr, odwoływały się do obiektów utworzonych poza sandboxem. To otwierało drogę do przejścia po łańcuchu prototypów i uzyskania dostępu do konstruktora Function w kontekście hosta.

Następnie możliwe było zbudowanie łańcucha prowadzącego do obiektu process, a dalej do ładowania modułów systemowych. W praktyce exploit pozwalał sięgnąć po child_process i uruchamiać polecenia systemowe z poziomu procesu aplikacji.

  • uzyskanie referencji do obiektu hosta przez właściwości strumieni console,
  • przejście do constructor.constructor,
  • odzyskanie dostępu do globalnego konstruktora Function,
  • wywołanie kodu zwracającego obiekt process,
  • użycie mechanizmu ładowania modułów do uruchamiania poleceń systemowych.

Według opisu technicznego exploit wykorzystywał endpoint służący do testowania węzłów workflow i przesyłał spreparowany skrypt jako dane wejściowe. Oznacza to, że kontrola oparta na allowliście nie była skuteczną barierą bezpieczeństwa, ponieważ atak omijał ją przez bezpośredni dostęp do obiektów hosta.

Po uzyskaniu dostępu do process możliwości napastnika znacząco rosną. Obejmują one nie tylko wykonanie poleceń systemowych, ale także odczyt zmiennych środowiskowych, dostęp do plików aplikacji, manipulację danymi, pobieranie dodatkowych narzędzi oraz ruch boczny do innych zasobów osiągalnych z poziomu kontenera lub hosta.

Konsekwencje / ryzyko

Najpoważniejszą konsekwencją CVE-2026-34156 jest zdalne wykonanie kodu na serwerze obsługującym NocoBase. W zależności od architektury wdrożenia może to oznaczać pełne przejęcie instancji, trwałą obecność napastnika w środowisku oraz utratę poufności i integralności danych.

  • przejęcie aplikacji i modyfikacja workflow,
  • kradzież poświadczeń do baz danych i usług zewnętrznych,
  • odczyt sekretów zapisanych w zmiennych środowiskowych,
  • instalacja backdoora lub web shella,
  • manipulacja danymi biznesowymi i logiką automatyzacji,
  • próby ruchu bocznego w środowisku kontenerowym lub klastrowym.

Ryzyko rośnie, jeśli aplikacja działa w kontenerze z nadmiernymi uprawnieniami albo jako root. Nawet w sytuacji, gdy wykonanie kodu ogranicza się formalnie do kontenera, atakujący może uzyskać dostęp do tokenów integracyjnych, konfiguracji, interfejsów sieciowych i zasobów niezbędnych do dalszej eskalacji incydentu.

Istotnym czynnikiem zwiększającym zagrożenie jest dostępność publicznego PoC. Obniża to próg wejścia dla napastników i skraca czas między ujawnieniem luki a próbami jej wykorzystania w rzeczywistych środowiskach. Organizacje, które szeroko delegują dostęp do modułów workflow, powinny traktować ten scenariusz jako szczególnie pilny.

Rekomendacje

Najważniejszym działaniem naprawczym jest niezwłoczna aktualizacja NocoBase do wersji 2.0.28 lub nowszej. Wszystkie instancje działające na wersjach 2.0.27 i starszych powinny zostać uznane za potencjalnie narażone na krytyczny atak.

  • ograniczyć dostęp do Workflow Script Node wyłącznie do zaufanych administratorów,
  • przeprowadzić audyt ról i uprawnień użytkowników mogących tworzyć lub testować workflow,
  • monitorować wywołania endpointów związanych z uruchamianiem i testowaniem skryptów,
  • analizować logi pod kątem nietypowych poleceń systemowych i anomalii w procesach,
  • rotować hasła, tokeny API i sekrety środowiskowe po wykryciu oznak kompromitacji,
  • ograniczyć uprawnienia kontenerów i wyłączyć uruchamianie jako root tam, gdzie to możliwe,
  • wdrożyć mechanizmy ograniczające skutki kompromitacji, takie jak seccomp, AppArmor lub podobne profile,
  • segmentować sieć i ograniczyć komunikację wychodzącą z kontenerów aplikacyjnych,
  • sprawdzić integralność plików aplikacji oraz obrazów kontenerowych.

Z perspektywy architektury bezpieczeństwa zdarzenie to stanowi kolejny sygnał ostrzegawczy przed traktowaniem vm jako twardej granicy izolacji dla nieufnego kodu. Jeżeli platforma pozwala użytkownikom uruchamiać własne skrypty, bezpieczniejszym podejściem jest wykorzystanie silniejszej separacji, na przykład odrębnych procesów, izolowanych kontenerów jednorazowych lub dedykowanych mechanizmów sandboxingu.

Podsumowanie

CVE-2026-34156 to krytyczna podatność w NocoBase, która pokazuje, jak groźne może być wykonywanie kodu użytkownika w niewystarczająco odizolowanym środowisku Node.js. Błąd umożliwia wyjście z sandboxa i uruchamianie poleceń systemowych poprzez dostęp do obiektów hosta przekazanych do kontekstu skryptu.

Dla zespołów bezpieczeństwa i administratorów priorytetem powinny być trzy działania: szybka aktualizacja do wersji naprawionej, przegląd uprawnień do workflow oraz weryfikacja, czy środowisko nie nosi śladów wcześniejszej kompromitacji. Ze względu na krytyczny charakter luki i dostępność publicznego exploita zwłoka istotnie zwiększa ryzyko skutecznego ataku.

Źródła

  1. Exploit Database — NocoBase 2.0.27 – VM Sandbox Escape
    https://www.exploit-db.com/exploits/52552
  2. GitHub Security Advisory — GHSA-px3p-vgh9-m57c
    https://github.com/nocobase/nocobase/security/advisories/GHSA-px3p-vgh9-m57c
  3. NVD — CVE-2026-34156
    https://nvd.nist.gov/vuln/detail/CVE-2026-34156
  4. OSV — GHSA-px3p-vgh9-m57c
    https://osv.dev/vulnerability/GHSA-px3p-vgh9-m57c