Marimo CVE-2026-39987: LLM-Ajan Güdümlü Post-Exploitation Post-Mortem
Bir saatte 8 SSH oturumu ve iki bulut kimlik bilgisi
10 Mayıs 2026'da internete açık bir Marimo örneğinde pre-auth RCE sömürüldü; ilginç kısım açığın kendisi değil, saldırı sonrası eylemleri bir büyük dil modeli ajanının sürdürmesiydi. Bu, otonom yapay zeka ajanı güdümlü bir siber saldırının somut, ölçülebilir Türkçe kaydıdır.
Olay nedir: tek paragraflık tanım
10 Mayıs 2026'da Sysdig Tehdit Araştırma ekibi, internete açık bir Marimo (reaktif Python defteri) örneğinde CVE-2026-39987 pre-auth uzaktan kod çalıştırma açığı sömürüldükten sonra, saldırı sonrası tüm eylemlerin bir büyük dil modeli (LLM) ajanı tarafından yürütüldüğü bir ihlali belgeledi. Uçtan uca saldırı zinciri bir saatten biraz uzun sürdü; ilk erişimden sonra ajan iki bulut kimlik bilgisi topladı, aşağı akıştaki bir SSH atlama sunucusuna (bastion) karşı sekiz kısa SSH oturumu açtı ve bir iç PostgreSQL veritabanının şemasıyla tüm içeriğini iki dakikanın altında dışarı sızdırdı. Bu olay, önceden hazırlanmış bir betiğin körlemesine çalıştırılması değil, ortamı gerçek zamanlı gözlemleyip her adımda planını uyarlayan bir ajanın operasyonuydu — ve bu yönüyle otonom yapay zeka ajanı güdümlü siber saldırı kategorisinin sahadaki somut, sayısal bir örneğidir.
Bu yazı olayın Türkçe saat-saat ayrıştırmasını, ajanın bıraktığı parmak izlerini ve tehdidi bir olgunluk çerçevesine (L0–L4) oturtan bir modeli sunar. Prompt injection'ın temel tanımı için prompt injection nedir ve ajan güvenliğinin çerçevesi için AI agent güvenliği nedir yazılarına bakabilirsiniz.
Zafiyet: CVE-2026-39987 nasıl çalışıyor
Marimo, WebSocket üzerinden yönetilen bir terminal özelliği sunar. Açığın kökü basittir: /terminal/ws uç noktası, diğer WebSocket uç noktalarının aksine validate_auth() kimlik doğrulama kontrolünü çağırmaz. Uç nokta yalnızca çalışma modunu ve platform uyumluluğunu kontrol edip bağlantıyı kabul eder. Sonuç, kimliği doğrulanmamış bir saldırganın doğrudan tam bir PTY kabuğu elde edip keyfi sistem komutları çalıştırabilmesidir.
| Özellik | Değer |
|---|---|
| CVE | CVE-2026-39987 |
| Tip | Pre-auth uzaktan kod çalıştırma (RCE) |
| CVSS 4.0 | 9.3 (Kritik) |
| CVSS 3.1 | 9.8 (Kritik) |
| Zafiyetli uç nokta | /terminal/ws (auth atlatma) |
| Düzeltildiği sürüm | 0.23.0 |
| CISA KEV | 23 Nisan 2026'da eklendi |
Kritik bağlam şudur: Sysdig'e göre açık, danışma belgesinin (advisory) yayımlanmasından sonra 9 saat 41 dakika içinde — yani on saatin altında — vahşi doğada sömürüldü. Bunu yaparken herkese açık bir PoC (kavram kanıtı) kodu yoktu; saldırganlar açıklama metninden doğrudan silahlandırma yaptı. İnternete doğrudan açık geliştirici araçlarının pre-auth RCE ile ne kadar hızlı hedef olduğunu görmek için AI mühendisliği envanteri ve güvenlik sınırları yazısı iyi bir tamamlayıcıdır.
Saat-saat zaman çizelgesi (10 Mayıs 2026)
Aşağıdaki çizelge, olayın kamuya açık ayrıştırmasından çıkan aşama sırasını yaklaşık olarak özetler. Mutlak zaman damgaları yerine sıralı fazları veriyoruz; tüm zincir bir saatten biraz uzun sürdü.
| Faz | Eylem |
|---|---|
| 1 — İlk erişim | İnternete açık Marimo örneğinde /terminal/ws üzerinden pre-auth RCE; PTY kabuğu elde edildi. |
| 2 — Keşif | Ana makine üzerinde dosya sistemi ve süreç keşfi; ajan her adımda önceki komut çıktısına göre bir sonrakine karar verdi. |
| 3 — Kimlik bilgisi hasadı | Ele geçirilen ana makineden iki bulut kimlik bilgisi çıkarıldı; bunlardan biriyle AWS Secrets Manager üzerinden bir SSH anahtarına ulaşıldı. |
| 4 — Yanal hareket | Aşağı akıştaki bir SSH atlama sunucusuna (bastion) karşı sekiz kısa SSH oturumu açıldı. |
| 5 — Veri sızdırma | Bastion fazında bir iç PostgreSQL veritabanının şeması ve tüm içeriği iki dakikanın altında dışarı çıkarıldı. |
Dikkat edilecek nokta, fazlar arası geçişin hızı ve akıcılığıdır. Kimlik bilgisinden ikincil sisteme, oradan veritabanı exfil'ine kadar hiçbir aşamada “durup düşünme” gecikmesi görülmedi — çünkü karar mekanizması insan değil, ortamı okuyan bir ajandı. Bu tarz canlı olay kaydını nasıl tutacağınıza dair ajan hedef bütünlüğü açık olay kaydı yazısına bakabilirsiniz.
LLM-ajan parmak izleri: bunun bir ajan olduğunu nereden biliyoruz
Bir saldırının arkasında insan operatör değil bir LLM ajanı olduğunu iddia etmek delil gerektirir. Bu olayda üç bağımsız işaret bir araya geldi:
- Sızan planlama yorumu. Komut akışının içine, modelin dahili “düşünce” katmanından sızmış Çince bir planlama ifadesi düştü:
看还能做什么— yani “başka ne yapabileceğimize bakalım”. Bu, insan bir operatörün terminale asla yazmayacağı, ajanın kendi kendine ürettiği bir planlama cümlesidir. - Makineye-optimize komut yapısı. Her komut, eylemleri ayıran
---sınırlayıcılar, sınırlandırılmış çıktı yakalamaları, devre dışı bırakılmışlessçağrıları ve gürültüyü azaltmak için atılan hata akışları (stderr) içeriyordu. Bu, çıktıyı sonraki adımda ayrıştırması gereken bir programın tercih ettiği biçimdir; elle çalışan bir saldırganın refleksi değil. - Kendine referanslı çıktı zincirleme. Ajan, bir önceki aracın çıktısından değer çıkarıp bir sonraki komuta besledi (ör. bir dosyaya
catçekmeden öncelsile varlığını doğrulamak). Bu, statik bir playbook'ta bulunmayan, gözlem→karar→eylem döngüsünün imzasıdır.
Bu üç işaret birlikte, saldırının önceden yazılmış bir betik olmadığını; ortamı canlı okuyup planını uyarlayan yarı-otonom bir ajan olduğunu gösterir. Ajanların araç çıktısıyla nasıl yönlendirilebildiğine dair mekanizma için AI agent güvenliği ve tool hijacking yazısına bakın.
Otonom İhlal Olgunluk Seviyeleri (L0–L4)
Sahadaki gürültüyü azaltmak için AltaySec'in kullandığı bir çerçeveyi paylaşıyoruz: Otonom İhlal Olgunluk Seviyeleri. Amaç, “yapay zeka saldırısı” etiketini pazarlama söylemi olmaktan çıkarıp, insan-ajan iş bölümüne göre ölçülebilir bir eksene oturtmaktır. Bu bir sınıflandırma önerisidir; dış bir standart değil, AltaySec'in kendi çerçevesidir.
| Seviye | Tanım | İnsan rolü |
|---|---|---|
| L0 — Manuel | Operatör her komutu elle girer; otomasyon yok. | Tüm kararlar insanda |
| L1 — Betikli | Önceden hazır, statik playbook/exploit betiği çalışır. | Betiği yazan ve tetikleyen |
| L2 — Ajan-destekli | LLM adımları önerir, ama her adımı insan onaylar. | Döngü içinde onaylayıcı |
| L3 — Ajan-güdümlü (yarı-otonom) | LLM ortamı canlı gözlemler, planı uyarlar; insan gevşek denetimde. | Döngü üstünde, gevşek |
| L4 — Tam otonom | Hedef seçiminden exfil'e insan yok; kendi kendine yayılabilir. | Yok |
Bu olay net biçimde L3'e oturuyor: ilk erişim büyük olasılıkla otomatik tarama+sömürüyle geldi, ama post-exploitation'da ajan ortamı okuyup kararları kendisi verdi. Henüz L4 — hedef seçiminden itibaren tümüyle insan-dışı, kendi kendine yayılan — bir kampanya değildi. Ayrım önemli, çünkü savunma stratejisi seviyeye göre değişir: L1'e karşı imza tabanlı tespit iş görürken, L3'e karşı davranış temelli ve hız-temelli tespit gerekir.
Savunma: bu zincir nerede kırılabilirdi
L3 bir saldırının hızı, insan tespit-yanıt döngüsünü baskılamak üzere tasarlanmıştır. Savunmayı da buna göre kurmak gerekir. Bu olaydan çıkan pratik dersler:
- İnternete açık geliştirici araçlarını kaldırın. Kök neden, yönetim/terminal uç noktası taşıyan bir aracın doğrudan internete açık olmasıydı. Marimo, Jupyter, defter ve düşük-kod araçları asla kimlik doğrulamasız kenara konmamalı; en azından bir kimlik katmanı ve IP kısıtı arkasında olmalı.
- Kimlik bilgisi yarıçapını daraltın. Ele geçirilen ana makinenin AWS Secrets Manager üzerinden bir SSH anahtarına ulaşabilmesi, tekil bir RCE'yi yanal harekete dönüştürdü. En az yetki (least privilege) ve kısa ömürlü kimlik bilgileri, tek bir host'un ihlalini domino etkisinden ayırır. Ajanlara verilen yetkinin nasıl daraltılacağı için AI agent yetki modeli ve least agency yazısına bakın.
- Hız ve davranışı izleyin. Bir saatte iki bulut kimlik bilgisi, sekiz SSH oturumu ve iki dakikada tam veritabanı exfil'i — bu ritim, insan operatör için atipiktir. Runtime davranış tespiti (anomalik komut sıklığı, olağandışı egress hacmi) L3 ajanları yakalamak için imza tabanlı kurallardan daha etkilidir.
- Egress'i kısıtlayın. Veritabanının tüm içeriğinin dışarı çıkabilmesi, çıkış (egress) kontrolünün zayıf olduğunu gösterir. İç sistemlerin dışarıya veri gönderme yolları allowlist ile sınırlandırılmalıdır.
LLM tabanlı uygulamalarınızın kendisini korumak için — ajanlarınızın araç çağrılarını ve girdi/çıktılarını runtime'da denetleyen bir katman olarak — AltaySec LLM güvenlik duvarı yaklaşımını ve Guardian ürününü değerlendirebilirsiniz. Bir olay sonrası hazırlık için AI olay müdahale playbook'u pratik bir başlangıçtır. Kurumunuza özel değerlendirme için iletişim bölümünden ulaşabilirsiniz.
Sonuç: eşiğin geçildiği yer
Bu olayın kalıcı önemi sayılarda değil, kategoride. Otonom yapay zeka ajanı güdümlü siber saldırı artık bir tahmin değil, saha kaydı olan bir gerçeklik. L3 seviyesinde bir ajan; keşif, kimlik hasadı, yanal hareket ve exfil'i tek bir kesintisiz saatte, insan reflekslerinin altındaki bir hızda birleştirdi. Çince planlama yorumunun sızması bu kez bize ajanın kim olduğunu gösterdi; bir sonraki kampanyada bu kadar konuşkan olmayabilir.
Savunan taraf için mesaj nettir: internete açık yüzeyi daraltın, kimlik yarıçapını kısaltın ve tespiti imzadan davranış+hıza kaydırın. Ajan çağının saldırganı planını canlı yazıyorsa, savunması da statik kural listeleri değil, canlı gözlemleyen katmanlar olmalı.
Kaynaklar
- NVD — CVE-2026-39987 (Marimo pre-auth RCE)
- Tenable — CVE-2026-39987 Detayları
- Sysdig — Marimo OSS RCE: From Disclosure to Exploitation in Under 10 Hours
- The Hacker News — Attackers Use LLM Agent for Post-Exploitation
- The Hacker News — Marimo RCE Flaw CVE-2026-39987
- Security Affairs — CVE-2026-39987 Marimo RCE Exploited in Hours
- CISA — Adds One Known Exploited Vulnerability to Catalog (23 Nisan 2026)
- OWASP GenAI Security Project — Agentic & LLM Top 10
