EresusSecurity
Advisory içeriklerine dön
ERESUS-ADV-2026-005CriticalCVSS: 9.8

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: true kullanan kritik nokta SearchService.ts içindedir. Diğer BrowserWindow örnekleri doğru şekilde nodeIntegration: false kullanmaktadır.

Etki

  • macOS, Windows veya Linux üzerinde desktop user yetkisiyle tam uzaktan kod çalıştırma.
  • Gizli çalışma: BrowserWindow show: false olduğ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ışı

  1. Saldırgan SEO optimize edilmiş zararlı bir web sayfası hazırlar.
  2. Kullanıcı veya AI workflow'u ilgili bir web search tetikler.
  3. Search provider saldırgan sayfasını sonuçlar arasında döndürür.
  4. LocalSearchProvider bu URL'yi alır ve gizli BrowserWindow içinde açar.
  5. Sayfa JavaScript'i Node.js erişimiyle child_process çağırır.
  6. 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:

  1. API tabanlı search provider kullanın.
  2. Local browser tabanlı search provider'ları devre dışı bırakın.
  3. Web search özelliğini kapatın.
  4. Electron pencerelerinde sandbox, contextIsolation ve nodeIntegration: false ayarlarını zorunlu hale getirin.
  5. 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.