Kerentanan Nginx yang Bersembunyi 18 Tahun CVE-2026-42945: Analisis Lengkap Prinsip, PoC, dan Perbaikan

🚨 Kerentanan berisiko tinggi Nginx yang bersembunyi 18 tahun, CVE-2026-42945: prinsip, PoC, dan solusi perbaikan
Pada 13 Mei 2026, lembaga riset keamanandepthfirstbersama F5 mengungkap dengan resmi kerentanan NGINX paling berbahaya dalam sejarah—CVE-2026-42945:
- skor CVSS v4.0 9.2: termasuk kerentanan berisiko tinggi
- heap buffer overflow: dapat menyebabkan eksekusi kode jarak jauh (RCE)
- bersembunyi 18 tahun: ada di basis kode sejak 2008
- mempengaruhi 9,75 juta situs di seluruh dunia: lebih dari 2,54 juta situs web di China terdampak
- PoC telah dipublikasikan: Qianxin telah berhasil mereproduksinya
Ini adalahkerentanan historis di modul inti NGINX, penyerang hanya perlu mengirim satu permintaan HTTP yang dirancang khusus untuk mengambil alih server dari jarak jauh.
🔍 Ikhtisar Kerentanan
Informasi Dasar
| Atribut Kerentanan | Detail |
|---|---|
| Nomor Kerentanan | CVE-2026-42945 |
| Skor CVSS | v4.0: 9.2 | v3.1: 8.1 |
| Jenis Kerentanan | Heap-based Buffer Overflow (luapan buffer heap) |
| Jenis Ancaman | Eksekusi Kode Jarak Jauh (RCE), Penolakan Layanan (DoS) |
| Syarat Eksploitasi | Tanpa autentikasi, cukup menyusun permintaan HTTP |
| Komponen Terdampak | ngx_http_rewrite_module (modul bawaan inti NGINX) |
| Lembaga Penemu | depthfirst (ditemukan oleh sistem otomatis dalam 6 jam) |
Cakupan Dampak
- 9,75 juta situs di seluruh duniaterdampak
- 2,54 juta situs web di Chinaterdampak
- NGINX menayangkan sekitar 1/3 situs web dunia, cakupan dampaknya sangat luas
- Kode ditulis sejak2008, bersembunyi selama18 tahun
⚠️ Kondisi Pemicu
Ketiga kondisi harus terpenuhi bersamaan
Kerentanan terpicu ketikakonfigurasi memenuhi kombinasi kondisi tertentu:
| Kondisi | Penjelasan | Contoh |
|---|---|---|
| 1. Penangkapan PCRE tanpa nama | direktif rewrite menggunakan grup tangkapan tanpa nama | $1, $2, $3… |
| 2. String pengganti mengandung tanda tanya | string pengganti mengandung karakter ? | /profile.php?id=$1&tab=$2 |
| 3. Diikuti rewrite/if/set | direktif rewrite langsung diikuti oleh direktif lain | rewrite … last; if (…) { … } |
Contoh Konfigurasi yang Rentan
# 易受攻击配置
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# 后跟其他指令
if ($arg_debug) {
set $debug_flag 1;
}
Konfigurasi ini memenuhi ketiga kondisi sekaligus:penangkapan tanpa nama $1/$2, string pengganti mengandung ?, diikuti direktif if.
🔬 Prinsip Kerentanan
Inkonsistensi Status dalam Pemrosesan Dua Tahap
Mesin skrip NGINXmenggunakan pemrosesan dua tahap:
- Tahap pertama: menghitung ukuran buffer yang dibutuhkan
- Tahap kedua: menyalin data ke buffer
Inti kerentanan terletak padakesalahan pengelolaan flag is_args:
| Tahap | Status is_args | Logika Pemrosesan | Hasil |
|---|---|---|---|
| Tahap perhitungan panjang | is_args = 0 | mengembalikan panjang tangkapan asli | ukuran buffer diremehkan |
| Tahap penyalinan data | is_args = 1 | memanggil ngx_escape_uri, setiap byte diperluas menjadi 3 byte | heap buffer overflow |
Alur Rinci
- Direktif rewritemengandung penangkapan tanpa nama $1/$2
- String penggantimengandung ?, memicu is_args = 1
- Tahap perhitungan panjang: menggunakan sub-mesin yang baru diinisialisasi, is_args = 0
- mengembalikan panjang asli: buffer heap yang dialokasikan terlalu kecil
- Tahap penyalinan data: menggunakan mesin utama, is_args = 1
- memanggil ngx_escape_uri: memperluas byte, meluapkan buffer
- Data URI yang dikendalikan penyerangditulis ke area luapan
Metode Eksploitasi
Heap Feng Shui lintas permintaan:
- Body permintaan POSTmelakukan heap spray (karena URI tidak boleh mengandung byte null)
- Data luapanmerusak pointer cleanup dari ngx_pool_t yang bersebelahan
- memalsukan ngx_pool_cleanup_s, menunjuk ke system()
- Saat pool dihancurkanmemanggil system()
- mewujudkan RCE
Dampak ASLR
- ASLR aktif: hanya menyebabkan crash proses Worker (DoS)
- ASLR nonaktif: eksekusi kode jarak jauh (RCE) dapat tercapai
📊 Versi yang Terdampak
NGINX Open Source
| Rentang Versi | Versi Perbaikan |
|---|---|
| 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
NGINX Plus
| Rentang Versi | Versi Perbaikan |
|---|---|
| R32 – R36 | R36 P4, R35 P2, R32 P6 |
Komponen Terdampak Lainnya
- NGINX Instance Manager: 2.16.0 – 2.21.1
- NGINX App Protect WAF: 4.9.0 – 5.8.0
- NGINX Ingress Controller: 3.5.0 – 5.4.1
- NGINX Gateway Fabric: 1.3.0 – 2.5.1
- F5 DoS for NGINX: 4.8.0
🔥 Status PoC
PoC telah dipublikasikan
- Repositori GitHub:https://github.com/DepthFirstDisclosures/Nginx-Rift
- Qianxin telah mereproduksi: peneliti keamanan pusat intelijen ancaman berhasil mereproduksinya
- Detail teknis telah dipublikasikan: depthfirst merilis analisis teknis
- Eksploitasi di alam liar: belum ditemukan
Cara Menggunakan PoC
# 构建容器 ./setup.sh # 启动易受攻击的 NGINX 服务器 docker compose -f env/docker-compose.yml up # 执行 PoC 获取 Shell python3 poc.py --shell
✅ Solusi Perbaikan
Metode 1: Tingkatkan versi
# 升级到修复版本 NGINX Open Source >= 1.31.0 NGINX Open Source >= 1.30.1 NGINX Plus >= R32 P6 NGINX Plus >= R36 P4 # 升级后重启 NGINX nginx -s reload
Metode 2: Ubah konfigurasi (langkah mitigasi)
Gantigrup tangkapan tanpa namamenjadigrup tangkapan bernama:
# 易受攻击配置(未命名捕获) rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last; # 修复后配置(命名捕获) rewrite ^/users/(?[0-9]+)/profile/(?.*)$ /profile.php?id=$user_id&tab=$section last;
Grup tangkapan bernamatidak memicu kerentanan ini.
Metode 3: Periksa konfigurasi
Periksa apakah ada konfigurasi yang rentan:
# 搜索易受攻击的 rewrite 指令 grep -E "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/nginx.conf grep -rE "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/conf.d/
🔍 Proses Penemuan
Ditemukan oleh sistem otomatis
depthfirst, sistem analisis keamanannya:
- dalam 6 jammenemukan 5 masalah
- 4 di antaranya dikonfirmasi NGINX
- CVE-2026-42945adalah kerentanan yang paling parah
- dapat dilacak hingga tahun 2008, dan ada di hampir semua build standar
Kerentanan Terkait Lainnya
- CVE-2026-42946: masalah korupsi memori
- CVE-2026-40701: masalah korupsi memori
- CVE-2026-42934: masalah korupsi memori
📝 Kesimpulan
CVE-2026-42945adalah kerentanan berbahaya terbesar dalam sejarah NGINX:
- Bersembunyi 18 tahun: ada di basis kode sejak 2008
- CVSS 9.2: heap buffer overflow, dapat menyebabkan RCE
- Kondisi pemicu: direktif rewrite menggunakan penangkapan tanpa nama + string pengganti mengandung ? + diikuti direktif lain
- Cakupan dampak: 9,75 juta situs di seluruh dunia, 2,54 juta situs web di China
- PoC telah dipublikasikan: repositori GitHub + telah direproduksi oleh Qianxin
- Solusi perbaikan: tingkatkan versi atau gunakan grup tangkapan bernama
Kerentanan yang bersembunyi 18 tahun ini kini meledak; disarankan segera meningkatkan versi atau mengubah konfigurasi.
Pengumuman resmi:https://my.f5.com/manage/s/article/K000161019
Repositori PoC:https://github.com/DepthFirstDisclosures/Nginx-Rift
Analisis teknis:https://depthfirst.com/research/nginx-rift