Pendahuluan
Next.js telah muncul sebagai salah satu framework React paling populer untuk membangun aplikasi web modern, menawarkan fitur-fitur canggih seperti server-side rendering, rute API, dan kemampuan middleware. Namun, sebuah kerentanan kritis (CVE-2025-29927) baru-baru ini ditemukan yang memengaruhi fungsionalitas middleware, yang berpotensi memungkinkan penyerang untuk melewati mekanisme autentikasi dan otorisasi sepenuhnya.
Kerentanan ini sangat mengkhawatirkan karena middleware sering digunakan untuk mengimplementasikan pemeriksaan autentikasi, kontrol akses berbasis peran, dan tindakan keamanan lainnya. Ketika dikompromikan, hal itu dapat menyebabkan akses tidak sah ke sumber daya yang dilindungi, paparan data sensitif, dan berpotensi pengambilalihan aplikasi secara lengkap.

Penjelasan Kerentanan CVE-2025-29927
CVE-2025-29927 adalah kerentanan kritis di Next.js yang memungkinkan penyerang untuk sepenuhnya melewati pemeriksaan otorisasi berbasis middleware. Kerentanan ini berasal dari cacat implementasi dalam cara Next.js menangani header HTTP tertentu dalam permintaan.
Ketika sebuah permintaan menyertakan header x-middleware-prefetch
yang dibuat khusus, eksekusi middleware dapat dihindari sepenuhnya, memungkinkan akses langsung ke rute yang dilindungi. Kerentanan ini memengaruhi aplikasi yang hanya bergantung pada middleware untuk mengimplementasikan kontrol autentikasi dan otorisasi.
Detail Teknis CVE-2025-29927
Kerentanan ini mengeksploitasi cara Next.js memproses permintaan prefetch. Dengan mengatur header x-middleware-prefetch
ke 1
, penyerang dapat membuat Next.js memperlakukan permintaan tersebut sebagai operasi prefetch, yang dalam kondisi tertentu melewati pemeriksaan keamanan di middleware.
Seorang penyerang dapat mengeksploitasi kerentanan ini dengan permintaan HTTP sederhana seperti:
GET /dashboard HTTP/1.1
Host: vulnerable-app.com
x-middleware-prefetch: 1
Bahkan jika middleware berisi kode untuk mengalihkan pengguna yang tidak diautentikasi dari /dashboard
, permintaan ini akan melewati pemeriksaan itu dan berpotensi mendapatkan akses ke dashboard yang dilindungi.
Tautan Github ke masalah keamanan: https://github.com/vercel/next.js/security/advisories/GHSA-f82v-jwr5-mffw
Bukti Konsep
Eksploitasi ini mudah dan tidak memerlukan alat khusus selain kemampuan untuk mengirim permintaan HTTP khusus. Menggunakan alat seperti curl, seorang penyerang dapat mengeksekusi:
curl -H "x-middleware-prefetch: 1" https://vulnerable-app.com/dashboard
Permintaan sederhana ini berpotensi melewati pemeriksaan autentikasi dan mendapatkan akses ke konten yang dilindungi.
Versi Next.js Mana yang Terpengaruh?
Kerentanan ini memengaruhi versi Next.js hingga:
- 13.4.9 untuk Next.js 13
- 14.0.4 untuk Next.js 14
Aplikasi rentan jika mereka:
- Menggunakan middleware untuk pemeriksaan autentikasi atau otorisasi
- Berjalan pada versi Next.js yang terpengaruh
- Tidak memiliki pemeriksaan autentikasi tambahan di sisi server atau tingkat API
Kerentanan ini sangat mengkhawatirkan untuk aplikasi yang di-deploy pada platform serverless seperti Vercel, di mana middleware sering menjadi metode utama untuk mengimplementasikan autentikasi karena kemampuan fungsi Edge-nya.
Cara Mendeteksi Apakah Aplikasi Next.js Anda Rentan
Untuk menentukan apakah aplikasi Anda rentan, Anda dapat:
- Periksa versi Next.js Anda
- Uji rute yang dilindungi dengan header
x-middleware-prefetch: 1
- Tinjau implementasi middleware untuk ketergantungan tunggal pada middleware Next.js untuk kontrol keamanan
Dampak dari kerentanan ini bervariasi tergantung pada apa yang dilindungi oleh middleware:
- Dampak Rendah: Middleware digunakan untuk fitur non-keamanan seperti pengujian A/B atau analitik
- Dampak Sedang: Middleware melindungi konten yang tidak sensitif
- Dampak Tinggi: Middleware menjaga data sensitif, panel admin, atau informasi keuangan
- Dampak Kritis: Middleware sebagai satu-satunya lapisan autentikasi untuk seluruh aplikasi
Apa yang Harus Anda Lakukan di Tengah Masalah Keamanan Kritis Next.js
1. Perbarui ke Versi yang Ditambal
Mitigasi paling mudah adalah memperbarui ke versi yang ditambal:
- Next.js 13.4.10 atau lebih baru untuk Next.js 13
- Next.js 14.0.5 atau lebih baru untuk Next.js 14
2. Implementasikan Pertahanan Mendalam
Jangan hanya bergantung pada middleware untuk keamanan:
// pages/dashboard.js atau app/dashboard/page.js
export async function getServerSideProps(context) {
const session = await getSession(context);
if (!session) {
return {
redirect: {
destination: '/login',
permanent: false,
},
};
}
return {
props: { session },
};
}
3. Terapkan Validasi Header Kustom
Tambahkan validasi di middleware Anda untuk menolak permintaan dengan header yang mencurigakan:
export function middleware(request) {
// Reject requests with x-middleware-prefetch header
if (request.headers.get('x-middleware-prefetch')) {
return new NextResponse(null, { status: 403 });
}
// Regular middleware logic
// ...
}
4. Gunakan Edge Config untuk Mengontrol Akses
Untuk aplikasi yang di-deploy di Vercel, pertimbangkan untuk menggunakan Edge Config untuk memelihara daftar blokir IP atau pola permintaan yang berpotensi berbahaya.
Cara Bermigrasi dari Vercel ke Cloudflare

Jika Anda mempertimbangkan untuk memindahkan aplikasi Next.js Anda dari Vercel ke Cloudflare untuk meningkatkan keamanan.
Proyek ini dapat ditemukan di Github: https://github.com/ygwyg/diverce, dan berikut adalah panduan langkah demi langkah tentang cara menggunakan alat ini untuk bermigrasi dari Next.js ke Cloudflare:
1. Siapkan Aplikasi Next.js Anda
Pertama, pastikan aplikasi Anda kompatibel dengan Cloudflare Pages:
# Install the Cloudflare Pages adapter
npm install @cloudflare/next-on-pages
Perbarui next.config.js
Anda:
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
// Cloudflare Pages compatible settings
output: 'export',
images: {
unoptimized: true,
},
// Existing configuration...
};
module.exports = nextConfig;
2. Siapkan Cloudflare Pages
- Buat akun Cloudflare jika Anda belum memilikinya
- Navigasi ke Cloudflare Dashboard → Pages
- Hubungkan repositori GitHub/GitLab Anda
- Konfigurasikan pengaturan build:
- Perintah build:
npm run build
- Direktori output build:
.next
- Atur variabel lingkungan dari proyek Vercel Anda
3. Implementasikan Cloudflare Workers untuk Fungsionalitas Middleware
Buat file functions/_middleware.js
di proyek Anda:
export async function onRequest({ request, next, env }) {
// Get the URL from the request
const url = new URL(request.url);
// Authentication logic
// Example: Check authentication token
const token = request.headers.get('Authorization');
if (!token && url.pathname.startsWith('/dashboard')) {
return Response.redirect(new URL('/login', request.url), 302);
}
// Continue to the next middleware or the destination
return await next();
}
4. Konfigurasikan Pengaturan DNS
Perbarui pengaturan DNS Anda untuk mengarah ke Cloudflare:
- Di Cloudflare Dashboard, buka domain Anda
- Tambahkan catatan CNAME yang mengarah ke deployment Cloudflare Pages Anda
- Pastikan SSL/TLS diatur ke "Full" atau "Full (Strict)"
5. Implementasikan Tindakan Keamanan Tambahan
Manfaatkan fitur keamanan Cloudflare:
- Aktifkan Cloudflare WAF (Web Application Firewall)
- Konfigurasikan aturan pembatasan laju
- Siapkan Cloudflare Access untuk lapisan autentikasi tambahan
- Gunakan Cloudflare Workers untuk logika keamanan khusus
6. Uji dan Atasi Masalah
Sebelum bermigrasi sepenuhnya:
- Deploy ke lingkungan staging
- Uji semua rute dan fungsionalitas
- Verifikasi integrasi API masih berfungsi
- Periksa batasan khusus Cloudflare
Kesimpulan
CVE-2025-29927 mewakili kerentanan serius dalam middleware Next.js yang dapat sepenuhnya merusak keamanan aplikasi. Kemampuan untuk melewati autentikasi berbasis middleware dengan satu header HTTP menunjukkan mengapa pertahanan mendalam sangat penting dalam keamanan aplikasi web.
Untuk melindungi aplikasi Next.js Anda:
- Perbarui ke versi yang ditambal segera
- Implementasikan beberapa lapisan autentikasi
- Jangan hanya bergantung pada middleware untuk kontrol keamanan
- Pertimbangkan untuk mengimplementasikan aturan WAF untuk memblokir header yang mencurigakan
- Uji aplikasi Anda secara teratur untuk kerentanan keamanan
Jika Anda mempertimbangkan untuk pindah dari Vercel, Cloudflare menawarkan fitur keamanan yang kuat yang dapat membantu mengurangi kerentanan serupa di masa mendatang. Dengan memanfaatkan jaringan edge Cloudflare, kemampuan WAF, dan platform Workers, Anda dapat membangun aplikasi Next.js yang lebih aman dan tangguh.
Ingatlah bahwa keamanan adalah proses berkelanjutan—tetap mendapatkan informasi tentang kerentanan baru dan memelihara dependensi yang mutakhir sangat penting untuk melindungi aplikasi dan data pengguna Anda.
