Podatność w Flowise (przed wersją 3.1.3) pozwala atakującemu ominąć walidator kodu Python przy użyciu znaków Unicode wizualnie podobnych do liter ASCII (homoglify), co umożliwia wykonanie dowolnego kodu na serwerze hostującym Flowise. Ze względu na możliwość pełnego RCE na hoście bez wymagania uwierzytelnienia, podatność jest oceniana jako krytyczna.
▸ Pokaż oryginał (EN)
Flowise is a drag & drop user interface to build a customized large language model flow. Prior to 3.1.3, Flowise validatePythonCodeForDataFrame in packages/components/src/pythonCodeValidator.ts can be bypassed with Unicode homoglyph identifiers, allowing arbitrary Python execution inside Pyodide and full OS command execution on the Flowise host via Pyodide js module interop. The validator gates pyodide.runPythonAsync in packages/components/nodes/agents/CSVAgent/CSVAgent.ts and packages/components/nodes/agents/AirtableAgent/AirtableAgent.ts with an ASCII word-boundary blacklist. JavaScript regex word boundaries are ASCII-only, while Python 3 NFKC-normalizes identifiers at parse time, so homoglyph forms such as __cl𝐚ss__, __subcl𝐚sses__, __b𝐚se__, and __b𝐮iltins__ bypass the blacklist and are parsed as their ASCII equivalents. This issue is fixed in version 3.1.3.
Funkcja `validatePythonCodeForDataFrame` w pliku `packages/components/src/pythonCodeValidator.ts` stosuje czarną listę opartą na wyrażeniach regularnych JavaScript, które obsługują granice słów wyłącznie dla znaków ASCII. Python 3 normalizuje identyfikatory zgodnie ze standardem NFKC w czasie parsowania, przez co homoglify takie jak `__cl𝐚ss__`, `__subcl𝐚sses__`, `__b𝐚se__` czy `__b𝐮iltins__` nie są wykrywane przez walidator, lecz interpreter Pythona traktuje je jak ich standardowe odpowiedniki ASCII. Dzięki temu atakujący może wstrzyknąć kod Pythona wykonywany przez `pyodide.runPythonAsync` w węzłach CSVAgent i AirtableAgent. Poprzez interoperacyjność modułu `js` w Pyodide możliwe jest następnie wykonanie poleceń systemowych bezpośrednio na hoście Flowise.
Atakujący może wykonać dowolny kod Python wewnątrz środowiska Pyodide, a następnie — poprzez mechanizm interop z modułem `js` — uruchomić polecenia systemowe na hoście z pełnym dostępem do zasobów systemu operacyjnego (RCE).
Należy zaktualizować Flowise do wersji 3.1.3 lub nowszej, w której błąd został naprawiony (commit f4e2794f6a576b94578f2fdafbf49c2fb304626c). Jeśli natychmiastowa aktualizacja nie jest możliwa, należy rozważyć wyłączenie lub ograniczenie dostępu do węzłów CSVAgent i AirtableAgent.
Flowise w wersjach wcześniejszych niż 3.1.3 — dotyczy węzłów CSVAgent oraz AirtableAgent korzystających z `pyodide.runPythonAsync`.
Poprawka została wprowadzona w wersji 3.1.3 i jest dostępna w repozytorium GitHub FlowiseAI. Problem został zgłoszony i udokumentowany jako GitHub Security Advisory GHSA-52fh-8v99-63c2.
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X