Hacking
Flowise: έξι ευπάθειες που επιτρέπουν RCE σε servers AI
Έξι νέες RCE ευπάθειες στο Flowise επιτρέπουν εκτέλεση Python/JS μέσω CSVAgent, vm2 sandbox escapes και κακή διαχείριση MCP. Αναλύουμε τις τεχνικές, τις διορθώσεις, γιατί δεν αρκούν και τι πρέπει να κάνουν άμεσα οι διαχειριστές.
Μια σειρά από πρόσφατα αποκαλυφθείσες ευπάθειες στο Flowise —ένα δημοφιλές open‑source πλαίσιο για τη σύνθεση AI agents και workflows γύρω από LLM— επιτρέπει σε μη αυθεντικοποιημένους ή χαμηλών δικαιωμάτων επιτιθέμενους να εκτελέσουν απομακρυσμένο κώδικα (RCE) σε self‑hosted ή cloud instances που τρέχουν ευάλωτες εκδόσεις. Οι εφτά συνολικά διαδρομές επίθεσης που εντοπίστηκαν δείχνουν ότι προβλήματα σχεδιασμού και ατελείς επιδιορθώσεις αφήνουν εκτεθειμένα κρίσιμα σημεία ελέγχου σε pipelines δεδομένων και μοντέλων.
Η εικόνα γίνεται πιο ανησυχητική αν συγκρίνει κανείς τις νέες ανακαλύψεις με ιστορικά advisories στο GitHub που ήδη δείχνουν επαναλαμβανόμενα σοβαρά σφάλματα —όπως επιθέσεις account takeover μέσω αδύναμου recovery flow και εκτέλεση user‑supplied JavaScript σε αρκετούς κόμβους— υποδεικνύοντας ότι κάποιοι βασικοί μηχανισμοί sandboxing και επικύρωσης εισόδου δεν είναι επαρκώς ασφαλείς για παραγωγή.
Γιατί το Flowise κέρδισε γρήγορα προσοχή και γιατί αυτό το θέμα έχει ευρύτερο ενδιαφέρον
Το Flowise ανέβηκε γρήγορα στη λεωφόρο των GitHub projects ως εργαλείο για να συνθέτεις chatflows και agents χωρίς να γράφεις όλο το scaffolding — υποστηρίζοντας self‑hosted εγκαταστάσεις αλλά και εμπορικές cloud/enterprise επιλογές με multi‑workspace. Αυτή η πλατιά υιοθέτηση σημαίνει ότι μια ευπάθεια δεν επηρεάζει απλώς έναν μηχανικό, αλλά ενδεχομένως οργανισμούς, ομάδες R&D, και συστήματα παραγωγής που χειρίζονται ευαίσθητα δεδομένα ή μοντέλα.
Επιπλέον, το οικοσύστημα των AI tooling συχνά χρησιμοποιεί runtime εκτέλεσης κώδικα (Python/JS) για να δώσει ευελιξία στους χρήστες — για παράδειγμα preprocessing CSV, custom functions ή σύνδεση σε εξωτερικά MCP servers. Αυτή η ευελιξία όμως φέρνει και υψηλό ρίσκο όταν η εκτέλεση δεν απομονώνεται σωστά ή όταν οι validators βασίζονται σε denylists αντί για ασφαλείς containment μοντέλα.
Οι έξι διαδρομές RCE σε γενικές γραμμές
Οι ερευνητές που ανέλυσαν τις εκδόσεις 3.1.1 και 3.1.2 του Flowise κατέγραψαν έξι κύριες τεχνικές εκμετάλλευσης που καλύπτουν: εκτέλεση Python μέσω του κόμβου CSVAgent, παραβιάσεις του JavaScript sandbox (fork του vm2), κατάχρηση παραμέτρων URL και hash fragment injection, πρόσβαση σε ευάλωτες βιβλιοθήκες όπως moment, και κατάχρηση του custom MCP πρωτοκόλλου με περιβαλλοντικές μεταβλητές.
Σημαντικό είναι ότι αρκετές από αυτές τις διαδρομές παρακάμπτουν ήδη εφαρμοσμένες επιδιορθώσεις ή επαναχρησιμοποιούν επισφαλείς σχεδιαστικές επιλογές (π.χ. allow‑lists, περιορισμένες denylists, ή απενεργοποίηση sandbox χωρίς πλήρη αφαίρεση της δυνατότητας πρόσβασης). Ένα από τα bugs μάλιστα επικαλύφθηκε με το ήδη δημοσιευμένο CVE‑2026‑41264 στο CSVAgent, αποδεικνύοντας ότι η αρχική επιδιόρθωση δεν ήταν πλήρης.
CSVAgent, Pyodide και ο κίνδυνος των deserialization επιθέσεων με pandas
Ένα από τα πιο επικίνδυνα σενάρια αφορά τον κόμβο CSVAgent, ο οποίος χρησιμοποιεί Pyodide για να τρέξει κώδικα Python που προορίζεται για προεπεξεργασία CSV με βιβλιοθήκες όπως το pandas. Για ευκολία, το Flowise προσπαθεί να περιορίσει τα scripts με έναν denylist validator και απαιτώντας ο κώδικας να ξεκινάει από μια κλήση τύπου read_csv. Ωστόσο, οι ερευνητές έδειξαν πρακτικούς τρόπους να παρακαμφθούν αυτοί οι περιορισμοί.
Συγκεκριμένα, η χρήση του pandas.read_pickle επιτρέπει τη deserialization ενός pickle αντικειμένου που μπορεί να περιέχει εκτελέσιμο payload. Ένας επιτιθέμενος μπορεί να στήνει ένα base64‑encoded pickle που όταν διαβαστεί από pandas εκτελεί εντολές (π.χ. ανοίγει reverse shell με nc). Το payload μπορεί να περάσει μέσα από το πεδίο «Additional Parameters» στον CSVAgent και να ενεργοποιηθεί μέσω του API πρόβλεψης (prediction API), οδηγώντας σε πλήρη RCE στον server.
Το βασικό μάθημα εδώ είναι ότι validators που βασίζονται σε patterns ή denylists είναι εύθραυστοι απέναντι σε σύνθετες δυνατότητες των βιβλιοθηκών — ειδικά όταν αυτές οι βιβλιοθήκες έχουν λειτουργίες για serialization/deserialization, file I/O ή δικτυακές κλήσεις.
Το JavaScript sandbox, το vm2 και οι πολλαπλές αποδράσεις
Για την εκτέλεση custom JavaScript functions, το Flowise χρησιμοποίησε fork του vm2, το οποίο είναι ήδη γνωστό για συνεχή ανακάλυψη νέων escape vectors. Αν και ορισμένοι περιορισμοί επιβλήθηκαν (περιορισμός εξαρτήσεων και modules), το sandbox επέτρεπε explicit modules όπως axios, moment και node‑fetch, προσφέροντας ένα πλούσιο surface για εκμετάλλευση.
Μια παλαιότερη ευπάθεια στο vm2 (CVE‑2026‑22709) επέτρεπε αποδραση μέσω κατασκευασμένων Error stacks και τη χρήση child_process.execSync. Παρά την προσπάθεια σκληρής ρύθμισης του sandbox, οι ερευνητές βρήκαν νέα διαδρομή που εκμεταλλεύεται το γνωστό CVE‑2022‑24785 του moment (path traversal), σε συνδυασμό με τον uploader του document store του Flowise ώστε να γράφει ένα αρχείο rce.js υπό .flowise/storage και να το φορτώνει μέσω του vulnerable module.
Επιπλέον, ακόμα κι όταν το vm2 απενεργοποιήθηκε από προεπιλογή, παρέμεινε «προσβάσιμο» μέσω κόμβων όπως AgentAsTool, ChatflowTool και ExecuteFlow που κάλεσαν την executeJavaScriptCode με useSandbox=false. Μια άλλη τεχνική έδειξε ότι παράμετροι όπως baseURL υπέστησαν μόνο επιφανειακό έλεγχο (isValidURL) που αγνοούσε το hash fragment, επιτρέποντας την έγχυση JavaScript μέσω του πεδίου fragment και την εκτέλεση μέσα στον υποτιθέμενα ασφαλή χώρο.
Model Context Protocol (MCP) και εκμετάλλευση περιβαλλοντικών μεταβλητών
Το τρίτο μεγάλο πεδίο προβλημάτων αφορά το custom MCP node — το Model Context Protocol integration μέσω του modelcontextprotocolsdk. Από προεπιλογή, το Flowise επέτρεπε την unsafe stdio μεταφορά (CUSTOMMCPPROTOCOL=stdio), που σημαίνει ότι εξωτερικοί MCP servers μπορούσαν να συνδεθούν και να επικοινωνήσουν μέσω stdin/stdout.
Παρά τις προσπάθειες περιορισμού των εκτελούμενων εντολών (node, npx, python, python3, docker) και την denylist ορισμένων επικίνδυνων μεταβλητών (π.χ. PATH, NODEOPTIONS), οι ερευνητές χρησιμοποίησαν τεχνικές παλαιότερης έρευνας για εκμετάλλευση περιβάλλοντος, όπως το trick με PYTHONWARNINGS/BROWSER, και την ανάγνωση του /proc/self/environ. Με κατάλληλη ρύθμιση του HOME και τροποποίηση των data streams, το περιεχόμενο του environment μπορούσε να γίνει έγκυρος JavaScript κώδικας που ανοίγει shell, οδηγώντας σε RCE μέσω node ή python MCP servers.
Αυτή η κατηγορία επιθέσεων δείχνει πόσο επικίνδυνο είναι να επιτρέπεις stdio transport χωρίς ισχυρή απομόνωση διεργασιών και αυστηρή διαχείριση των περιβαλλοντικών μεταβλητών και αρχείων του συστήματος.
Τι έφτιαξε το Flowise και γιατί δεν είναι αρκετό
Σε αντιδράσεις, το Flowise εισήγαγε πολλαπλές αλλαγές: αφαίρεσε τους κόμβους CSVAgent και AirtableAgent λόγω προβλημάτων με NFKC normalization, απέσυρε το moment από τις επιτρεπόμενες vm2 εξαρτήσεις, εισήγαγε allowlist για περιβαλλοντικές μεταβλητές και άλλαξε το default MCP transport από stdio σε SSE. Αυτά είναι βήματα προς τη σωστή κατεύθυνση, αλλά δεν αντιμετωπίζουν τη ριζική αιτία.
Οι ερευνητές υπογραμμίζουν ότι το vm2 παραμένει επικίνδυνο λόγω της συνεχούς ανακάλυψης νέων escape vectors και προτείνουν μετανάστευση σε πιο αξιόπιστα isolation primitives όπως isolated‑vm ή πλήρη process isolation/containers για multitenant περιβάλλοντα. Επιπλέον, οι προσωρινές επιδιορθώσεις με denylists δεν υποκαθιστούν ένα σωστό security‑by‑design μοντέλο.
Πρακτικές οδηγίες για διαχειριστές, developers και ομάδες ασφαλείας
Οι οργανισμοί που τρέχουν Flowise πρέπει άμεσα να αναλάβουν ενέργειες: να αναβαθμίσουν στις τελευταίες ασφαλείς εκδόσεις, να σκανάρουν για ανοιχτά endpoints όπως /api/v1/prediction και /api/v1/node‑custom‑function, και να περιορίσουν ή να απενεργοποιήσουν κόμβους που επιτρέπουν custom Python/JS execution. Για production deployments, οι administrators πρέπει να εφαρμόσουν network segmentation, περιορισμό outbound traffic, και ισχυρή πολιτική file‑uploading.
Επιπλέον, συστήνεται:
- Αποφυγή ενεργοποίησης CUSTOMMCPPROTOCOL=stdio χωρίς αυστηρό host/network hardening.
- Χρήση containerization ή firejail/namespace isolation για κόμβους που τρέχουν εξωτερικό κώδικα.
- Επιβολή allowlists αντί για denylists για βιβλιοθήκες/μονάδες και περιβαλλοντικές μεταβλητές.
- Παρακολούθηση ασυνήθιστων pattern στο API, integrity checks στα storage αρχεία και audit logging για χρήστες που ανεβάζουν scripts ή δεδομένα.
Τέλος, κάθε οργανισμός πρέπει να προετοιμάσει playbook για incident response που να περιλαμβάνει γρήγορο isolating ενός compromised node, forensic συλλογή logs και προσωρινή αλλαγή credentials/keys, καθώς οι επιθέσεις αυτού του τύπου μπορούν να οδηγήσουν σε exfiltration ευαίσθητων δεδομένων ή τροποποίηση pipeline αποτελεσμάτων.
Τι σημαίνει αυτό στην πράξη για χρήστες και επιχειρήσεις
Στην πράξη, οι ευπάθειες αυτές δεν αφορούν μόνο «τεχνικούς» κινδύνους αλλά και επιχειρησιακούς: ένας πλήρης server compromise μπορεί να αποκαλύψει training data, API keys, μοντέλα και να αλλοιώσει outputs που παράγουν κρίσιμες αποφάσεις. Για εταιρείες που χρησιμοποιούν Flowise σε περιβάλλοντα παραγωγής ή σε workflows που χειρίζονται προσωπικά δεδομένα, ο κίνδυνος μεταφράζεται απευθείας σε νομική και reputational έκθεση.
Επιπλέον, το πρόβλημα αναδεικνύει ένα πιο γενικό μάθημα για το AI DevOps: τα εργαλεία που μειώνουν την τριβή στην ανάπτυξη agents και pipelines πρέπει να σχεδιάζονται με ασφαλέστερα defaults, αφού ευκολίες όπως το να «τρέχεις arbitrary code» είναι ακριβώς το είδος λειτουργικότητας που επιθέσεις εκμεταλλεύονται.
Για όποιον διαχειρίζεται ή αναπτύσσει AI workflows, το άμεσο συμπέρασμα είναι σαφές: αναβαθμίστε, κλειδώστε endpoints, απομονώστε εκτελέσεις και υιοθετήστε πιο αυστηρά μοντέλα απομόνωσης πριν η ευελιξία γίνει βάρος που μετατρέπεται σε συμβάν ασφαλείας.