Şubat 2026'da, yaygın olarak kullanılan açık kaynaklı iş akışı otomasyon platformu n8n'de kritik bir sanal alan kaçışı güvenlik açığı kamuoyuna duyuruldu. CVE-2026-25049 olarak kaydedilen bu güvenlik açığı, kimlik doğrulaması yapılmış kullanıcıların ifade değerlendirme sanal alanını atlatmasına ve ana sunucuda rastgele sistem komutları çalıştırmasına olanak tanıyarak, CVSS v3.1 puanı 9,9 olan tam uzaktan kod yürütme imkânı sağlıyor.
OPSWAT Burs Programı kapsamında, bursiyerlerimiz CVE-2026-25049 hakkında kapsamlı bir teknik analiz gerçekleştirerek, sorunun temel nedenini, istismar mekanizmasını ve kuruluşlar üzerindeki etkisini inceledi.
Bu blog yazısı, n8n’in ifade işleme mimarisinden ve katmanlı güvenlik kontrollerinden, beş savunma katmanının tamamını aynı anda aşan spesifik tekniğe kadar, bu güvenlik açığına ilişkin ayrıntılı bir inceleme sunuyor.

CVE-2026-25049, n8n'de bulunan ve CWE-913: Dinamik Olarak Yönetilen Kod Kaynaklarının Uygunsuz Kontrolü altında sınıflandırılan kritik bir ifade sanal alan kaçışı güvenlik açığıdır. Bu güvenlik açığı, 1.123.17'den önceki tüm n8n sürümlerinin yanı sıra 2.0.0 ile 2.5.1 arasındaki sürümleri de etkilemektedir ve 1.123.17 ile 2.5.2 sürümlerinde düzeltilmiştir. Bu güvenlik açığı, iş akışı oluşturma izinlerine sahip kimliği doğrulanmış kullanıcıların, platformun ifade sanal alanını atlayan kötü amaçlı JavaScript ifadeleri oluşturmasına ve sonuç olarak ana sunucuda keyfi komut yürütmesine olanak tanır.

Bu güvenlik açığı, n8n'in genellikle bir kuruluşun altyapısı içinde ayrıcalıklı bir konuma sahip olması nedeniyle özellikle ciddi bir tehlike arz etmektedir. Bir iş akışı otomasyon merkezi olarak n8n, genellikle iç API'lere, veritabanlarına, kimlik bilgisi depolarına ve üçüncü taraf hizmetlere doğrudan erişim sağlar. Güvenliği ihlal edilen bir n8n örneği, yalnızca otomasyon sunucusunu tehlikeye atmakla kalmaz; aynı zamanda bağlı her sisteme bir giriş noktası oluşturarak, istismarın etki alanını önemli ölçüde genişletir.
CVE-2026-25049, bağımsız bir güvenlik açığı değil; n8n’in ifade değerlendiricisinde daha önce ortaya çıkan bir sanal alan kaçışı olan CVE-2025-68613 için yayınlanan yamanın atlatılmasıdır. İlk güvenlik açığı ortaya çıktıktan sonra çok katmanlı savunma mekanizmaları uygulanmasına rağmen, temizleyicinin JavaScript Soyut Sözdizimi Ağacı (AST) düğüm türlerini işleme biçimindeki temel bir boşluk, orijinal saldırı türünün farklı bir sözdizimsel vektör aracılığıyla yeniden ortaya çıkmasına neden olmuştur. Bir yamanın, altta yatan tasarım zayıflığı yerine belirli bir istismar tekniğini ele aldığı bu model, dinamik kod değerlendirme ortamlarının güvenliğini sağlamanın ne kadar zorlu bir görev olduğunu ortaya koymaktadır.
Bu güvenlik açığı, 4 Şubat 2026 tarihinde n8n ile ilgili diğer on güvenlik bildirisiyle birlikte kamuoyuna duyuruldu ve birçok güvenlik araştırma ekibi tarafından bağımsız olarak incelendi.
n8n hakkında
n8n, kuruluşların sistemleri birbirine bağlamasına, süreçleri otomatikleştirmesine ve yüzlerce hizmet arasında entegrasyonlar oluşturmasına olanak tanıyan açık kaynaklı bir iş akışı otomasyon platformudur. Yaygın olarak benimsenmesi ve 1.300'ün üzerinde mevcut entegrasyonuyla n8n, kendi kategorisinde en popüler araçlardan biri haline gelmiştir. Geliştirme ekipleri ve kurumsal şirketler tarafından, iç araçlardan iş açısından kritik veri boru hatlarına kadar her şeyi otomatikleştirmek için kullanılmaktadır.

Platform, hem kendi sunucunuzda barındırma hem de bulut dağıtımlarını destekler ve özel mantıklar için doğrudan JavaScript desteğinin yanı sıra görsel bir iş akışı oluşturucu sunar. n8n’in mimarisi düğüm tabanlıdır: iş akışları, tetikleyiciler, eylemler ve işlev adımları arasında JSON formatında veri aktaran birbirine bağlı düğümlerden oluşur. Yürütme, test için manuel modda veya canlı dağıtım için üretim modunda çalıştırılabilir. JavaScript ifadeleri için yerel destek ve dahili API'lere ve kimlik bilgisi depolarına erişim ile birleştirilen bu mimari, n8n'i güçlü bir otomasyon aracı haline getirir; ancak aynı zamanda güvenlik açıkları ortaya çıktığında yüksek değerli bir hedef haline de getirir.
Teknik Arka Plan
Özet Sözdizimi Ağaçları
Soyut Sözdizimi Ağacı (AST), bir sözdizimi çözümleyicisi tarafından oluşturulan kaynak kodun hiyerarşik bir temsilidir. AST, kodu düz bir dize olarak ele almak yerine, onu sözdizimsel öğelerini temsil eden yapılandırılmış düğümlere ayırır: değişken tanımlamaları, işlev ifadeleri, üye ifadeleri, tanımlayıcılar ve sabitler.

AST düğüm türlerini anlamak bu analiz için hayati önem taşır, çünkü n8n’in güvenlik denetimleri AST düzeyinde çalışır. Temizleyiciler, tehlikeli kalıpları tespit edip engellemek için belirli düğüm türlerini inceler. Bu güvenlik açığı, aynı anlamsal işlemin (bir nesnenin özelliğine erişim) kullanılan JavaScript sözdizimine bağlı olarak tamamen farklı AST düğüm türleri oluşturabilmesi gerçeğinden yararlanır.

Örneğin, obj.constructor ifadesi bir MemberExpression düğümü oluştururken, const { constructor } = obj ifadesi bir Property düğümü içeren bir ObjectPattern’a sahip bir VariableDeclaration oluşturur . Her ikisi de aynı özelliği çıkarır, ancak AST yapıları temelde farklıdır – ve n8n’in temizleyicileri yalnızca ilk kalıbı denetler.
n8n İfade Değerlendirme ve Güvenlik Mimarisi
n8n’in mimarisi beş katmandan oluşur: Ön Uç, CLI, Core, İş Akışı ve Düğümler. İş Akışı katmanı, bu güvenlik açığıyla ilgili bileşen olan ifade değerlendirmesini yürütür.

n8n, kullanıcıların verileri dinamik olarak işlemek üzere iş akışı düğüm parametrelerine JavaScript ifadeleri eklemesine olanak tanır. Bu ifadeler, Tournament adlı bir kütüphane kullanılarak sunucu tarafında değerlendirilir; bu kütüphane, ifadeleri yürütmeden önce bir AST’ye ayrıştırır. Temizleme kancaları doğrudan Tournament oluşturma sürecine eklenir ve herhangi bir kodun yürütülmesinden önce tehlikeli kalıpları engellemek üzere AST oluşturma aşamasında kontroller gerçekleştirir.

Bu ifadeler n8n sunucusuyla aynı Node.js işlemi içinde çalıştığı için, platform güvenilir olmayan kodların sanal alandan kaçmasını önlemek üzere tasarlanmış beş ayrı güvenlik katmanı uygulamaktadır.
Katman 1 - Genel Bağlamın Üzerine Yazma
Herhangi bir ifade değerlendirilmeden önce, n8n tehlikeli küresel nesneleri ve işlevleri üzerine yazarak sınırlı bir yürütme bağlamı oluşturur. document, window, globalThis, eval, setTimeout, setInterval ve Function gibi özellikler boş nesnelerle değiştirilerek bu özelliklere doğrudan erişim engellenir.


Bu yaklaşımın doğasında bir sınırlama vardır: Bir saldırgan kısıtlı bağlamdan kaçıp gerçek küresel işlem nesnesine ulaşabilirse, üzerine yazılan özellikler anlamını yitirir.
2. Katman - Düzenli İfade Doğrulama
İfade değerlendiriciye ulaşmadan önce, n8n ham ifade dizesi üzerinde bir düzenli ifade denetimi gerçekleştirerek, Function yapıcıya erişim ve dolayısıyla kod çalıştırma için yaygın bir vektör olan yapıcı özelliğine erişimi engeller.

/\.\s*constructor/gm düzenli ifadesi, .constructor öğesine nokta notasyonu ile erişimi algılar. Ancak, JavaScript aynı özelliğe erişmek için nokta notasyonunu içermeyen birçok sözdizimsel yol sunduğundan, bu kontrol temel olarak sınırlıdır.
Katman 3 - AST Çalışma Zamanı Temizleyici – PrototypeSanitizer
En gelişmiş savunma mekanizması, AST oluşturma aşamasında devreye girer. PrototypeSanitizer kancası, AST’yi tarayarak MemberExpression düğümlerini inceler ve erişilen özelliğin, yapıcı, __proto__, prototype, mainModule ve binding gibi güvenli olmayan nesne özelliklerinin yer aldığı engelleme listesinde bulunup bulunmadığını belirler.

Sanitizer üç durumu ele alır: tanımlayıcı adını kontrol ettiği nokta notasyonu (obj.prop), dizgi sabit değerini kontrol ettiği statik köşeli parantez notasyonu (obj['prop']) ve çalışma zamanı sanitizer işleviyle sarılmış dinamik ifadeler. Şekil 10'da gösterildiği gibi, yalnızca MemberExpression düğümleri incelenir; yapı sökme kalıpları taranmaz.
4. Katman - AST Çalışma Zamanı Temizleyici İşlevi ThisSanitizer
CVE-2025-68613 için doğrudan bir yama olarak eklenen FunctionThisSanitizer, Hemen Çağrılan İşlev İfadelerini (IIFE) yakalar ve bunları, `this` değişkenini boş bir nesneye bağlayacak şekilde yeniden yazar. Bu, orijinal istismarda kullanılan tekniği engeller; söz konusu teknikte, `(function(){ return this })`() ifadesi, bağlanmamış `this` referansı yoluyla küresel işlem nesnesinin sızmasına neden oluyordu.

Önemli bir nokta olarak, bu temizleyici yalnızca FunctionExpression düğümlerini işler. Ok işlevleri de dahil olmak üzere, FunctionExpression olmayan herhangi bir çağrı hedefi için açıkça erken dönüş yapar.
eval, Function ve process.mainModule gibi tehlikeli özellikler yürütme bağlamından kaldırılır veya üzerine yazılır; böylece, önceki katmanlar atlansa bile kod yürütme temel öğelerine doğrudan erişim engellenir.
Güvenlik Açığı Analizi
Temel Neden
CVE-2026-25049'un temel nedeni, beş güvenlik katmanının tamamında ortak bir varsayımda yatmaktadır: Her katman, özellik erişiminin ya nokta notasyonu (obj.constructor) ya da köşeli parantez notasyonu (obj['constructor']) yoluyla gerçekleşeceğini varsaymıştır. Hiçbiri JavaScript'in yapı sökme sözdizimini hesaba katmamıştır.
JavaScript'teki yapı sökme, nesnelerden özelliklerin temelde farklı bir AST yapısı kullanılarak çıkarılmasını sağlar:
// Traditional access - produces MemberExpression node
obj.constructor; // Blocked by regex, AST sanitizer, and runtime checks
// Destructuring - produces ObjectPattern → Property node
const { constructor } = obj; // Not checked by any layer
Her iki kalıp da aynı sonuca ulaşsa da, tamamen farklı AST temsilleri oluştururlar. PrototypeSanitizer yalnızca MemberExpression düğümlerini incelerken, düzenli ifade yalnızca .constructor kalıplarıyla eşleşir. Yapı sökme atamaları, hiçbir temizleyicinin taramadığı VariableDeclaration → ObjectPattern → Property düğümleri oluşturur.
Buna n8n’in ok işlevlerini işleme biçimi de ekleniyor. FunctionThisSanitizer yalnızca FunctionExpression düğümlerini yakalar ve bunları, `this` değişkenini güvenli bir bağlama bağlayacak şekilde yeniden yazar. Ok işlevleri, temizleyici tarafından işlenmeyen ArrowFunctionExpression AST düğümleri üretir. Ok işlevleri, `this` değişkenini çevreleyen kapsamdan (leksikal `this`) miras aldıkları için, temizlenmemiş küresel bağlama erişim sağlar.
Bu iki eksiklik bir araya geldiğinde tam bir atlama ortaya çıkar: Yapı sökme işlemi, herhangi bir özellik erişim denetimi tetiklemeden Function yapıcı işlevini çıkarır ve ok işlevleri, FunctionThisSanitizer'ın engellemediği bir yürütme bağlamı sağlar.
İstismar
Bu güvenlik açığı, her iki zafiyeti birleştirerek tüm güvenlik katmanlarını aynı anda aşmaktadır. Ekibimiz şu istismar yolunu tespit etmiştir:
Adım 1 - Ok İşlevi Girişi. Yük, Hemen Çağrılan İşlev İfadesi (IIFE) içine alınmış bir ok işleviyle başlar:
={{(() => {
// Ok işlevi - FunctionThisSanitizer'ı atlar
...
})()}}
FunctionThisSanitizer işlevi, çağrılan ifadenin bir FunctionExpression olup olmadığını kontrol eder; bu bir ArrowFunctionExpression olduğu için, sanitizer çağrıyı yeniden yazmadan erken döner. Ok işlevi, gerçek küresel bağlama tam erişimle çalışır.
2. Adım - Yapı Çözme Bypass'ı. Ok işlevinin içinde, yapı çözme işlemi bir ok işlevi örneğinden Function yapıcıyı çıkarır:
const { constructor } = () => {};
Bu bir yapı sökme ataması olduğu için, AST'de MemberExpression yerine bir ObjectPattern düğümü bulunur. Düzenli ifade denetimi .constructor kalıbını tespit etmez ve PrototypeSanitizer, özellik adını hiçbir zaman incelemez. Saldırgan artık Function yapıcıya bir referansa sahiptir.
3. Adım - Dinamik Kod Yürütme. İşlev oluşturucusunu ele geçiren saldırgan, rastgele kod oluşturur ve yürütür:
return constructor(
'return process.mainModule.require("child_process").execSync("whoami").toString()',
)();
Dinamik olarak oluşturulan işlev, sanal alan bağlamının dışında çalışır ve Node.js işlem nesnesine tam erişim sağlar; bu da ana bilgisayarda istenen sistem komutlarının çalıştırılmasını mümkün kılar.

Kavram Kanıtı
Bu güvenlik açığının gerçek hayattaki etkisini göstermek amacıyla, araştırma ekibimiz bu istismarı kontrollü bir laboratuvar ortamında yeniden canlandırdı. Saldırı senaryosu, güvenlik açığı bulunan bir n8n örneğinin barındırılması ve bir düğüm parametresi içinde kötü amaçlı yük içeren bir iş akışının içe aktarılmasını içeriyor; bu saldırı, özellikle ifade değerlendirmesine izin veren "Edit Fields Node" düğümünü hedef alıyor.

İş akışı başlatıldığında, yük beş temizleme katmanının tümünü atlayarak ana sunucuda bir ters kabuk çalıştırır ve saldırgana tam komut yürütme yeteneği sağlar.

Webhook'tan Kimlik Doğrulaması Yapılmamış Uzak Komut Yürütme (RCE) Açığına Yükseltme
Bu güvenlik açığının ciddiyeti, n8n’in webhook işlevselliği ile birleştiğinde önemli ölçüde artmaktadır. n8n, iş akışlarının HTTP uç noktalarını, taşıyıcı jetonları, temel kimlik doğrulama ve – en önemlisi – hiç kimlik doğrulama yapılmaması dahil olmak üzere yapılandırılabilir kimlik doğrulama seçenekleriyle webhook olarak sunmasına izin vermektedir. İş akışı oluşturma erişimine sahip bir saldırgan, kimlik doğrulama seçeneği "yok" olarak ayarlanmış bir genel webhook yapılandırabilir, RCE yükünü bağlı bir düğüme gömebilir ve iş akışını etkinleştirebilir. Bu noktada, internetin herhangi bir yerinden webhook URL'sine yapılan herhangi bir HTTP isteği, ana sunucuda rastgele komutların yürütülmesini tetikler.
Bu yetki yükseltme yolu, CVE-2026-25049'u kimlik doğrulaması yapılmış bir iç güvenlik açığından, internet genelinde maruz kalma riski taşıyan ve fiilen kimlik doğrulaması gerektirmeyen bir saldırı vektörüne dönüştürmektedir.
Hafifletme
n8n ekibi, temizleme işlevlerinde uygun çalışma zamanı tür denetimi uygulayarak ve yapı sökme kalıplarını işleyebilmek için AST kapsamını genişleterek 1.123.17 ve 2.5.2 sürümlerinde CVE-2026-25049 güvenlik açığını gidermiştir. Etkilenen sürümleri kullanan kuruluşlar derhal güncelleme yapmalıdır.
Hemen yükseltme yapılamıyorsa, yöneticiler iş akışı oluşturma ve düzenleme izinlerini yalnızca tam güvenilen kullanıcılarla sınırlandırmalı ve n8n'i, işletim sistemi ayrıcalıkları ve ağ erişimi kısıtlanmış, güvenli bir ortamda kullanıma sunmalıdır.
Bu sorunun kritik ciddiyeti ve istismar edilme kolaylığı göz önüne alındığında – özellikle de genel webhook'larla birleştiğinde – kuruluşlar mevcut iş akışlarını şüpheli ifadeler açısından denetlemeli, n8n sürecinden kaynaklanan olağandışı sistem komutlarının yürütülmesini izlemeli ve kimlik doğrulaması yapılmadan maruz kalan uç noktalar olup olmadığını görmek için webhook yapılandırmalarını gözden geçirmelidir.
OPSWAT ile riskleri azaltma
Kuruluşlar, OPSWAT yararlanarak altyapılarındaki güvenlik açığına sahip n8n bileşenlerini hızla tespit edebilir ve istismar gerçekleşmeden önlem alabilir. MetaDefender® platformunun temel teknolojilerinden biri olan OPSWAT , bir kuruluşun ortamında kullanılan tüm yazılım bileşenleri, kütüphaneler ve bağımlılıkların kapsamlı bir envanterini sunar.

Şekil 15'te gösterildiği gibi, MetaDefender , n8n bağımlılığını içeren package.json dosyasını taradı ve CVE-2026-25049'u otomatik olarak "Kritik" olarak işaretleyerek, etkilenen sürüm aralığını ve düzeltme için önerilen düzeltilmiş sürümleri gösterdi. Bu, güvenlik ekiplerinin dağıtım ortamları genelinde bu güvenlik açığını hızla tespit etmelerine ve önceliklendirmelerine olanak tanır.
OPSWAT , MetaDefender ve MetaDefender Software Chain™ ürünlerinde sunulmaktadır ve güvenlik ekiplerine şu olanakları sağlar:
- Güvenlik açığı bulunan bileşenleri hızla tespit edin - Sandbox kaçışı ve kod yürütme güvenlik açıklarından etkilenen açık kaynak bağımlılıklarını anında belirleyin ve böylece hızlı bir şekilde düzeltme veya kaldırma işlemi gerçekleştirin.
- Proaktif yama ve güncelleme uygulayın - Açık kaynak bileşenlerini sürekli izleyerek güncel olmayan veya güvenli olmayan paketleri tespit edin; böylece güncellemelerin zamanında yapılmasını sağlayın ve güvenlik risklerini azaltın.
- Mevzuata uygunluk ve raporlamayı sürdürün - Yazılım tedarik zincirlerinde şeffaflık gerekliliğini giderek daha fazla zorunlu kılan yasal çerçeveler doğrultusunda yasal gereklilikleri yerine getirin.
Referanslar
- NVD - CVE-2026-25049
- n8n Güvenlik Duyurusu - GHSA-6cqr-8cfr-67f8
- n8n RCE'leri: 4 Perdelik Bir Hikaye - Fatih Çelik
- CVE-2026-25049'a Derinlemesine Bir Bakış - SecureLayer7
- n8n'de Uzaktan Komut Yürütmeye (RCE) Yol Açan CVE-2026-25049 İfade Kaçışı Güvenlik Açığı - Endor Labs
- n8n Güvenlik Duyurusu - CVE-2025-68613 (GHSA-v98v-ff95-f3cp)
