
Wprowadzenie do problemu / definicja luki
Na początku stycznia 2026 r. nagłośniono krytyczną podatność w n8n (open-source’owej platformie automatyzacji workflow), która może doprowadzić do wykonania poleceń systemu operacyjnego na hoście. Luka ma identyfikator CVE-2025-68668 i ocenę CVSS 9.9 (Critical).
Istotne zastrzeżenie: atak wymaga uwierzytelnienia oraz uprawnień pozwalających tworzyć lub modyfikować workflow (czyli nie jest to typowy „unauth RCE z internetu”), ale w praktyce nadal bywa to scenariusz wysokiego ryzyka w środowiskach zespołowych i wieloużytkownikowych.
W skrócie
- Co: sandbox bypass w Python Code Node opartym o Pyodide, skutkujący możliwością wykonania dowolnych komend na hoście.
- Kto może zaatakować: zalogowany użytkownik z prawem edycji/tworzenia workflow.
- Zakres wersji: n8n >= 1.0.0 i < 2.0.0.
- Naprawa: aktualizacja do n8n 2.0.0.
- Doraźne obejścia: m.in. wyłączenie Code Node / wyłączenie Pythona w Code Node / przejście na izolację przez task runners.
Kontekst / historia / powiązania
n8n ma wbudowane mechanizmy uruchamiania kodu użytkownika w węźle „Code”, w tym wsparcie dla Pythona. W przypadku CVE-2025-68668 problem dotyczy modelu izolacji (sandboxu) w ścieżce wykonania Pythona opartej o Pyodide.
Warto odnotować, że to nie pierwszy krytyczny temat wokół RCE w n8n w ostatnich tygodniach — The Hacker News wskazuje, że wcześniej załatano także inną krytyczną podatność RCE (CVE-2025-68613). To sygnał, że komponenty odpowiedzialne za „uruchamianie logiki użytkownika” w automatyzacji workflow są szczególnie wrażliwe i wymagają konserwatywnej konfiguracji uprawnień.
Analiza techniczna / szczegóły luki
Opis z perspektywy bezpieczeństwa aplikacji: CVE-2025-68668 jest klasyfikowane jako CWE-693 (Protection Mechanism Failure) — czyli mechanizm ochronny (sandbox) nie zapewnia oczekiwanej separacji.
Powierzchnia ataku (wg CVSS v3.1):
- AV:N (zdalnie przez sieć), AC:L (niska złożoność),
- PR:L (wymagane niskie uprawnienia — ale jednak jakieś),
- UI:N (brak interakcji użytkownika),
- S:C (scope changed — potencjalne przejście z kontekstu aplikacji do hosta),
- wpływ: wysoki na poufność i integralność; w zależności od źródła oceny także dostępność.
Sedno problemu: jeżeli użytkownik może umieścić/uruchomić kod Pythona w Python Code Node, to w warunkach podatności jest w stanie „wyjść z sandboxu” i doprowadzić do uruchomienia poleceń systemowych na hoście, z uprawnieniami procesu n8n.
Praktyczne konsekwencje / ryzyko
Skuteczna eksploatacja może oznaczać w praktyce:
- przejęcie instancji n8n (w zakresie uprawnień procesu n8n),
- dostęp do danych i sekretów przetwarzanych w workflow (tokeny API, dane biznesowe),
- modyfikację workflow (trwałe backdoory w automatyzacjach),
- potencjalnie ruch lateralny (np. jeśli n8n ma dostęp sieciowy do innych systemów).
Ryzyko rośnie szczególnie w środowiskach, gdzie:
- wielu użytkowników ma możliwość tworzenia/edycji workflow,
- n8n działa w jednej sieci z systemami wrażliwymi,
- proces n8n ma nadmiarowe uprawnienia lub szeroki egress. (To już wnioski operacyjne — warto je zweryfikować w swoim threat modelu).
Rekomendacje operacyjne / co zrobić teraz
Poniżej praktyczna lista działań „od razu” — od najlepszej opcji do doraźnych mitigacji.
A. Najlepsza opcja: aktualizacja
- Zaktualizuj n8n do 2.0.0 (to wersja z poprawką).
B. Doraźne obejścia, jeśli nie możesz aktualizować natychmiast
1) Wyłącz Code Node (najbardziej „twarde” ograniczenie funkcjonalności):
Zablokuj węzeł Code przez NODES_EXCLUDE. Przykład z dokumentacji pokazuje, że NODES_EXCLUDE przyjmuje tablicę nazw węzłów do zablokowania.
# przykład – zablokuj Code node (nazwa z advisora)
NODES_EXCLUDE='["n8n-nodes-base.code"]'
2) Wyłącz uruchamianie Pythona w Code node:
Advisory rekomenduje ustawienie N8N_PYTHON_ENABLED=false.
N8N_PYTHON_ENABLED=false
3) Przejdź na izolację opartą o task runners (wspierane od 1.111.0):
n8n opisuje task runners jako mechanizm uruchamiania kodu JS/Python w sposób bardziej izolowany; dokumentacja pokazuje m.in. N8N_RUNNERS_ENABLED=true oraz N8N_NATIVE_PYTHON_RUNNER=true, a w trybie produkcyjnym preferuje się „external mode” z osobnym kontenerem/sidecarem n8nio/runners.
# minimum wg advisora (koncepcyjnie)
N8N_RUNNERS_ENABLED=true
N8N_NATIVE_PYTHON_RUNNER=true
Uwaga operacyjna: jeśli wdrażasz external mode, dopilnuj zgodności wersji
n8nio/n8nin8nio/runnersoraz ustawienia tokena autoryzacji do połączeń runnerów.
C. Dodatkowe twardnienie (uzupełniająco)
- Ogranicz uprawnienia „create/modify workflow” tylko do w pełni zaufanych ról (szczególnie w środowiskach shared).
- Uruchamiaj n8n w izolacji (kontener/VM), jako nie-root, z ograniczonym dostępem do filesystemu i sieci.
- Monitoruj nietypowe wykonania Code node / zmiany workflow (alerty na modyfikacje krytycznych przepływów).
Różnice / porównania z innymi przypadkami (jeśli dotyczy)
CVE-2025-68668 dotyczy „ucieczki z sandboxu” w Python Code Node opartym o Pyodide i kończy się możliwością wykonania komend na hoście przez użytkownika z uprawnieniami do edycji workflow.
Dla porównania, nagłośniona wcześniej krytyczna podatność CVE-2025-68613 (wspomniana przez THN) była związana z inną częścią systemu (mechanizmem ewaluacji wyrażeń w workflow). Wspólny mianownik to „execution context” kontrolowany przez użytkownika — i dlatego praktyczna strategia obrony powinna obejmować zarówno aktualizacje, jak i redukcję uprawnień edycyjnych oraz izolację runtime.
Podsumowanie / kluczowe wnioski
- CVE-2025-68668 to krytyczny sandbox bypass w n8n (Python Code Node / Pyodide), z realnym ryzykiem przejęcia hosta w kontekście uprawnień procesu n8n.
- Luka dotyczy wersji 1.0.0–<2.0.0 i wymaga użytkownika, który może edytować workflow — ale to nadal typowy model zagrożeń w firmach i zespołach.
- Najlepsze działanie: upgrade do 2.0.0. Jeśli nie możesz: wyłącz Code node / Python w Code node albo przejdź na task runners dla lepszej izolacji.
Źródła / bibliografia
- The Hacker News – opis CVE-2025-68668 i kontekst wydania 2.0.0 (The Hacker News)
- NVD (NIST) – karta CVE-2025-68668, wektory CVSS, opis i workaroundy (NVD)
- GitHub Security Advisory (n8n-io/n8n) – GHSA-62r4-hw23-cc8v, impact, patche i obejścia (GitHub)
- n8n Docs – Task runners (konfiguracja i external mode) (n8n Docs)
- n8n Docs – Block access to nodes (
NODES_EXCLUDE) (n8n Docs)