Next.js ve React App Router Güvenlik Açığı: CVE-2025-55182 Rehberi

Paylaş:
Next.js ve React App Router Güvenlik Açığı: CVE-2025-55182 Rehberi

Modern JavaScript ekosistemini sarsan en kritik zafiyetlerden biriyle karşı karşıyayız.

3 Aralık 2025’te React ekibi, App Router ve React Server Components (RSC) kullanan Next.js projelerini doğrudan ilgilendiren kritik bir güvenlik açığını duyurdu: CVE-2025-55182. Bu açık, belirli React 19 ve RSC paket kombinasyonlarında yetkisiz uzaktan kod çalıştırma (unauthenticated Remote Code Execution – RCE) seviyesinde risk oluşturuyor.

Next.js App Router, son yıllarda çok hızlı benimsenen, özellikle React Server Components ile birlikte kullanıldığında hem performans hem de DX tarafında ciddi avantajlar sağlayan bir mimari. Ancak bu olay, her yeni mimarinin beraberinde yeni saldırı yüzeyleri getirdiğini acı bir şekilde hatırlatıyor.

Bu yazıda:

  • Açığın temelde ne olduğu,
  • Hangi React + Next.js kombinasyonlarını etkilediği,
  • Kendi projemde nasıl teşhis ettiğim,
  • Ve projeni adım adım nasıl güvenli hale getirebileceğin

üzerinden, özet ve uygulamaya dönük bir dille geçeceğiz.

React2Shell Açığı Nedir? (CVE-2025-55182)

Toplulukta bu zafiyet çoğunlukla "React2Shell" olarak anılıyor. Sebebi oldukça net: React Server Components tarafındaki bir deserialization hatası, saldırganın özel hazırlanmış bir HTTP isteğiyle sunucuda rastgele kod çalıştırmasına izin verebiliyor.

Yani saldırgan, belirli bir RSC endpoint’ine uygun formatta payload göndererek, adeta sunucuda “shell açar gibi” komut çalıştırabiliyor.

Açığı tetikleyen temel bileşenler şunlar:

  • React 19 ekosistemi
  • Aşağıdaki RSC paketleri:
  • - react-server-dom-webpack - react-server-dom-parcel - react-server-dom-turbopack
  • App Router kullanan ve RSC aktif olan Next.js projeleri

Sorunun kaynağı, bu paketlerin 19.0.0, 19.1.0, 19.1.1, 19.2.0 civarındaki sürümlerinde yer alan güvensiz RSC deserialization mantığı. Bu mantık doğru şekilde izole edilmediği için, belirli bir payload ile sonuçta RCE elde edilebiliyor.

React ekibi, farkına vardıktan sonra RSC paketleri için 19.0.1, 19.1.2, 19.2.1 gibi yamalanmış sürümler yayımladı.

Hangi Projeler Risk Altında?

Tabloya bakarken gereksiz karmaşadan kaçınalım ve doğrudan pratik senaryolar üzerinden gidelim.

React 18.x kullanan projeler

  • Genel durumda bu CVE’den doğrudan etkilenmiyor.
  • Problemli RSC sürümleri React 19 serisiyle birlikte geliyor.
  • Yani React 18 + klasik SSR/CSR veya sınırlı RSC kullanımında, bu spesifik açık tipik olarak tetiklenemiyor.

React 19.0.0 – 19.2.0 arası kullanan projeler

  • RSC paketlerinin kırılgan olduğu aralık tam olarak burası.
  • Eğer projende App Router + RSC aktif ve React sürümün bu aralıkta ise, yüksek risk altındasın.

Next.js 15 / 16 kullanıp patch almamış projeler

  • Modern Next.js App Router projeleri varsayılan olarak RSC ile birlikte çalışıyor.
  • Next ekibi bu açık için resmi bir security advisory yayımladı ve belirli sürümleri "patched" olarak işaretledi.
  • Bu sürümlerin öncesindeki 15.x ve 16.x versiyonları riskli kabul ediliyor.

Patch’li Next.js sürümleri

Aşağıdaki Next.js sürümleri, React tarafındaki yamalarla uyumlu ve advisory’de güvenli olarak işaretlenmiş durumda:

  • 15.0.5
  • 15.1.9
  • 15.2.6
  • 15.3.6
  • 15.4.8
  • 15.5.7
  • 16.0.7

Özet risk kombinasyonu

Riskli tabloyu şöyle düşünebilirsin:

  • App Router kullanan bir Next.js projesi
  • React 19’un problemli sürümleri (19.0.0–19.2.0)
  • Yukarıdaki patch’li Next 15/16 sürümlerinin dışında kalan bir Next.js versiyonu
  • Ve RSC endpoint’lerinin dışarıya açık olduğu bir prod ortamı

Bu şartlar sağlanıyorsa, saldırganın yetkisiz RCE elde etme ihtimali gerçek ve ciddiye alınması gereken bir risk.

Kendi Projemde Nasıl Teşhis Ettim?

Bu yazıyı okuduğun sitenin kendisi, Next.js App Router ile çalışan bir portfolio ve blog projesi. Açık duyurulur duyurulmaz yaptığım ilk şey, gerçekten etkilenip etkilenmediğimi netleştirmek oldu.

Terminalde şu komutu çalıştırdım:

bash
npm ls next react react-dom

Çıktı özetle şöyleydi:

  • next: 15.5.7
  • react: 18.3.1
  • react-dom: 18.3.1

Buradan şu sonuçlara ulaştım:

  • Next.js tarafında 15.5.7 kullanıyorum. Bu, Next’in resmi advisory’sinde "patched" olarak listelenen sürümlerden biri.
  • React tarafında ise 18.3.1 kullanıyorum; yani React 19 serisine geçmemiş durumdayım.
  • Ek olarak dependency ağacında react-server-dom-webpack gibi paketlerin, React 19’un riskli sürümleriyle birlikte gelmediğini de kontrol ettim.

Bu kombinasyonla, CVE-2025-55182 özelinde projemin güvende olduğunu söyleyebildim. Elbette bu, projenin “tamamen kurşun geçirmez” olduğu anlamına gelmiyor; yalnızca bu spesifik RCE zafiyetinin beni etkilemediğini gösteriyor.

Projeni Kontrol Etmek İçin Pratik Checklist

Kendi projen için benzer bir analiz yapmak istiyorsan, aşağıdaki adımlar genelde yeterli oluyor.

1. React sürümünü kontrol et

Terminalde:

bash
npm ls react react-dom

Eğer aşağıdakilerden birini görüyorsan:

  • 19.0.0
  • 19.1.0
  • 19.1.1
  • 19.2.0

RSC paketlerinin kırılgan olduğu aralıktasın. Bu durumda hem React hem de ilgili RSC paketlerini güncellemen gerekiyor.

2. Next.js sürümünü kontrol et

bash
npm ls next

Projen Next 15 veya 16 kullanıyorsa ve sürümün şu listede yoksa:

  • 15.0.5
  • 15.1.9
  • 15.2.6
  • 15.3.6
  • 15.4.8
  • 15.5.7
  • 16.0.7

patch almamış olma ihtimalin yüksek. Resmi advisory, bu sürümleri özellikle güvenli olarak işaretliyor.

3. RSC paketlerini tara

Ek olarak aşağıdaki komutlarla RSC paketlerini kontrol edebilirsin:

bash
npm ls react-server
npm ls react-server-dom-webpack
npm ls react-server-dom-turbopack

Bu paketlerin problemli sürümlerine sahipsen, mutlaka yamalı versiyonlara yükseltmelisin.

Çözüm: Projeni Nasıl Güvene Alırsın?

1) Next.js’i patch’li sürüme yükselt

Eğer 15.x hattındaysan örneğin:

bash
npm install next@15.5.7

16.x hattındaysan:

bash
npm install next@16.0.7

Ardından klasik kontrol adımları:

bash
npm run lint
npm run build

Deploy’dan önce build’in temiz geçtiğinden emin ol.

2) React 19 kullanıyorsan güncelle

React tarafında da yamalanmış 19.x sürümlerini kullanman gerekiyor. Advisory’de bahsedilen güvenli RSC sürümleri 19.0.1, 19.1.2, 19.2.1 civarında.

Bu yüzden şu tarz bir komutla en güncel yamalı 19.x’e çıkabilirsin:

bash
npm install react@19.2.1 react-dom@19.2.1

3) Versiyon aralıklarını sabitle

Bir diğer kritik nokta, package.json içindeki versiyon aralıkları.

Örneğin:

json
"next": "^15.5.7"

yerine:

json
"next": "15.5.7"

kullanmak, gelecekte npm update veya temiz kurulum sırasında beklemediğin bir minor sürüme geçmeni engeller. Aynı yaklaşımı React için de uygulayabilirsin.

Sonrasında lock file’ı yenilemek için, kullandığın paket yöneticisine göre şu tarz bir akış izleyebilirsin:

bash
rm -rf node_modules package-lock.json pnpm-lock.yaml yarn.lock
npm install

Bu Olay Bize Ne Öğretiyor?

Bu güvenlik açığı benim açımdan üç önemli dersi tekrar masaya koydu:

1. Framework güncellemeleri sadece feature değil, güvenlik için de kritik. Özellikle React ve Next gibi hızlı gelişen ekosistemlerde, patch sürümlerini ertelemek ciddi sonuçlar doğurabiliyor.

2. Versiyon aralıkları hem konfor hem risk getiriyor. ^ ve ~ ile başlayan sürümler, bazen hiç fark etmeden kırılgan bir minor sürüme geçmene neden olabiliyor.

3. App Router ve RSC gibi yeni mimariler ekstra dikkat istiyor. Yeni mimariler güçlü; ama aynı zamanda daha taze oldukları için daha fazla güvenlik incelemesine ihtiyaç duyuyorlar.

Next.js Geliştiricileri İçin Güçlü Bir Uyarı

CVE-2025-55182, modern web uygulamalarının ne kadar karmaşık hale geldiğini ve bu karmaşıklığın güvenlik tarafında nasıl yeni riskler üretebildiğini çok net gösteriyor. App Router ve React Server Components, doğru yapılandırıldığında güçlü bir mimari avantaj sağlıyor; ancak bu güç, beraberinde ciddi bir güvenlik sorumluluğu da getiriyor.

Eğer Next.js ile App Router kullanıyorsan:

  • React ve Next sürümlerini kontrol et,
  • Resmi advisory’de belirtilen patch sürümlerine geç,
  • package.json içindeki versiyon aralıklarını gözden geçir,
  • Ve mümkünse projeni düzenli aralıklarla güvenlik taramasından geçir.

Ben kendi projemde bu adımların tamamını uyguladım ve şu an için bu spesifik açıktan etkilenmediğimi biliyorum. Ama bu, güvenlik gündemini bırakabileceğim anlamına gelmiyor; tam tersine, bundan sonra da yeni özelliklere bakarken daha sık şu soruyu soracağım:

> "Bu özellik bana ne kadar yeni saldırı yüzeyi açıyor?"

Aynı soruyu senin de kendi projelerin için düzenli olarak sorman, muhtemelen en ucuz güvenlik yatırımı olacaktır.

Makale Bilgileri

Yazar: İsmail Hakkı EREN
İlgili Yazılar