needhelp
← Back to blog

NGINX Rift (CVE-2026-42945): Heap Overflow 18 Tahun di Modul Rewrite

by xingwangzhe
NGINX
CVE
Security
RCE
Heap Overflow
Web Server

NGINX Rift (CVE-2026-42945, CVSS 9.2): Heap buffer overflow kritis di modul rewrite NGINX, ditemukan secara otonom oleh sistem analisis AI depthfirst. Diperkenalkan di 2008 dan berdampak pada 18 tahun rilis NGINX, ini memungkinkan penyerang tidak terautentikasi mencapai remote code execution dengan satu permintaan HTTP yang direkayasa.


Kerentanan yang Bersembunyi di Tempat Terbuka

Pada 13 Mei 2026, F5 dan depthfirst bersama-sama mengungkapkan CVE-2026-42945 — heap buffer overflow kritis di ngx_http_rewrite_module NGINX. Kerentanan telah duduk di codebase sejak 2008, diperkenalkan di NGINX 0.6.27, mempengaruhi setiap versi berikutnya hingga 1.30.0.

Yang membuat penemuan ini luar biasa adalah cara ditemukannya: bukan oleh peneliti manusia yang mengaudit kode secara manual, tapi oleh sistem analisis kerentanan otonom depthfirst. Sistem AI diarahkan ke kode sumber NGINX, dan dalam enam jam ia menandai masalah heap overflow yang telah luput dari deteksi manusia selama 18 tahun.

Analisis Teknis Mendalam

Desain Two-Pass

Untuk memahami bug, Anda perlu memahami script engine NGINX. Saat NGINX mengevaluasi direktif rewrite atau set, ia beroperasi dalam dua pass:

  1. Length pass: Menghitung ukuran buffer total yang dibutuhkan
  2. Copy pass: Mengalokasikan buffer seukuran itu dan menulis data aktual

Kontraknya sederhana: pass 1 memberi tahu persis berapa byte yang harus dialokasikan, pass 2 menulis persis sebanyak itu. Jika keduanya tidak cocok — Anda mendapatkan heap overflow.

Akar Masalah: Flag is_args Yatim Piatu

Kerentanan ada di src/http/ngx_http_script.c. Ketika string pengganti direktif rewrite berisi tanda tanya (?), fungsi ngx_http_script_start_args_code mengatur flag pada script engine:

e->is_args = 1;

Masalahnya: flag ini tidak pernah di-reset. Ia tetap diatur pada engine utama (e) untuk sisa pemrosesan permintaan.

Dalam pass copy, setiap karakter yang bisa di-escape (+, %, &) meluas dari 1 byte menjadi 3 byte. Buffer berukuran untuk panjang mentah — penulisan melebihi alokasi.

Verifikasi Konfigurasi

Terminal window
grep -rn 'rewrite.*\?.*\$[0-9]' /etc/nginx/

Jika mengembalikan hasil, konfigurasi Anda terkena.

Mitigasi

Segera: Upgrade

Versi Tindakan
NGINX Open Source Upgrade ke 1.31.0 atau 1.30.1
NGINX Plus R36 Terapkan R36 P4

Workaround: Named Capture Groups

Ganti unnamed captures dengan named captures:

# Rentan
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=\$1&tab=\$2 last;
# Dimitigasi
rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;

Implikasi Lebih Luas: Kerentanan yang Ditemukan AI

CVE-2026-42945 penting bukan hanya karena keparahannya, tapi karena cara ditemukannya. Sistem AI otonom menemukan bug di codebase yang telah diaudit oleh ribuan engineer, peneliti keamanan, dan kontributor open source selama 18 tahun — dalam enam jam.

Kerentanan Ditemukan oleh Waktu
Copy Fail (Linux) Xint Code (AI) ~1 jam
CVE-2026-42945 (NGINX) depthfirst (AI) 6 jam

Referensi

Share this page