Node.js adalah tulang punggung banyak backend modern di Indonesia: API e-commerce, layanan fintech, aplikasi pemerintah daerah, hingga server rendering untuk Next.js dan Nuxt. Karena itu, setiap rilis keamanan Node.js bukan sekadar urusan tim platform, melainkan urusan bisnis. Pada 29 Juli 2026, proyek Node.js merilis perbaikan untuk 11 kerentanan sekaligus pada tiga jalur rilis yang masih didukung. Artikel ini membedah isi rilis tersebut, menjelaskan mengapa komponen seperti HTTP/2 dan Permission Model penting, dan membahas isu yang lebih sering terabaikan: ribuan server yang masih menjalankan Node 18 dan Node 20 yang sudah tidak menerima patch.
Ringkasan Rilis 29 Juli 2026
Menurut pengumuman resmi di nodejs.org, rilis keamanan ini sempat dijadwalkan 28 Juli, lalu bergeser sehari karena kendala infrastruktur dan kebutuhan pengujian. Versi yang diperbaiki adalah v22.23.2, v24.18.1, dan v26.5.1. Dari 11 CVE, tiga berstatus High, lima Medium, dan tiga Low. Selain itu, dependensi bawaan ikut diperbarui: undici (8.9.0, 7.29.0, dan 6.28.0 untuk jalur 26.x, 24.x, dan 22.x) serta llhttp 9.4.3.
Pengumuman resmi juga menegaskan satu hal penting: versi End-of-Life (EOL) selalu ikut terdampak ketika ada rilis keamanan, hanya saja tidak akan pernah menerima perbaikannya. Kita akan kembali ke poin ini di bagian berikutnya.
Tiga Kerentanan Berstatus High
1. CVE-2026-56846: Kehabisan Memori Lewat HTTP/2
Blok header HTTP/2 yang "tertahan" dapat melewati batas maxSessionMemory, sehingga penyerang jarak jauh dapat memicu kehabisan memori pada server. Jalur yang terdampak adalah 24.x dan 22.x. Dampak praktisnya adalah denial of service: proses Node.js dimatikan oleh sistem operasi atau orkestrator, lalu layanan terganggu. Bagi layanan yang langsung membuka HTTP/2 ke internet, ini risiko yang nyata.
2. CVE-2026-56848: Use-After-Free pada nghttp2
Pemanggilan ulang (re-entrant) fungsi nghttp2_session_mem_send() saat nghttp2_session_mem_recv() sedang berjalan menyebabkan heap-use-after-free. Jalur 26.x, 24.x, dan 22.x semuanya terdampak. Kerentanan kelas memori seperti ini pada tingkat paling dasar menimbulkan crash, dan pada kondisi tertentu kelas bug ini dapat berkembang menjadi hal yang lebih serius. Rilis resmi mengklasifikasikannya High, sehingga patch sebaiknya diperlakukan prioritas.
3. CVE-2026-58043: Permission Model Memberi Akses Terlalu Luas
Permission Model adalah fitur Node.js yang memungkinkan kita membatasi akses proses ke sistem berkas, misalnya lewat --allow-fs-read dan --allow-fs-write. Pada CVE ini, pencocokan path melebihi batas awalan (prefix) pada radix tree sehingga penyerang dapat membaca atau menulis path di luar daftar izin. Ini penting karena fitur tersebut sering dipakai sebagai lapisan sandbox: jika sandbox bocor, asumsi keamanan seluruh deployment ikut runtuh.
Kerentanan Medium dan Low yang Tetap Layak Diperhatikan
- CVE-2026-56850 dan CVE-2026-58040 (Medium, HTTPS Agent): yang pertama memungkinkan identitas klien mTLS dipakai ulang untuk permintaan dengan sertifikat berbeda akibat tabrakan kunci pada array objek PFX. Yang kedua adalah perbaikan tidak lengkap atas CVE-2026-48934: reuse sesi TLS dapat melewati verifikasi hostname di antara kebijakan identitas yang berbeda. Keduanya relevan bagi layanan yang memanggil API mitra dengan mTLS, misalnya integrasi perbankan.
- CVE-2026-58041 (Medium, node:sqlite): iterator usang dari
DatabaseSync#createTagStore()dapat mengeksekusi ulang statement yang ter-cache setelah reset atau rebind. Hanya berlaku pada 26.x dan 24.x. - CVE-2026-58042 (Medium, dns):
dns.resolveAny()abort ketika respons DNS memuat lebih dari 256 record A. - CVE-2026-58045 (Medium, node:zlib): nilai
byteLengthpada TypedArray yang dipalsukan memicu assertion crash pada API sinkron. - CVE-2026-56847 dan CVE-2026-58039 (Low, Permission Model):
trace_eventsdanprocess.reportdapat menulis berkas di luar path yang diizinkan oleh--allow-fs-write. - CVE-2026-58044 (Low, HTTP Parser): header di atas batas
maxHeadersCountataumaxHeaderPairstidak terlihat oleh aplikasi tetapi tetap dipakai secara internal, yang membuka peluang request smuggling pada proxy yang meneruskan permintaan.
Pola yang terlihat jelas: banyak kerentanan berada di perbatasan antara komponen, seperti HTTP/2, TLS, DNS, dan sistem izin. Ini mengingatkan bahwa runtime bukan kotak hitam yang aman dengan sendirinya.
Masalah yang Lebih Besar: Node 18 dan Node 20 yang Sudah EOL
Node.js 18 mencapai akhir masa dukungan pada 30 April 2025, dan Node.js 20 pada 30 April 2026. Menurut analisis HeroDevs, dua jalur ini tetap diunduh dalam jumlah besar: pada Juli 2026 gabungan keduanya melampaui 136 juta unduhan, dengan Node 20 saja sekitar 103,8 juta. Rilis keamanan 29 Juli tidak membawa perbaikan upstream apa pun untuk keduanya, padahal sebagian besar CVE di atas, termasuk dua celah HTTP/2 dan masalah TLS, mempengaruhi kedua jalur tersebut. Tiga CVE Permission Model tidak mempengaruhi Node 18 karena fitur itu baru hadir di Node 20, dan celah node:sqlite tidak berlaku bagi keduanya.
Implikasinya sederhana: setiap bulan sebuah server tetap berjalan di Node 20 tanpa patch, jendela eksposur terhadap celah yang sudah dipublikasikan bertambah, dan penyerang justru mendapat daftar kerentanan yang rapi dari pengumuman resmi.
Di lapangan Indonesia, alasan umum bertahan di versi lama adalah dependensi yang belum kompatibel, imej Docker yang dibekukan, dan anggapan bahwa "aplikasinya masih jalan baik-baik saja". Namun dari sisi risiko, menjalankan runtime yang tidak lagi ditambal adalah keputusan yang perlu dicatat dan dipertanggungjawabkan.
Perubahan Jadwal Rilis ke Depan
Dilaporkan oleh sejumlah media teknis, Node.js akan beralih ke model rilis mayor tahunan mulai Node.js 27 (rilis kandidat pertama diharapkan kuartal pertama 2027): rilis mayor tiap April, penetapan LTS pada Oktober, dukungan Active LTS tiga tahun, dan EOL enam bulan setelahnya. Karena sumber ini sekunder, tim Anda sebaiknya memeriksa jadwal terbaru di repositori rilis resmi Node.js sebelum menyusun roadmap. Prinsipnya tetap: rencanakan upgrade sebagai pekerjaan rutin, bukan proyek darurat.
Langkah Tindakan untuk Tim Engineering
- Inventarisasi versi runtime. Cek di semua lingkungan, bukan hanya produksi. Periksa juga imej Docker dasar dan pipeline CI.
node --version
# di kontainer
docker run --rm <nama-image> node --version
# kunci versi di package.json
# "engines": { "node": ">=24.18.1" }
- Upgrade ke versi terpatch. Gunakan 22.23.2, 24.18.1, atau 26.5.1 sesuai jalur Anda. Untuk proyek yang masih di Node 20 atau 18, targetkan lompatan ke jalur yang masih didukung.
- Prioritaskan layanan yang mengekspos HTTP/2 langsung ke internet. Jika patch belum bisa dilakukan segera, letakkan layanan di balik reverse proxy atau CDN yang mengakhiri HTTP/2 di tepi dan pertimbangkan membatasi fitur yang tidak dipakai.
- Jangan menjadikan Permission Model satu-satunya sandbox. Padukan dengan isolasi tingkat kontainer, pengguna non-root, dan sistem berkas read-only.
- Audit penggunaan mTLS dan HTTPS Agent. Pastikan klien yang menggunakan beberapa sertifikat identitas sudah diuji setelah upgrade.
- Perbarui dependensi turunan. Pastikan undici dan llhttp yang terbawa sudah sesuai versi di atas, lalu jalankan
npm auditdan pindai imej kontainer. - Jika upgrade tidak mungkin dilakukan sekarang, catat sebagai risiko yang diterima secara formal, tetapkan tenggat migrasi, dan pertimbangkan layanan dukungan komersial untuk versi EOL.
Konteks Hukum dan Kepatuhan di Indonesia
Bagi organisasi yang memproses data pribadi, patching runtime berkaitan langsung dengan kewajiban pengendali data untuk menjaga keamanan data pribadi dalam UU Pelindungan Data Pribadi (UU No. 27 Tahun 2022). Bila celah yang tidak ditambal berujung pada kebocoran data, kewajiban pemberitahuan kepada subjek data dan lembaga berwenang dalam 3x24 jam (Pasal 46) berlaku, dan catatan manajemen kerentanan Anda akan menjadi bukti penting dalam menilai kelalaian. Standar seperti ISO/IEC 27001:2022 (kontrol 8.8 tentang manajemen kerentanan teknis) juga mensyaratkan proses yang terdokumentasi. Di sisi lain, mengeksploitasi celah-celah ini tanpa izin terhadap sistem orang lain berpotensi melanggar Pasal 30 UU ITE; pengujian hanya boleh dilakukan pada sistem milik sendiri atau dengan otorisasi tertulis.
Penutup
Rilis 29 Juli 2026 mengingatkan kita pada dua kebenaran lama: runtime adalah bagian dari permukaan serangan, dan versi yang tidak didukung adalah utang keamanan yang bunganya terus berjalan. Langkah paling bernilai minggu ini bukan membeli alat baru, melainkan mengetahui persis versi Node.js yang berjalan di setiap layanan, lalu membuat jadwal upgrade yang tegas. Tim Siberindo dapat membantu audit inventaris runtime, penilaian risiko, dan perencanaan migrasi agar sistem Anda tetap aman dan patuh.
Sumber utama: pengumuman resmi Node.js Security Releases 29 Juli 2026 (nodejs.org); analisis HeroDevs tentang EOL Node.js 18 dan 20; ringkasan teknis oday-bakkour.com; Business Tech Navigator (model rilis tahunan, sumber sekunder).



