Kerentanan Eksekusi Kode Jarak Jauh (RCE) di React dan Next.js
(github.com/vercel)- Dilaporkan adanya kerentanan keamanan di React dan Next.js yang memungkinkan eksekusi kode jarak jauh (RCE)
- Masalah ini terjadi di dalam paket Next.js, dan penyerang dapat memicu eksekusi kode arbitrer melalui input berbahaya
- Vercel mengungkap kerentanan tersebut melalui advisori keamanan GitHub (GHSA-9qr9-h5gf-34mp) dan merilis versi pembaruan
- Pengguna harus meng-upgrade ke versi terbaru untuk memitigasi kerentanan ini
- Kasus ini kembali menyoroti pentingnya pengelolaan keamanan di tingkat framework
Ringkasan kerentanan RCE
- Ditemukan kerentanan yang memungkinkan eksekusi kode jarak jauh di lingkungan Next.js dan React
- Ada risiko penyerang dapat menjalankan kode JavaScript arbitrer di sisi server
- Kerentanan ini muncul dalam proses penanganan kode internal paket Next.js
- Penjelasan rinci tentang fungsi atau modul yang rentan tidak diungkapkan
Dampak dan respons
- Vercel secara resmi mengumumkan masalah ini melalui advisori keamanan GitHub (GHSA-9qr9-h5gf-34mp)
- Advisori tersebut dipublikasikan di bagian pengumuman keamanan repositori Next.js
- Versi yang terdampak tidak disebutkan secara spesifik, tetapi versi pembaruan telah dirilis
- Pengguna disarankan untuk meng-upgrade ke versi stabil terbaru
Advisori keamanan dan tindakan
- Semua proyek yang menggunakan paket Next.js perlu segera memeriksa versinya
- Versi Next.js di
package.jsonharus dijaga tetap terbaru
- Versi Next.js di
- Selain merilis versi yang telah diperbaiki, Vercel tidak menyebutkan langkah mitigasi tambahan
- Detail teknis kerentanan masih belum dipublikasikan, dan hanya informasi terbatas yang diberikan demi alasan keamanan
Pentingnya isu ini
- Kerentanan ini menunjukkan risiko eksekusi kode di lingkungan server-side rendering
- Operator layanan berbasis React dan Next.js harus menerapkan pembaruan keamanan secara berkala
- Kerentanan keamanan di tingkat framework dapat berdampak langsung pada keamanan seluruh aplikasi
1 komentar
Komentar Hacker News
Kerentanan kali ini adalah contoh ketika skenario terburuk yang sudah diperingatkan sejak pengenalan RSC/server actions benar-benar terjadi
Server men-deserialize input tak tepercaya dari klien apa adanya, lalu mencari modul dan nama export untuk dieksekusi
Ini bisa diblokir dengan patch
hasOwnProperty, tetapi masalah dasarnya adalah React tidak secara jelas menyadari bahwa ia sedang membuat lapisan RPCFramework RPC tradisional seperti gRPC atau SOAP memperjelas batas dengan skema eksplisit dan definisi layanan, tetapi React berisiko karena mengekspos semua API yang bisa dilihat bundler
Masalah keamanan akibat desain seperti ini kemungkinan besar akan terus terulang di masa depan
Bahkan jika ada skema eksplisit, itu tidak banyak membantu bila pada tahap terakhir input tak tepercaya tetap bisa merujuk ke objek apa pun dalam namespace server
Hanya fungsi yang ditandai dengan
"use server"yang diekspos, dan tim React juga sadar bahwa mereka sedang merancang sistem RPCBug seperti ini sangat mungkin muncul juga di sistem RPC lain (saya kontributor React)
Tetapi mempertahankan repo privat lama juga bukan pilihan yang bagus
Next hanya punya satu keunggulan, yaitu build statis
Jika dukungan itu dihentikan, tidak ada lagi alasan untuk memakainya
Menurut advisori keamanan dari Facebook/Meta, terdapat kerentanan remote code execution (RCE) pra-autentikasi pada React Server Components versi 19.0.0~19.2.0
Dalam pengumuman di blog resmi React juga dijelaskan bahwa, karena strukturnya memungkinkan klien memanggil fungsi server, penyerang dapat membuat permintaan HTTP berbahaya untuk mengeksekusi kode arbitrer di server
hasOwnProperty, kemungkinan serangannya merujuk ke properti di rantai prototipe (__proto__dan sejenisnya)Commit perbaikannya tampaknya adalah commit ini
Tampaknya commit itu di-squash bersama beberapa perubahan lain sehingga detailnya tertutupi
Di kode terlihat pola pembatasan daftar fungsi yang terekspos dengan pendekatan whitelist di empat tempat
Vercel sudah memblokir pola permintaan berbahaya dengan perlindungan tingkat platform
Lihat pengumuman
Cloudflare juga melakukan respons proaktif dengan aturan WAF
Meski begitu, tetap sangat disarankan untuk segera memperbarui dependensi Next, React, dan meta-framework lain
tulisan blog Deno Deploy/Subhosting di sini juga layak dibaca
Saya mencoba mereproduksi kerentanannya dengan merujuk ke repo PoC
react-server-dom-webpackyang sudah dipatch, RCE tetap berjalan, jadi tampaknya mekanismenya tidak sepenuhnya tepatAkan bagus kalau ada demo di proyek Next.js yang nyata
Sampai muncul ungkapan “tidak ada RCE tanpa Vercel”, insiden kali ini memperlihatkan korelasi antara lingkungan hosting dan keamanan
Skor CVE 10.0 adalah angka yang mengejutkan untuk proyek yang dipakai seluas ini
Meski begitu, unduhan mingguannya tetap melampaui 310 ribu
Sulit memahami kenapa tim React menghabiskan waktu untuk fitur yang membingungkan seperti ini
Saya juga ragu apa keunggulannya dibanding SSR, dan seberapa besar peningkatan performanya
Sejak pengenalan Hooks, pengalaman pengembang justru memburuk, tetapi alih-alih memperbaikinya mereka malah menambah kompleksitas lain
Saya lebih berharap mereka memungkinkan alur kontrol native JS digunakan secara alami dalam logika komponen
Saya melihatnya sebagai lapisan BFF (Backend for Frontend) yang terkomponenkan
Setiap fragmen UI terhubung langsung dengan logika backend yang sesuai, sehingga bisa mengambil data tanpa pemanggilan
fetchDengan begitu frontend dan backend lebih mudah berevolusi bersama, dan hanya data yang diperlukan yang bisa dimuat secara rinci
Pada akhirnya, logika server khusus UI bisa menyatu secara alami ke dalam struktur komponen
Model berbasis compiler seperti milik Svelte atau React jauh lebih mudah ditangani
Vue, Svelte, Angular, dan lainnya semuanya memerlukan compiler dan ekstensi berkas terpisah
Sementara React/JSX sudah mendapat keistimewaan sejak tahap preprocessor
Rust menyelesaikan masalah semacam ini dengan sistem macro — misalnya Leptos atau Yew mendukung template JSX atau HTML di dalam berkas
.rsstandarJika JS tidak memperoleh ekstensibilitas seperti ini, web kemungkinan akan tetap menjadi lingkungan yang kompleks dan tidak efisien ke depannya
Mereka mencoba mengurangi beban sisi klien, tetapi rasanya itu pun gagal
Penjelasan rinci di blog React juga layak dibaca