8 poin oleh GN⁺ 2025-12-04 | 1 komentar | Bagikan ke WhatsApp
  • 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.json harus dijaga tetap terbaru
  • 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

 
GN⁺ 2025-12-04
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 RPC
    Framework 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

    • Ini tampaknya sekadar masalah kelalaian
      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
    • Sebenarnya bukan semua endpoint yang diminta klien akan terekspos
      Hanya fungsi yang ditandai dengan "use server" yang diekspos, dan tim React juga sadar bahwa mereka sedang merancang sistem RPC
      Bug seperti ini sangat mungkin muncul juga di sistem RPC lain (saya kontributor React)
    • Fakta bahwa ini tetap terjadi meski sudah ada peringatan pada akhirnya hanya bisa dilihat sebagai implementasi yang ceroboh
    • Dari sudut pandang pengguna biasa, saya jadi penasaran apakah aman jika tidak memakai pendekatan ini
      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

    • Jika perbaikannya adalah penambahan pemeriksaan hasOwnProperty, kemungkinan serangannya merujuk ke properti di rantai prototipe (__proto__ dan sejenisnya)
    • Jika kalimat “klien dapat memanggil fungsi server” memang fitur yang dimaksudkan, desainnya terasa cukup mengerikan
  • 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

    • Atau mungkin penyebabnya adalah commit ini (tertulis “memperbaiki kerentanan keamanan kritis”)
  • Vercel sudah memblokir pola permintaan berbahaya dengan perlindungan tingkat platform
    Lihat pengumuman
    Cloudflare juga melakukan respons proaktif dengan aturan WAF

    • Mereka telah bekerja sama dengan beberapa mitra untuk menerapkan langkah mitigasi dini
      Meski begitu, tetap sangat disarankan untuk segera memperbarui dependensi Next, React, dan meta-framework lain
    • Pengumuman respons dari Netlify di sini dan
      tulisan blog Deno Deploy/Subhosting di sini juga layak dibaca
    • Saya sudah patch dan build ulang sendiri, dan sebagai antisipasi jika ada yang terlewat saya juga menambahkan aturan Crowdsec WAF
  • Saya mencoba mereproduksi kerentanannya dengan merujuk ke repo PoC

    • Bahkan dengan react-server-dom-webpack yang sudah dipatch, RCE tetap berjalan, jadi tampaknya mekanismenya tidak sepenuhnya tepat
      Akan bagus kalau ada demo di proyek Next.js yang nyata
    • Meski begitu, tulisan yang merangkum ini benar-benar mengesankan
  • 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

    • Paket yang terdampak, react-server-dom-webpack, dengan jelas menyatakan bahwa ia “eksperimental dan gunakan dengan risiko sendiri”
      Meski begitu, unduhan mingguannya tetap melampaui 310 ribu
    • Dalam insiden seperti ini, CVSS 10.0 harus ditulis dengan jelas agar tidak tertutup oleh pernyataan bernuansa PR
    • React memang digunakan sangat luas, tetapi React Server Components sendiri belum seumum itu
  • 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

    • Server Components tidak berhubungan langsung dengan SSR
      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 fetch
      Dengan 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
    • Saya menyesalkan bahwa React menjadi “framework default”
      Model berbasis compiler seperti milik Svelte atau React jauh lebih mudah ditangani
    • Pada dasarnya saya rasa masalahnya adalah keterbatasan bahasa JS dan kurangnya kompetisi
      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 .rs standar
      Jika JS tidak memperoleh ekstensibilitas seperti ini, web kemungkinan akan tetap menjadi lingkungan yang kompleks dan tidak efisien ke depannya
    • Saya suka hooks :)
    • RSC adalah upaya alternatif yang muncul karena SSR tidak berhasil dibuat cepat
      Mereka mencoba mengurangi beban sisi klien, tetapi rasanya itu pun gagal
  • Penjelasan rinci di blog React juga layak dibaca