NGINX Rift (CVE-2026-42945): Heap Overflow 18 Tahun di Modul Rewrite
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:
- Length pass: Menghitung ukuran buffer total yang dibutuhkan
- 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
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:
# Rentanrewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=\$1&tab=\$2 last;
# Dimitigasirewrite ^/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
- depthfirst NGINX Rift Research: https://depthfirst.com/research/nginx-rift
- F5 Security Advisory: https://my.f5.com/manage/s/article/K000161019
- NGINX Security Advisories: https://nginx.org/en/security_advisories.html