
RufRoot: satu permintaan tanpa autentikasi ke bridge MCP Ruflo menjalankan perintah, mencuri kunci, dan meracuni memori AI
- OrcaBARUOrcaCyber: MiniMax M3.1 Flash Abliterated / Uncensored2026-10-29101 tok/s
- OrcaBARUOrcaCyber: GLM 5.3 Flash Abliterated / Uncensored2026-10-27$0.80 / $1.60 per 1 juta token · 103 tok/s
- OrcaBARUOrcaCyber: Qwen3.8 Flash Next Abliterated / Uncensored2026-10-26$0.80 / $1.60 per 1 juta token · 283 tok/s
- OrcaBARUOrcaCyber: MiMo V2.6 Flash Abliterated / Uncensored2026-10-26$0.80 / $1.60 per 1 juta token · 93 tok/s
- MoonshotBARUMoonshotAI: Kimi K3.1 Pro2026-10-2446Kecerdasan
- OrcaBARUOrcaCyber: DeepSeek V4.1 Flash Abliterated / Uncensored2026-10-23$0.80 / $1.60 per 1 juta token · 107 tok/s
- minimaxBARUMiniMax: M3.1 Flash2026-10-1929Kecerdasan
- OrcaBARUOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 per 1 juta token · 70 tok/s
- deepseekBARUDeepSeek: DeepSeek V4.1 Flash 10172026-10-1733Kecerdasan
- DeepSeekBARUDeepSeek: DeepSeek V4.1 Flash2026-10-1740Kecerdasan
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1 juta token · 96 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2955Kecerdasan
- anthropicAnthropic: Claude Sonnet 5.52026-09-2854Kecerdasan
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1 juta token · 168 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2228Kecerdasan
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Kecerdasan
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Kecerdasan
- xiaomiXiaomi: MiMo-V2.6-Flash2026-09-2127Kecerdasan
- xiaomiXiaomi: MiMo-V2.6-Pro2026-09-2130Kecerdasan
- xAIGrok 4.72026-09-2134Kecerdasan
Pada 30 Juni 2026, Noma Labs menyerahkan kepada pemelihara Ruflo sebuah eksploit yang berfungsi terhadap proyek itu sendiri. Lengan riset Noma Security telah menemukan bahwa Ruflo — platform orkestrasi agen sumber terbuka yang sebelumnya dirilis sebagai Claude Flow — menyertakan deployment Docker Compose bawaan yang mengikat jembatan Model Context Protocol ke port 3001 pada setiap antarmuka jaringan dan tidak meminta autentikasi sama sekali. Satu permintaan HTTP saja ke /mcp endpoint sudah cukup untuk menjalankan perintah shell di dalam kontainer sebagai node pengguna, dan dari shell tersebut penyerang dapat membaca setiap kunci API penyedia LLM di lingkungan, mengambil seluruh percakapan tersimpan, memunculkan kawanan agen yang ditagihkan ke kunci korban, dan menulis instruksi ke AgentDB penyimpanan pembelajaran yang akan terus mengarahkan jawaban AI bagi setiap pengguna instans tersebut. Cacat ini adalah CVE-2026-59726, dijuluki RufRoot, diberi skor CVSS 10.0 dan diperbaiki pada versi 3.16.3 dalam waktu 24 jam. Tidak ada sumber yang kami baca melaporkan bahwa cacat ini dieksploitasi di alam liar. Catatan arsip itu sendiri untuk cacat ini, beserta daftar sumber dan tingkat keyakinannya, berada di arsip insiden AI, di samping entri MCP dan infrastruktur lain yang dicatat di sekitarnya.
Default yang membuka pintu
Ruflo adalah yang disebut Noma Labs sebagai meta-harness agen: lapisan self-hosted untuk kawanan hingga 100 agen, dibuat untuk Claude Code dan OpenAI Codex, dengan memori jangka panjang dan server MCP bawaan untuk pemanggilan alat. Penyiapan yang umum adalah seperti yang dijelaskan Noma — kloning repositori, tambahkan kunci API LLM, jalankan docker compose up -d. Berkas compose default proyek mengikat bridge ke 0.0.0.0 pada port 3001 dan mengikat MongoDB pendampingnya ke semua antarmuka pada 27017, dengan autentikasi Mongo dimatikan. Seberapa jauh jangkauannya bergantung pada firewall, security group, dan segmentasi jaringan di sekitar deployment; rumusan Noma sendiri adalah bahwa setiap instans yang dapat dijangkau melalui jaringan sepenuhnya dapat dieksploitasi tanpa autentikasi.
MCP bridge adalah server Express.js yang mengubah permintaan JSON-RPC yang masuk melalui HTTP menjadi panggilan terhadap pustaka alat internal Ruflo. Pada baris rentan, pustaka tersebut menyimpan 233 alat yang mencakup akses shell, operasi basis data, manajemen agen, dan penyimpanan memori. Tulisan Noma blak-blakan tentang apa yang membuatnya demikian: "MCP Bridge bukan antarmuka debug tambahan yang sembarangan; melainkan, ini adalah sistem saraf pusat Ruflo. Setiap panggilan alat, setiap tindakan agen, setiap operasi memori melewati MCP Bridge."
Lapisan autentikasi tidak ada, bukan sekadar lemah. POST /mcp dan POST /mcp/:group mengimplementasikan protokol MCP JSON-RPC dan meneruskan permintaan tools/call yang masuk langsung ke fungsi internal executeTool(). Ruflo memang memelihara daftar blokir perintah, AUTOPILOT_BLOCKED_PATTERNS, yang dimaksudkan untuk menghentikan operasi shell berbahaya, tetapi advisory GitHub menyatakan secara eksplisit bahwa daftar itu "hanya ditegakkan dalam alur autopilot. POST /mcp dan POST /mcp/:group melewatinya." Satu panggilan tanpa autentikasi yang menyebut ruflo__terminal_execute karenanya menjalankan perintah arbitrer sebagai pengguna node pada kontainer, yang tercatat dalam advisory sebagai uid 1000, tanpa memerlukan token, sesi, atau interaksi sebelumnya. Tidak diperlukan eskalasi hak istimewa untuk hal yang terjadi berikutnya: kredensial, API agen, penyimpanan memori, dan basis data semuanya dapat dijangkau dari shell tersebut.
Rantai, dalam delapan langkah
Noma Labs menerbitkan proof of concept delapan langkah dan mengonfirmasi setiap langkah secara langsung terhadap deployment Ruflo default di AWS EC2, menggunakan callback out-of-band ke Burp Collaborator untuk memverifikasi eksekusi dan eksfiltrasi. Langkah-langkah tersebut bukan konsekuensi spekulatif yang ditumpuk pada bug teoretis; itu adalah urutan yang didemonstrasikan, dan bagian remediasi dalam advisory ditulis untuk operator yang mungkin sudah berada di dalamnya.

Rekonaisans dilakukan lebih dulu karena daftar alat bersifat publik bagi pemanggil mana pun: tools/list mengembalikan semua 233 entri tanpa kredensial. Eksekusi perintah juga dapat dilakukan melalui endpoint yang sama, dan proof of concept Noma mengonfirmasinya dengan callback out-of-band alih-alih menyimpulkannya dari isi respons. Langkah lingkungan adalah langkah yang mengubah kompromi host menjadi masalah penagihan dan kehilangan data: file compose meneruskan kunci penyedia ke dalam kontainer dan proses backend mewarisi seluruh lingkungan melalui { ...process.env }, sehingga satu printenv saja membocorkan semuanya. Kunci-kunci itu kemudian memungkinkan ruflo__swarm_init dan ruflo__agent_spawn untuk memulai swarm yang dikendalikan penyerang yang menghabiskan kuota dan komputasi korban.
Langkah kelima adalah langkah yang bertahan lebih lama daripada intrusi tersebut. Menggunakan ruflo__agentdb_pattern-store, Noma menanam kebijakan kepatuhan SOC2 palsu yang menginstruksikan AI untuk menyematkan URL yang dikendalikan penyerang ke dalam setiap skrip deployment yang selanjutnya dihasilkannya. Karena AgentDB ada untuk menyimpan secara persisten pola semacam ini agar perilaku agen membaik di berbagai sesi, entri yang disuntikkan tersebut berperilaku sebagaimana sistem itu dirancang untuk berperilaku. "Percakapan di masa depan menghasilkan keluaran yang dipengaruhi penyerang, dan pengguna tidak punya cara untuk membedakannya," demikian pernyataan dalam tulisan Noma. Dark Reading, yang melaporkan cacat tersebut pada 29 Juli, menyampaikan perbedaan itu kepada seorang pakar eksternal: John Gallagher, wakil presiden di Viakoo, menyebutnya sebagai kelas masalah yang berbeda: "Ini bukan mengeksploitasi celah perangkat lunak, ini adalah keracunan memori."
Langkah-langkah tersisa adalah pasca-eksploitasi konvensional, dijalankan dengan kemudahan yang tidak biasa. MongoDB di jaringan Docker internal tidak memiliki autentikasi, sehingga para penyerang memasang klien di /tmp, mengekspor percakapan dan mengirimkannya keluar. Persistensi diperoleh dengan menulis /app/beacon.js, menambahkan baris require('./beacon.js') ke index.js dan mematikan PID 1, setelah itu kebijakan restart Docker mengembalikan kontainer dengan beacon aktif. Langkah terakhir adalah menghapus riwayat shell. Semua itu berawal dari satu permintaan tanpa autentikasi; tidak ada apa pun dalam deployment default yang menghentikan rantai tersebut pada titik mana pun.
Perbaikan, dan bagian yang tidak dapat dijangkau oleh patch
Pengelola merilis Ruflo 3.16.3 dalam 24 jam setelah pengungkapan pada 30 Juni, dan GitHub menerbitkan advisory GHSA-c4hm-4h84-2cf3 pada 1 Juli 2026. Perbaikan, yang dilacak di repositori sebagai ADR-166 dan digabungkan dalam pull request 2521, mengubah default alih-alih sekadar menambahkan pemeriksaan:
• Jembatan MCP mengikat 127.0.0.1 secara default; pengikatan publik memerlukan MCP_AUTH_TOKEN, dan proses keluar dengan pesan fatal saat boot jika token tidak ada.
• Middleware token Bearer dengan perbandingan waktu konstan berada di depan bridge.
• terminal_execute dibatasi di sisi server di balik MCP_ENABLE_TERMINAL=true, nonaktif secara default, dan gerbangnya diterapkan secara identik pada /mcp, /mcp/:group dan alur autopilot — tautan yang hilang yang telah memungkinkan rantai yang terungkap mencapai shell.
• MongoDB memerlukan autentikasi, dengan kata sandi root yang diperlukan agar container dapat boot.
• Container bridge menjalankan sistem berkas root hanya-baca dengan tmpfs, allowlist CORS menggantikan wildcard, dan pengunci regresi CI mencakup konfigurasi statis serta perilaku runtime.
Tidak satu pun dari itu menghapus entri yang sudah tertulis ke dalam AgentDB. Peringatan itu memberi tahu operator dari instans mana pun yang terekspos untuk segera memasang firewall pada port 3001 dan 27017, merotasi kunci penyedia, mengaudit penyimpanan pola untuk entriagentdb_pattern-store yang disuntikkan dan menghapusnya, mengaudit MongoDB untuk mendeteksi manipulasi, serta membangun ulang kontainer dari image bersih. Peringatannya luar biasa lugas: "Penyebaran ulang yang telah ditambal saja TIDAK membatalkan peracunan." Tulisan Noma sampai pada kesimpulan yang sama — mengaudit penyimpanan pola adalah bagian dari remediasi, dan patch bukanlah bagian darinya.
Alasannya bersifat struktural, bukan karena kelalaian. Penyimpanan pola yang membentuk keluaran model di masa depan tidak punya cara untuk membedakan instruksi sah yang telah dipelajari dari instruksi yang ditanam penyerang; keduanya datang sebagai pola, dan sistem dibangun untuk mempercayainya. Hal itu mengubah kerentanan jaringan menjadi masalah integritas data dengan backlog yang tidak diketahui, dan itu berarti pertanyaan bagi operator bukan hanya apakah port dapat dijangkau, tetapi apa yang kini tersimpan di memori.

Apa yang sudah mapan, dan apa yang belum
Catatan teknis di sini bersifat primer dan konsisten. Advisory tersebut menyebutkan paket yang terdampak (npm ruflo di bawah 3.16.3), versi yang telah ditambal, endpoint persis, pengguna kontainer, dan dua port; catatan rilis pengelola menggambarkan rantai yang sama; tulisan Noma menyediakan detail proof-of-concept; dan media independen — The Hacker News dan Dark Reading pada 29 Juli 2026, SecurityWeek pada 30 Juli — melaporkan mekanisme yang sama tanpa menambahkan rincian yang saling bertentangan. Catatan riset Cloud Security Alliance tertanggal 5 Agustus 2026 menyatakan ulang urutan tersebut dan menempatkannya bersama kerentanan MCP dan orkestrasi agen tanpa autentikasi yang lebih awal yang telah dilacaknya. Arsip memberi catatan tersebut tingkat keyakinan A, tidak dipersoalkan, dan menandainya sebagai tonggak; tingkat keparahan untuk catatan tersebut tinggi, berbeda dari skor CVSS itu sendiri.
Satu detail penilaian perlu dinyatakan secara tepat, karena dua dokumen utama tidak sepakat. GHSA-c4hm-4h84-2cf3 mencantumkan CVSS 10.0 pada vektor AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — perubahan cakupanlah yang mendorongnya ke nilai maksimum. Salinan advisory yang sama di halaman rilis 3.16.3 menggambarkan skor tersebut sebagai "CVSS 9.8 kritis". Catatan National Vulnerability Database, yang diperiksa pada 30 Oktober 2026, diterbitkan pada 9 Juli 2026, dan ditandai Ditunda, mencantumkan nilai GitHub 10.0 sebagai metrik sekunder dan tidak memiliki skor buatan NVD sendiri. Kami tidak menemukan penjelasan untuk angka 9.8 tersebut, dan tulisan ini tidak menyelesaikannya.
Angka adopsinya lebih kecil. Noma Labs saat itu menggambarkan proyek tersebut sebagai memiliki lebih dari 67.000 bintang GitHub, sekitar 10 juta unduhan, dan sekitar 1 juta pengguna aktif; The Hacker News, sebagaimana dirangkum oleh Cloud Security Alliance, menyebut lebih dari 66.500 bintang. Jumlah unduhan dan pengguna merupakan data Noma sendiri dan tidak diverifikasi secara independen. Jumlah bintang repositori pada 30 Oktober 2026 adalah 80.198 — sebuah pemeriksaan atas jangkauan proyek, bukan ukuran eksposur, dan tidak ada sumber yang telah menerbitkan berapa banyak deployment yang benar-benar dapat dijangkau dari suatu jaringan.

Yang tidak terbukti adalah bagian yang paling mudah dibesar-besarkan. Baik Noma, pengelola, maupun media mana pun yang kami baca tidak mengklaim bahwa celah tersebut dieksploitasi di dunia nyata, dan arsip tidak mencatat kerugian nyata untuk entri ini. Proof of concept Noma dijalankan terhadap deployment yang dikendalikan para peneliti di EC2, yang menunjukkan apa yang diizinkan oleh instalasi default, bukan apa yang dialami instans produksi tertentu. Belum ada jumlah deployment Ruflo yang terekspos ke internet yang dipublikasikan, dan belum ada operator yang mempublikasikan hasil audit AgentDB, sehingga populasi yang terdampak dan jumlah memori tercemar yang ada sama-sama tidak diketahui. Saran Cloud Security Alliance untuk memperlakukan deployment yang terekspos sebagai kompromi total adalah postur risiko yang dibenarkan oleh eksploitasi tanpa interaksi; itu bukan bukti bahwa telah terjadi pembobolan.
Mengapa arsip itu menandainya sebagai tonggak sejarah
Penanda tonggak arsip ini bertumpu pada sesuatu yang lebih spesifik daripada skor maksimum. Bug eksekusi kode jarak jauh CVSS 10.0 di layanan self-hosted populer adalah genre yang familier, dan perbaikannya di sini tiba dalam 24 jam. Yang membedakan RufRoot adalah bahwa eksploit tersebut berakhir di pipeline pembelajaran AI itu sendiri, tempat remedi konvensional — tingkatkan versi, deploy ulang, tutup port — membiarkan instruksi yang disuntikkan tetap di tempatnya dan masih membentuk jawaban. Catatan Cloud Security Alliance menilainya sebagai studi kasus dalam pola yang telah didokumentasikannya di berbagai perangkat agen, termasuk rantai checkpoint LangGraph dan permukaan AutoGen Studio tanpa autentikasi, dan berargumen bahwa memori persisten yang digunakan untuk membentuk perilaku agen harus diperlakukan sebagai penyimpanan data sensitif di bawah pemantauan integritas, bukan sebagai cache.
Pembingkaian ulang itu adalah inti praktisnya. Artefak yang terlihat dari insiden ini adalah dependensi yang telah ditambal dan sebuah advisory yang diterbitkan; yang tak terlihat adalah pola apa pun yang mungkin masih tersimpan dalam AgentDB milik seorang operator, dan tidak ada alat atau signature terbitan yang dapat membedakan kebijakan hasil pembelajaran yang sah dari kebijakan yang disisipkan secara sengaja. Bagi organisasi yang menjalankan file compose default di balik jaringan yang dapat dijangkau, respons yang berguna adalah respons yang diberikan oleh Noma maupun advisory tersebut: anggap kunci-kunci itu telah dibaca, putar ulang kunci tersebut, dan periksa memori sebelum memercayai jawaban yang dihasilkannya.
