Next.js Ağustos 2026 Güvenlik Sürümü: Bir Görsel Codec'i RCE'ye Dönüştü
Next.js 16.3.3 ve 15.5.24, kimlik doğrulama gerektirmeyen iki kritik RCE açığını kapatıyor: biri sharp ve libheif üzerinden gelen bir AVIF hatası, diğeri yalnızca Windows'u etkileyen bir router hatası. İlk olarak neleri kontrol ederdim, anlatıyorum.
Umut Korkmaz
Yayın tarihi: 4 dk okuma
Bu sayfada7
Next.js, Ağustos 2026 güvenlik sürümünü bugün, planlanandan bir gün erken yayınladı. Sürüm, kimlik doğrulama gerektirmeyen iki kritik uzaktan kod çalıştırma (RCE) açığını kapatıyor. Birincisi, Next.js saldırganın kontrolündeki bir AVIF görselini optimize ederken sharp ve libheif kütüphanesi üzerinden tetikleniyor. İkincisi ise Windows dosya sistemi üzerinde çalışan ve Pages Router ile App Router'ı birlikte kullanan uygulamaları etkiliyor. Düzeltilmiş sürümler 16.3.3 (Active LTS) ve 15.5.24 (Maintenance LTS). Next.js kullanıyorsanız bu hafta yamayı geçin; görsel açığı için de hiç beklemeyin.
Neler düzeltildi
- libheif üzerinden AVIF (GHSA-2xp9-vwfh-vxw4, upstream GHSA-g89c-p67h-r497).
sharp'ın dayandığı libheif'teki bir hata, saldırganın kontrolündeki bir AVIF görseli optimize edildiğinde RCE'ye yol açabiliyor. GitHub advisory açığa 9.5 CVSS v4 puanı veriyor ve 10.0.0'dan yamalı sürümlere kadar her şeyi etkilenen sürümler olarak listeliyor. Yamalı sürümler libheif'i düzeltmiyor; upstream düzeltme yayılana kadar AVIF optimizasyonunu devre dışı bırakıyor. - Windows üzerinde çalışan sunucular (CVE-2026-75604 / GHSA-p293-qw3h-jr36). Cache Components olmadan hem Pages Router'ı hem App Router'ı kullanan uygulamalar, sunucu Windows dosya sisteminde çalışıyorsa istismar edilebiliyor. Linux ve macOS etkilenmiyor ve bilinen bir geçici çözüm (workaround) yok.
npm install [email protected] # 16.3 line
npm install [email protected] # 15.5 line
Birkaç katman aşağıdaki bir codec
Sıradan bir Next.js ekibinde kimse libheif'i seçmedi. Ekip Next.js'i seçti, Next.js görsel optimizasyonu için sharp'ı seçti, sharp da libheif'e dayanıyor. Native bir görsel kütüphanesindeki hata, çoğu ekibin saldırı yüzeyi olarak hiç listelemediği bir görsel endpoint'i üzerinden web framework'ünüzde kimlik doğrulamasız bir RCE'ye dönüşüyor.
Benim buradan çıkardıklarım:
- Saldırı yüzeyiniz
package.jsondosyanız değil; bağımlılıklarınızın içindeki native kod. Bu sefer advisory doğrudannextpaketine karşı açıldığı için bağımlılık uyarılarının eşleşecek bir şeyi var. Bir sonraki ise ekipte kimsenin adını bile duymadığı, paketle birlikte gelen bir binary'nin içinde olabilir. - Güvenilmeyen dosyaları parse eden her yol kendi tehdit modelini hak ediyor: görsel optimizasyonu, PDF render'ı, doküman önizlemeleri, avatar yüklemeleri.
- Asıl sorulması gereken "AVIF kullanıyor muyuz?" değil, "ekibimiz dışından biri optimizer'ın önüne bir görsel koyabilir mi?" sorusu.
images.remotePatternsayarını kontrol edin ve kullanıcı yüklemelerinin optimizer kaynağına dönüşüp dönüşemeyeceğine bakın.
Kaçınılması gereken bir tuzak var. images.formats seçeneği çıktı formatını belirliyor ve görsel dokümantasyonu varsayılan değerini ['image/webp'] olarak veriyor. Ama tehlikeli adım AVIF çıktı üretmek değil, AVIF bir kaynağı decode etmek: 16.3.x düzeltme commit'i sharp'ın HEIF loader'ını engelliyor ve AVIF girdilerin optimizer'ı atlamasını sağlıyor. Yani AVIF çıktıyı hiç açmadığınız için güvende olduğunuzu varsaymayın. Mantık yürüterek işin içinden çıkmaya çalışmak yerine yamayı geçin.
Bir özelliği kapatmak gerçek bir düzeltmedir
Next.js ekibi, libheif düzeltmesinin sharp üzerinden bir framework sürümüne ulaşmasını beklemedi; AVIF optimizasyonunu kapattı. Bence doğru karar ve kendi playbook'unuza almaya değer: Açıklı kod başkasının sürüm döngüsünde yaşıyorsa, ona ulaşan yolu kaldırmak beklemekten iyidir.
Bu commit'te, optimizer üzerinden istenen AVIF bir kaynak görsel orijinal dosya olarak geri dönüyor: aynı byte'lar, yeniden boyutlandırma yok, hâlâ AVIF. placeholder="blur" isteyen statik AVIF import'ları ise boş bir placeholder'a düşüyor. Kapatılan şey sizin formats ayarınız değil. Kullanıcılarınız AVIF dosya yüklüyorsa ya da remote host'lardan AVIF çekiyorsanız, eskiden yeniden boyutlandırılmış dosya aldığınız yerlerde tam boyutlu dosyalar görmeyi bekleyin ve biri performans ticket'ı açmadan önce o sayfalara staging'de bir göz atın.
Planlı sürümler ve tarihin neden öne çekildiği
Next.js, 20 Ağustos'ta Temmuz'da duyurduğu planlı güvenlik sürümü süreci kapsamında bir ön duyuru yayınlamıştı: bir kritik açık, 16.3.3 ve 15.5.24 sürümleri 26 Ağustos'ta çıkacaktı. Ekip upstream bir bağımlılıkta ek bir kritik sorun bulunca sürüm bugüne çekildi.
Planlı sürüm modelini seviyorum. Tarihin önceden bilinmesi, bir lead'in yama penceresi ayırmasına, nöbetçi kişiyi uyarmasına ve advisory yayınlanmadan önce deploy pipeline'ını yeşile çekmesine imkan veriyor. Ama bu tarih bir sözleşme değil, bir planlama hedefi. Onu "en geç bu tarihte" olarak okuyun ve daha erken hazır olun.
Windows açığı bir migration tuzağı
İkinci açık belirli bir kombinasyon gerektiriyor: iki router birden, Cache Components yok, Windows dosya sistemi. Kulağa dar bir senaryo gibi geliyor, ta ki iki router'ı birlikte kimin çalıştırdığını sorana kadar: genellikle Pages Router'dan App Router'a kademeli migration'ın ortasındaki bir ekip. Sahibi olduğunuz bir uygulama bu tarife uyuyorsa geçici çözüm yok. Ya yamayı geçin ya da uygulamayı bir Linux host'a taşıyın.
Ben ne yapıyorum
Kendi host ettiğim Next.js uygulamaları nginx ve systemd arkasında bir Linux VPS üzerinde çalışıyor, dolayısıyla Windows açığı onlara ulaşmıyor. Acil olarak ele aldığım AVIF açığı. Herhangi bir ekip için liste kısa:
- Tüm Next.js uygulamalarının ve sürümlerinin envanterini çıkarın. Aylardır kimsenin dokunmadıkları da dahil her repoda
npm ls nextçalıştırın. - 16.3.3 veya 15.5.24'e yükseltin. Advisory yamalı sürümleri yalnızca bu iki hat için listeliyor; daha eski her şey basit bir patch bump değil, bir yükseltme planı gerektiriyor.
- Windows üzerinde çalışan tüm Next.js sunucularını bulun ve router'ları karıştırıp karıştırmadıklarını kontrol edin.
- Görsel optimizer'ı neyin beslediğini gözden geçirin: remote host'lar, kullanıcı yüklemeleri, kontrolünüzde olmayan her şey.
- Yükseltmeden sonra AVIF kaynak sunan sayfaları staging'de kontrol edin.
Kaynaklar
Bu yazıda yararlanılan birincil kaynaklar.
- nextjs.org/blog/august-2026-security-release (yeni sekmede açılır)
- nextjs.org/blog/upcoming-nextjs-security-release-august-2026 (yeni sekmede açılır)
- github.com/vercel/next.js/security/advisories/GHSA-2xp9-vwfh-vxw4 (yeni sekmede açılır)
- github.com/vercel/next.js/commit/3a15b4ac6ac8e70b1a9b18ecc18e8434462899b3 (yeni sekmede açılır)
- nextjs.org/docs/app/api-reference/components/image (yeni sekmede açılır)