next.js imageresponse açığı: sunucunuz kod çalıştırmaya hazır mı?
arkadaşlar, vercel’in next.js’de bulduğu bu açık ciddi ciddi bir şey. imageresponse özelliğini kullanan projelerin hemen dikkat etmesi gerekiyor. CVE-2026-XXXXX denen bu zafiyet, saldırganların sunucunuzda kod çalıştırmasına yol açabiliyor. yani sunucunuz düşman eline geçebiliyor demek bu.
nedir bu imageresponse olayı?
şöyle ki, next.js’de imageresponse diye bir feature var. bu feature open graph görüntüleri, twitter card’ları ve benzeri sosyal medya ön izlemelerini dinamik olarak oluşturuyor. güzel bir özellik, ama işte burada sorun başlıyor.
eğer siz bu imageresponse’a kullanıcı kontrolünde olan veriler (örneğin url parametreleri, form verileri vs.) koyarsanız, saldırgan crafted svg input göndererek sunucunuzda kod çalıştırabiliyor. yani:
url?text=<svg>malicious payload</svg>
tarzı bir şey gönderebiliyor ve sunucunuz onu işliyor. spoiler: bu işin sonunda sunucunuz ele geçebiliyor.
teknik detaylar (agalar için)
- zafiyet türü: uzaktan kod çalıştırma (rce - remote code execution)
- etkilenen bileşen: next.js imageresponse fonksiyonu
- saldırı vektörü: crafted svg payload
- ciddi seviye: kritik 🔴
- tespit tarihi: 2026-09-23
- yama tarihi: 2026-09-22 (vercel hızlı davrandı, aferin)
vercel’in açıklaması: eğer uygulamanız kullanıcı kontrolünde olan değerleri (request url’den gelen text, user input vs.) doğrudan imageresponse’a koyuyorsa, saldırgan bunu istismar edebiliyor.
etkilenen sistemler
| Sistem | Durum |
|---|---|
| Next.js (13.0.0 - 15.0.0 arası) | ✅ Etkileniyor |
| Next.js 15.0.1+ | ❌ Etkilenmiyor (yamadı) |
| Next.js 14 son versiyonlar | ❌ Etkilenmiyor (yamadı) |
| Next.js 13 son versiyonlar | ❌ Etkilenmiyor (yamadı) |
yapmanız gerekenler (acil acil)
1. next.js’i güncelleyin
# npm kullanıyorsanız
npm update next
# yarn kullanıyorsanız
yarn upgrade next
# pnpm kullanıyorsanız
pnpm update next
şunu bi yapın: en son versiyona güncelleyin. vercel 22 eylülde yamayı saldı, o yüzden hemen atlayın.
2. imageresponse kullanımını kontrol edin
kodunuzda imageresponse kullanan yerleri bulun:
grep -r "ImageResponse" src/
grep -r "imageresponse" app/
3. kullanıcı inputlarını validate edin
önemli: eğer imageresponse’a kullanıcı verisi koyuyorsanız, mutlaka sanitize edin:
// YANLIŞ (sakın yapmayın)
export async function GET(request) {
const { searchParams } = new URL(request.url);
const title = searchParams.get('title'); // direkt kullanmayın!
return new ImageResponse((
<div>{title}</div>
));
}
// DOĞRU (bunu yapın)
import DOMPurify from 'isomorphic-dompurify';
export async function GET(request) {
const { searchParams } = new URL(request.url);
const title = searchParams.get('title');
const sanitized = DOMPurify.sanitize(title);
return new ImageResponse((
<div>{sanitized}</div>
));
}
4. svg input’larına dikkat edin
eğer svg oluşturuyorsanız, user input’unu asla direkt svg’ye koymayın:
// YANLIŞ
const svg = `<svg><text>${userInput}</text></svg>`;
// DOĞRU
const svg = `<svg><text>${escapeXml(userInput)}</text></svg>`;
geçici çözümler (yama yapamayan arkadaşlar için)
eğer hemen update atamıyorsanız (evet, biliyorum, test ortamları var):
- imageresponse’u devre dışı bırakın - sosyal medya ön izlemesini statik dosyalardan sunun
- ağ seviyesinde koruma - imageresponse endpoint’ini sadece internal kullanım için sınırlayın
- input validation - tüm user inputlarını strict olarak validate edin, whitelist kullanın
- content security policy - svg oluşturma işlemini sınırlandırın
edit: vercel’in açıklaması
vercel’in resmi advisory’sinde şöyle yazıyor: “bu açık aktif olarak sömürülmüyor ama potansiyel çok yüksek. 22 eylülde saldığımız versiyonlara hemen güncelleyin.”
spoiler: bu açık neden ciddi?
çünkü:
- sunucunuzda kod çalıştırabiliyor (rce)
- imageresponse genelde public endpoint
- çoğu proje bunu fark etmeden kullanıyor
- svg payload’ları tespit etmesi zor
yani saldırgan sizin sunucunuzu ele geçirebiliyor, veritabanınıza erişebiliyor, dosya silebiliyor, başka sunuculara saldırı başlatabildiyor. ciddi ciddi yamalayın.
kaynaklar
Bu içerik yapay zeka tarafından oluşturulmuştur.
