Krytyczna luka w Ruflo. Jak brak autoryzacji wystawił agentów AI na zdalny atak
W świecie narzędzi AI, gdzie tempo rozwoju często wygrywa z procedurami bezpieczeństwa, platforma Ruflo zaliczyła bolesne zderzenie z rzeczywistością. Eksperci z Noma Labs odkryli lukę nazwaną RufRoot (CVE-2026-59726), która w skali CVSS otrzymała maksymalną notę 10/10. To o tyle istotne, że problem dotyczy narzędzia typu self-hosted, po które chętnie sięgają deweloperzy chcący zachować pełną kontrolę nad danymi swoich agentów AI.
Dlaczego ta sprawa jest teraz tak ważna? Analiza Noma Labs wykazała, że podatność pozwalała na zdalne wykonanie dowolnego kodu bez żadnego uwierzytelnienia. W praktyce oznaczało to, że postawiony w internecie serwer Ruflo był otwartą bramą do infrastruktury firmy, umożliwiając kradzież sekretnych kluczy do modeli językowych i przejęcie bazy MongoDB. Luka uderza w samo serce zaufania do lokalnie hostowanych systemów AI, które miały być bezpieczniejszą alternatywą dla chmury.
Architektura wygody kontra bezpieczeństwo
Ruflo zyskało popularność jako projekt open source pozwalający na błyskawiczne uruchomienie centrum operacyjnego dla agentów AI w kontenerach Docker. Okazało się jednak, że domyślna konfiguracja pliku docker-compose.yml mapowała port 3001 na wszystkie interfejsy sieciowe (0.0.0.0). Jeśli administrator nie zadbał o odpowiedni firewall, krytyczne punkty styku były wystawione bezpośrednio na świat zewnętrzny.
MCP Bridge: Otwarte drzwi do serca systemu
Głównym winowajcą okazał się komponent MCP Bridge – serwer Express.js obsługujący wywołania narzędzi przez agentów. Jak zauważyli badacze z Noma Labs: „Platforma MCP Bridge udostępnia 233 narzędzia przez HTTP bez uwierzytelnienia”. W praktyce pojedyncze, nieuwierzytelnione żądanie HTTP POST wysłane na port 3001 pozwalało na pełne wykonanie poleceń wewnątrz kontenera.
Największym zagrożeniem było narzędzie ruflo__terminal_execute. Choć platforma miała mechanizmy blokujące niebezpieczne komendy w trybie autopilota, bezpośrednie wywołanie endpointu /mcp pozwalało ominąć wszelkie filtry. Napastnik zyskiwał uprawnienia użytkownika UID 1000, co wystarczyło do kradzieży kluczy API dostawców LLM oraz manipulacji historią rozmów.
Scenariusz przejęcia
Demonstracja ataku pokazała kaskadowe przejmowanie infrastruktury. Wykorzystując dostęp do terminala, badacze wyodrębnili klucze do usług AI, co pozwoliło im na tworzenie własnych, złośliwych agentów. Następnie zainstalowali trwały backdoor w kontenerze, zapewniając sobie dostęp nawet po restarcie usługi. Na koniec, by zatrzeć ślady, usunęli historię poleceń powłoki.
Reakcja twórców Ruflo była szybka. W wersji 3.16.3 wprowadzono poprawki, które radykalnie zmieniają zasady gry:
- Wprowadzono obowiązkowy token
MCP_AUTH_TOKENdla wszystkich usług sieciowych. - Narzędzie terminalowe zostało domyślnie wyłączone.
- Wdrożono restrykcyjne nagłówki CORS, by uniemożliwić ataki z poziomu przeglądarki.
Rekomendacje dla administratorów
Incydent ten to brutalna lekcja o ryzykach systemów self-hosted, które stawiają łatwość wdrożenia ponad bezpieczeństwo. Użytkownikom Ruflo zaleca się natychmiastową aktualizację. Wystawianie usług bezpośrednio na publiczne adresy IP bez reverse proxy to proszenie się o kłopoty, szczególnie w tak dynamicznym środowisku jak ekosystem narzędzi AI.
