← Kembali ke daftar

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

itadol5j

Nginx CVE-2026-42945

🚨 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

  1. Direktif rewritemengandung penangkapan tanpa nama $1/$2
  2. String penggantimengandung ?, memicu is_args = 1
  3. Tahap perhitungan panjang: menggunakan sub-mesin yang baru diinisialisasi, is_args = 0
  4. mengembalikan panjang asli: buffer heap yang dialokasikan terlalu kecil
  5. Tahap penyalinan data: menggunakan mesin utama, is_args = 1
  6. memanggil ngx_escape_uri: memperluas byte, meluapkan buffer
  7. 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