Cherry Studio SearchService Üzerinde nodeIntegration ile Kritik Uzaktan Kod Çalıştırma (RCE)
Yayımlandı: 2026-04-14
Özet
Cherry Studio'nun web search özelliği, AI context üretmek için web sayfalarını scrape ederken gizli Electron BrowserWindow instance'ları oluşturur. Bu pencerelerde nodeIntegration: true ve contextIsolation: false kullanılması, yüklenen web sayfasındaki JavaScript kodunun Node.js API'lerine erişmesine yol açar.
AI bir web search tetiklediğinde, arama motoru sonuçlarından çıkarılan URL'ler bu ayrıcalıklı gizli pencerelerde açılır. Saldırgan kontrolündeki bir sayfa sonuçlarda yer alırsa, sayfadaki JavaScript require('child_process').execSync() çağrısıyla kullanıcının makinesinde komut çalıştırabilir.
Etkilenen Sürümler
| Parametre | Detay |
|---|---|
| Zafiyetli aralık | v0.9.x - v1.8.4 ve main branch HEAD |
| Eklendiği commit | f9c6bddae5 (2025-04-10) — PR #4569 |
| Doğrulanan sürüm | v1.9.1 dev build (main üzerinde e2366b3), 2026-04-14 |
| Etkilenen provider'lar | local-google, local-bing, local-baidu, searxng (usingBrowser: true) |
| Etkilenmeyen provider'lar | API tabanlı provider'lar: tavily, zhipu, exa, exa-mcp, bocha, querit |
Not: Kod tabanında
nodeIntegration: truekullanan kritik noktaSearchService.tsiçindedir. DiğerBrowserWindowörnekleri doğru şekildenodeIntegration: falsekullanmaktadır.
Etki
- macOS, Windows veya Linux üzerinde desktop user yetkisiyle tam uzaktan kod çalıştırma.
- Gizli çalışma:
BrowserWindowshow: falseolduğu için kullanıcı görsel uyarı almaz. - Credential theft: SSH key, AWS credential, browser cookie, API token ve environment variable değerleri çalınabilir.
- Kalıcılık: saldırgan cron job, scheduled task veya shell profile değişikliği ekleyebilir.
- Supply chain riski: geliştirici makinesi ele geçirilirse code signing key ve CI/CD token'ları açığa çıkabilir.
Saldırı Akışı
- Saldırgan SEO optimize edilmiş zararlı bir web sayfası hazırlar.
- Kullanıcı veya AI workflow'u ilgili bir web search tetikler.
- Search provider saldırgan sayfasını sonuçlar arasında döndürür.
LocalSearchProviderbu URL'yi alır ve gizliBrowserWindowiçinde açar.- Sayfa JavaScript'i Node.js erişimiyle
child_processçağırır. - Komut kullanıcının makinesinde çalışır.
PoC Davranışı
Zafiyetli akışta sayfa JavaScript'i şu sınıfta bir çağrı yapabilir:
require('child_process').execSync('id')
Gerçek istismar senaryosunda bu davranış credential toplama, dosya yazma, kalıcılık kurma veya başka payload indirme amacıyla kullanılabilir.
Yama Durumu
Yayın anında zafiyet henüz kalıcı olarak patch edilmemişti.
Önerilen ana düzeltme: SearchService içinde nodeIntegration'ı kapatın
Bu birincil düzeltmedir ve diğer azaltım önlemlerinden bağımsız olarak uygulanmalıdır:
// src/main/services/SearchService.ts
private async createNewSearchWindow(uid: string, show: boolean = false): Promise<BrowserWindow> {
const newWindow = new BrowserWindow({
width: 1280,
height: 768,
show,
webPreferences: {
- nodeIntegration: true,
- contextIsolation: false,
+ nodeIntegration: false,
+ contextIsolation: true,
+ sandbox: true,
devTools: is.dev
}
})
Geçici Çözümler
Patch uygulanana kadar:
- API tabanlı search provider kullanın.
- Local browser tabanlı search provider'ları devre dışı bırakın.
- Web search özelliğini kapatın.
- Electron pencerelerinde
sandbox,contextIsolationvenodeIntegration: falseayarlarını zorunlu hale getirin. - AI web search sonuçlarını güvenilmeyen web içeriği olarak ele alın.
Eresus Notu
AI uygulamalarında "context toplama" özellikleri çoğu zaman güvenlik sınırı gibi değerlendirilmez. Ancak web search, local browser, plugin ve desktop runtime bir araya geldiğinde zararsız görünen bir URL yükleme işlemi tam endpoint compromise etkisine dönüşebilir.