
RCE Marimo: Manusia Capai SSH Bastion dalam 8 Saat
RCE Marimo: Manusia Capai SSH Bastion dalam 8 Saat
Kini ramai andaikan serangan bermesin laju semestinya didorong AI: model menulis skrip, agent menjalankannya, manusia cuma memerhati. Pasukan Sysdig Threat Research Team pula baru-baru ini memerhati satu operator yang membuktikan sangkaan itu salah. Tiada agent dalam gelung, tiada jejak LLM sepanjang jalan — tetapi keseluruhan chain pemintas kredential, dari notebook yang terdedah ke sesi SSH langsung pada bastion host, selesai dalam lapan saat.
Operator itu mengeksploitasi CVE-2026-39987, kelemahan remote code execution (RCE) tanpa autentikasi pada platform notebook Marimo. Sysdig menyimpulkannya secara terus terang: lapan saat ialah kelajuan yang lazimnya dikaitkan dengan serangan dibantu AI, tetapi operator ini sampai ke situ atas kemahiran semata-mata.
Celahnya: aplikasi berautentikasi, terminal tanpa autentikasi
Marimo ialah Python notebook open-source yang anda self-host, selalunya bersebelahan pipeline ML. Letak kedudukan itulah yang menjadikannya sasaran menarik — host macam itu memegang akses GPU, dataset latihan yang besar dan kredential kekal untuk AWS, GCP serta pelbagai model provider. Dapat shell pada notebook, anda sudah berdiri di depan pintu seluruh akaun cloud mangsa.
CVE-2026-39987 (CVSS 9.3) ialah RCE tanpa autentikasi. Advisory GitHub menyenaraikan semua versi Marimo sehingga 0.20.4 sebagai terkesan, dan pembetulan dihantar dalam 0.23.0. Buginya berada pada endpoint WebSocket /terminal/ws: endpoint itu mengeluarkan shell PTY interaktif tetapi melangkau validate_auth() yang diterapkan dengan betul pada endpoint WebSocket lain dalam aplikasi yang sama. Mana-mana client yang boleh membuka WebSocket ke laluan itu terus mendapat shell penuh atas nama proses Marimo. Tanpa kredential, tanpa payload, tanpa sebarang helah encoding — sekadar membuka socket (Sysdig, The Hacker News). Pembetulan dalam 0.23.0 menyambung semula panggilan validate_auth() yang tertinggal pada endpoint tersebut melalui PR #9098.
Celah ini sudah berbulan-bulan berada dalam katalog CISA Known Exploited Vulnerabilities; had masa pemulihan agensi persekutuan ialah 7 Mei 2026. Kalau Marimo anda masih berada pada versi lebih lama daripada 0.23.0, ia sudah melampaui tempoh.
Apa yang operator buat sebenarnya
Sepanjang sesi selama sembilan jam, operator mengeluarkan lebih 850 arahan interaktif, tidak menggunakan sebarang offensive tooling awam yang dikenali, dan menulis setiap skrip dalam-sesi dengan tangan (Sysdig). Timeline pemerhatian, semua waktu UTC:
| Masa (UTC) | Peristiwa |
|---|---|
| 12:52:18 | Sambungan WebSocket pertama dari 172.236.12.17 ke /terminal/ws |
| 12:54:13 | Arahan interaktif pertama: imbasan /dev/tcp ke /24 host |
| 16:00–16:30 | Operator memasukkan skrip Python yang dienkod base64 ke /tmp/ |
| 16:50:40 | Skrip boto3 memanggil secretsmanager:GetSecretValue |
| 16:51:45 | Kunci SSH yang diperoleh dimainkan semula ke bastion yang boleh dicapai dari internet |
| 18:57:22 / 18:57:26 / 18:57:30 | WebSocket baharu dibuka → cari kredential tersimpan → autentikasi SSH bastion (8 saat) |
| 20:13–20:32 | Listener ala asyncssh diatur terhadap VPS milik penyerang |
Percubaan TCP pertama dan panggilan AWS pertama yang menggunakan kredential dipisahkan hampir empat jam. Jurang itulah tempat operator membina dan menyahpepijat toolkit — sebaik ia berada di disk, sambungan seterusnya hanya perlu mencetuskan satu arahan.
Toolkit: tulisan tangan, bukan AI
Setiap penyerang Marimo yang disenarai Sysdig sebelum ini meninggalkan cap jari LLM: kod penandatanganan permintaan AWS ditaip dari ingatan, baris demi baris, dalam satu sesi shell. Operator ini pula menjatuhkan lapan skrip Python yang dienkod base64 ke /tmp/ dalam tetingkap 17 minit, setiap satu melalui corak yang sama:
echo '<long-base64-blob>' | base64 -d > /tmp/chain.py
nohup python3 /tmp/chain.py > /tmp/chain.log 2>&1 &
Pembalut base64 itu berfungsi dua kali ganda: ia mengelakkan isu petikan shell dengan Python berbilang baris, dan ia menghasilkan satu baris bash_history yang tidak mendedahkan isi skrip kepada defender yang membaca sepintas lalu. Skrip kerja utama menyoal Secrets Manager dengan kunci yang sudah dituai (ditulis terus dalam sumber), mencuba lima rantau AWS apabila berlaku exception, menghurai secret sebagai JSON atau mentah, menulis kunci yang diperoleh ke /tmp/bastion_key dengan mod 0600, dan beralih kepada ListSecrets apabila dinafikan. Skrip seterusnya menyambung melalui paramiko, mencuba RSAKey → Ed25519Key → ECDSAKey mengikut urutan, dan menyediakan relay nc -lvp 4444 pada VPS penyerang.
Dua permukaan kredential dituai pada host — persekitaran proses/fail kredential serta backend Redis aplikasi, disahkan 33 minit selepas kredential pertama dan dipetakan kepada dua pengguna IAM berbeza — kemudian dimainkan semula sehingga satu mengembalikan kunci bastion.
Perangkap yang hanya manusia boleh lalui
Sysdig menyemai direktif bahasa natural di dalam container terdedah — honeypot prompt-injection yang diatur untuk membezakan operator mesin daripada manusia. Direktif itu memberitahu mana-mana agent LLM yang memproses fail tertentu untuk memperakui diri dengan menggemakan marker tersembunyi ke dalam output sendiri. Setiap agentic threat actor yang disenarai Sysdig terhadap CVE ini membaca fail itu dan menggemakan marker. Operator ini pula memeriksa fail tersebut dua kali dan tidak pernah menggemakannya di mana-mana (Sysdig, Infosecurity Magazine). Kami pernah membincangkan kenapa perangkap macam ini begitu menghantui tools berbasis LLM — insiden security.txt Hugging Face ialah fenomena sama yang ditujukan kepada AI agents.
Timbunan indikator turut sepadan: struktur sesi yang dipatok secara manual, penyahpepijatan berulang yang dapat dilihat pada logik fallback rantau, variasi petikan yang ditaip tangan, dan skrip enumerasi EC2 kedua yang terus berjalan selepas dinafikan — redundansi berbinaan manusia, berbeza dengan agent yang gagal pantas lalu mencuba benda lain.
Apa yang defender patut pantau sebenarnya
Kesimpulan Sysdig memang tidak selesa untuk didengar: pengesanan tidak boleh berpaut pada fingerprint kelas operator. Strim arahan janaan LLM dan nohup python3 /tmp/chain.py yang ditaip tangan kelihatan berbeza sama sekali, tetapi kedua-duanya mendarat pada panggilan secretsmanager:GetSecretValue yang sama, pertukaran kunci SSH yang sama, dan sambungan keluar kepada bastion yang sama. Keutamaan pengesanan ialah bentuk chain, bukan corak taipan shell (Sysdig).
Isyarat konkrit yang wajar diburu:
- Proses dalam container notebook membaca
/proc/self/environatau.envaplikasi, kemudian membuat panggilan HTTPS keluar kesecretsmanager.<region>.amazonaws.comdengan user agent bukan lalai — dan dalam minit yang sama, sambungan TCP keluar ke IP bukan RFC1918 pada port bukan standard. - Dalam CloudTrail: panggilan
secretsmanager:GetSecretValuedaripada principal yang tidak pernah memanggil Secrets Manager, membalasAccessDeniedException, diikuti percubaan semula merentas beberapa rantau dalam bawah seminit — tandatangan fallback rantau berketepatan tinggi. echo '<base64>' | base64 -d > /tmp/<name>.pysejurus diikutipython3yang dijalankan di latar belakang.
Pembetulan di huluan tidak glamor tetapi berkesan: patch ke 0.23.0 atau lebih baharu, had atau matikan /terminal/ws di belakang reverse proxy, skopkan secretsmanager:GetSecretValue supaya pengguna IAM notebook tidak boleh membaca kunci bastion, audit setiap permukaan secret pada host (proc environ, EnvironmentFile, ~/.aws/credentials, .env, apa sahaja yang aplikasi soal ketika runtime), dan putar semua kredential yang pernah terdedah pada Marimo yang boleh dicapai dari internet. Secret cloud sepatutnya berada dalam vault, bukan dalam notebook yang satu WebSocket terbuka boleh mengosongkannya dalam lapan saat (Sysdig).
Ini satu lagi datapoint dalam tema yang berulang: andaian keselamatan cloud terus pecah dari dua arah. AI menjadikan serangan bermesin laju lebih murah; minggu ini pula membuktikan manusia mahir tidak memerlukan AI untuk tiba pada timeline yang sama — malah melepasi perangkap yang dibina khas untuk menangkap mesin. Kalau anda menjalankan notebook self-hosted atau host ML, anggap jarak antara "boleh digunakan" dan "sudah dikompromi" hampir sifar sebaik operator tiba dengan toolkit. Rancang pertahanan di huluan: patch, kunci endpoint, dan skopkan kredential.
Sumber
- Sysdig Threat Research Team: Machine speed, hold the AI: Hand-rolled marimo CVE-2026-39987 exploit
- The Hacker News: Human Attacker Exploits Marimo RCE, Reaches SSH Bastion in Eight Seconds
- Infosecurity Magazine: Human Attacker Hits Machine-Speed Exploitation of Marimo RCE
- GitHub (marimo-team/marimo): marimo PR #9098: Add auth check to terminal WebSocket endpoint
// penulis
Editor & Operator
Mohd Firdaus Abu Bakar (MrDodgerX) is an enterprise geospatial systems engineer in Malaysia and the editor behind hejes.my. He runs the briefing pipeline, curates and edits every draft, verifies each factual claim against primary sources, and presses the publish button — nothing ships without his review. He writes about AI, security and Malaysia's tech scene from a builder's perspective. Professional profile and code: the links below.
// sumber //
disahkan fakta · 16 SEP 2026 · hejes-content-fact-check
- Machine speed, hold the AI: Hand-rolled marimo CVE-2026-39987 exploitSysdig Threat Research Team · diakses 16 SEP 2026
- Human Attacker Exploits Marimo RCE, Reaches SSH Bastion in Eight SecondsThe Hacker News · diakses 16 SEP 2026
- Human Attacker Hits Machine-Speed Exploitation of Marimo RCEInfosecurity Magazine · diakses 16 SEP 2026
- marimo PR #9098: Add auth check to terminal WebSocket endpointGitHub (marimo-team/marimo) · diakses 16 SEP 2026
berkaitan //

Citrix NetScaler: Tampal Dulu atau Simpan Bukti Dulu?
Dua zero-day NetScaler kini masuk senarai eksploitasi CISA dengan tarikh akhir 30 September, dan tampalan boleh memadam bukti yang anda perlukan.

Claude Opus 5 Bantu Penyelidik Rampas Akaun Staf OpenAI
Hacktron merangkaikan bug libheif di forum Discourse OpenAI dengan kelemahan SSO lalu merampas akaun ChatGPT dan Codex pekerja.

RCE Tanpa Auth dalam Orkes Conductor Sudah Dieksploitasi
CVE-2026-58138 ialah RCE tanpa autentikasi yang kritikal dalam evaluator GraalVM Orkes Conductor, dan ia sedang dieksploitasi secara aktif.
// sertai suapan
satu ilmu seminggu. tiada spam.
ringkasan mingguan. berhenti bila-bila masa.