EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / Security Update / nginx 1.30.6/1.31.7 แก้ 5 CVE รวม CVE-2026-15176 (alias+rewrite)
Security Update

nginx 1.30.6/1.31.7 แก้ 5 CVE รวม CVE-2026-15176 (alias+rewrite)

โดย Ton-Or ·14 ต.ค. 2026·อ่าน 8 นาที
nginx 1.30.6/1.31.7 แก้ 5 CVE รวม CVE-2026-15176 (alias+rewrite)

ใครรัน nginx ให้เช็กรุ่นแล้วอัปเป็น stable 1.30.6 หรือ mainline 1.31.7 ขึ้นไป และจำไว้ว่าต้อง restart ไม่ใช่แค่ reload ถึงจะได้ binary ใหม่

สรุปใน 1 นาที

อาการ/ปัญหา
nginx มีช่องโหว่ 5 รายการที่แก้ใน 14 ต.ค. 2026 คือ alias+rewrite overflow, script evaluation overflow, HTTP/3 body injection, TLS ticket forgery และ AIO use-after-free
ใครควรอ่าน
nginx รุ่น 1.30.5 และ 1.31.6 ลงไป ตามช่วงของแต่ละ CVE โดยตัว HTTP/3 และ TLS ticket กระทบช่วงรุ่นกว้างมาก
ทางแก้แบบสั้น
อัปเป็น stable 1.30.6 หรือ mainline 1.31.7 ขึ้นไป แล้ว restart เพื่อให้ master process ใช้ binary ใหม่
ข้ามไปขั้นตอน

พอดีเปิดหน้า security advisories ของ nginx.org แล้วเจอว่า stable 1.30.6 กับ mainline 1.31.7 ที่ออกเมื่อ 14 ต.ค. 2026 อุดช่องโหว่ไป 5 รายการพร้อมกัน เลยนั่งไล่ดูทั้งปี 2026 ด้วยว่ามีอะไรค้างอยู่อีก ปรากฏว่าหน้านั้นมี advisory ที่เป็น CVE ปี 2026 รวม 26 รายการ ออกมา 8 รุ่นตั้งแต่กุมภาพันธ์ถึงตุลาคม ใครอัปเดตตามรอบมาตลอดก็ไม่ต้องห่วง แต่ใครที่ปล่อย nginx ทิ้งไว้ตั้งแต่ต้นปีมีของค้างเยอะ

5 CVEแก้ใน 14 ต.ค.
1.30.6/1.31.7รุ่นที่ปลอดภัย
26 รายการadvisory ปี 2026
ไม่อยู่ใน KEVถึง 3 พ.ย. 2026

เกิดอะไรขึ้น

ห้ารายการที่ออกพร้อม 1.30.6 และ 1.31.7 ตามข้อความใน CHANGES ของ nginx

  • CVE-2026-15176 buffer overflow ใน worker เมื่อใช้ alias แล้ว URI ถูก rewrite เปลี่ยน จากนั้นถูก map ไปเป็น path ของไฟล์ กระทบ 0.1.29 ถึง 1.31.6
  • CVE-2026-93479 buffer overflow ตอนประเมิน string expression ที่มีตัวแปร ซึ่งกระทบการคำนวณ document root และ request logging ทั้งโมดูล http และ stream กระทบ 1.31.2 ถึง 1.31.6 และ 1.30.0 ถึง 1.30.5
  • CVE-2026-95101 เมื่อใช้ HTTP/3 ส่วนหนึ่งของ frame ที่ไม่รู้จักอาจถูกนับเป็น request body ทำให้ข้ามขีดจำกัด client_max_body_size หรือฉีดข้อมูลเข้า request ที่ proxy ต่อไปได้ กระทบ 1.25.0 ถึง 1.31.6
  • CVE-2026-97629 เมื่อใช้ TLS session ticket key rotation มี key หนึ่งไม่ได้ถูก initialize อาจทำให้ปลอม session ได้ กระทบ 1.23.2 ถึง 1.31.6
  • CVE-2026-97205 use-after-free เมื่อใช้ asynchronous file I/O (AIO) ในบางการตั้งค่า ถ้าหน้า SSI มีคำสั่ง include virtual กระทบ 0.8.11 ถึง 1.31.6

อีกตัวที่ออกก่อนหน้านี้คือ CVE-2026-90439 เมื่อ 15 ก.ย. 2026 (1.31.6 และ 1.30.5) เป็น heap overflow ใน worker เมื่อใช้ HTTP/3 กับ OpenSSL 3.5.0 และเก่ากว่า ในบาง config กระทบ 1.29.2 ถึง 1.31.5 ใครอัปเป็น 1.30.6 หรือ 1.31.7 จะได้ตัวนี้ไปด้วย

ห้า CVE ของ 14 ต.ค. แยกตามสิ่งที่อยู่ใน configalias+rewriteCVE-2026-15176buffer overflowประเมินตัวแปรCVE-2026-93479buffer overflowHTTP/3CVE-2026-95101body injectionTLS ticketCVE-2026-97629session forgeryAIO + SSICVE-2026-97205use-after-freestable 1.30.6 หรือ mainline 1.31.7 ขึ้นไป แล้ว restart nginxระดับ medium ทั้งห้าตามหน้า security advisories ของ nginx.org
ทั้งห้ารายการแก้ด้วยการอัปเป็นรุ่นเดียวกัน ส่วนการเช็กว่าเครื่องไหนเข้าเงื่อนไขขึ้นกับ directive ใน config

ระดับความรุนแรง

หน้าของ nginx.org ให้ห้ารายการนี้เป็น medium ทั้งหมด และหน้านั้นไม่มีคะแนน CVSS ส่วนหน้า advisory ของ F5 ที่ลิงก์ไว้ผมเปิดแล้วไม่แสดงเนื้อหา (เป็นเปลือกของพอร์ทัลที่โหลดไม่ขึ้น) เลยไม่ใส่คะแนนที่ผมยืนยันไม่ได้ ไม่มีรายการไหนในชุดนี้อยู่ใน KEV ของ CISA ตามไฟล์ที่ปล่อยเมื่อ 3 พ.ย. 2026 และหน้าของ nginx ก็ไม่ได้ระบุว่าถูกโจมตีจริง

ไม่มีคะแนน CVSS บนหน้า nginx.org

หน้า advisories ให้แค่ระดับ (medium, Major) กับรุ่นที่กระทบและรุ่นที่แก้ ผมเลยไม่เขียนคะแนนที่หาแหล่งยืนยันไม่ได้ ถ้าองค์กรต้องการคะแนนให้เปิดลิงก์ advisory ของ F5 ในหน้าเดียวกันด้วยบราวเซอร์

medium ในที่นี้ไม่ได้แปลว่าปล่อยได้ ตัว buffer overflow ใน worker อย่างน้อยทำให้ worker ล่มได้ และ nginx เองก็ไม่ได้ตัดความเป็นไปได้อื่นไว้ในข้อความ ที่ทำให้ผมจัดลำดับความสำคัญสูงคือ CVE-2026-95101 กับ CVE-2026-97629 เพราะช่วงรุ่นที่กระทบกว้างมาก (ตั้งแต่ 1.25.0 และ 1.23.2) ใครเปิด HTTP/3 หรือ terminate TLS ที่ nginx เข้าข่ายไว้ก่อน

ใครโดนบ้าง ทั้งปี 2026

ตารางนี้รวมจากหน้า advisories และ CHANGES วันที่คือวันออกรุ่น mainline ใน CHANGES ส่วนรุ่นที่แก้ของ stable ดูจากช่อง "แก้ใน" ในหน้า advisories

วันออกรุ่น แก้ใน (mainline / stable) รายการ
4 ก.พ. 1.29.5 / 1.28.2 CVE-2026-1642 SSL upstream injection
24 มี.ค. 1.29.7 / 1.28.3 6 ตัว: dav, mp4 สองตัว, mail (CRAM-MD5/APOP), auth_http กับ XCLIENT, OCSP ใน stream
13 พ.ค. 1.31.0 / 1.30.1 6 ตัว: rewrite, proxy_set_body ไป HTTP/2, scgi/uwsgi, charset_map, HTTP/3 address spoofing, OCSP resolver
22 พ.ค. 1.31.1 / 1.30.2 CVE-2026-9256 overflow ใน rewrite (CHANGES ว่าอาจนำไปสู่การรันโค้ด)
17 มิ.ย. 1.31.2 / 1.30.3 CVE-2026-42530 HTTP/3 UAF (Major), CVE-2026-42055, CVE-2026-48142
15 ก.ค. 1.31.3 / 1.30.4 CVE-2026-42533 map+regex overflow (Major), CVE-2026-60005, CVE-2026-56434
15 ก.ย. 1.31.6 / 1.30.5 CVE-2026-90439 HTTP/3 overflow
14 ต.ค. 1.31.7 / 1.30.6 5 ตัวด้านบน

สองรายการที่หน้า advisories ให้ระดับ Major คือ CVE-2026-42533 กับ CVE-2026-42530 ตัวแรกผมเขียนแยกไว้แล้วใน nginx heap overflow ย้อนหลัง 15 ปี ใครอัปเป็น 1.30.6 หรือ 1.31.7 จะได้ของทุกบรรทัดในตารางไปครบ ส่วนใครอยู่สาย 1.28.x หรือ 1.29.x ต้องย้ายไป 1.30.x หรือ 1.31.x เพราะรายการตั้งแต่เดือน พ.ค. เป็นต้นมา หน้า advisories ระบุรุ่นที่แก้ไว้เฉพาะสองสายนั้น

mainline ล่าสุดคือ 1.31.8 (21 ต.ค. 2026) ไม่มีรายการ security ใหม่ แต่มี "Change" ที่ path ของ working_directory เป็นแบบ relative กับ prefix directory ถ้าใช้ mainline ควรอ่านก่อนอัป

นอกจากนี้ nginx.org ประกาศ njs 1.0.2 วันเดียวกัน (14 ต.ค.) แก้ CVE-2026-101025 (memory exhaustion เมื่อ parse XML ผิดรูป) และ CVE-2026-101019 (ค่า attribute ของ XML ไม่สอดคล้องกัน กระทบการตรวจ signed XML) ใครใช้ njs ให้ดูรุ่นแยกจากตัว nginx

เช็กว่าเข้าเงื่อนไขไหม

เริ่มจากรุ่นและตัวเลือกตอน build

nginx -v
nginx -V 2>&1 | grep -iE 'built with openssl'
nginx -V 2>&1 | tr ' ' '\n' | grep -E 'http_v3|http_ssi|file-aio'

แล้วค้นหา directive ที่เกี่ยวข้องใน config ที่ nginx โหลดจริง (รวม include ทั้งหมด)

sudo nginx -T 2>/dev/null | grep -nE '^\s*(alias|rewrite|ssi|aio|http3|ssl_session_ticket)|listen .*quic'

อ่านผลดังนี้ ถ้าเจอ alias กับ rewrite ในไซต์เดียวกันให้ถือว่าเข้า CVE-2026-15176 ถ้าเจอ quic หรือ http3 เข้า CVE-2026-95101 (และ CVE-2026-90439 ถ้าเป็น OpenSSL 3.5.0 หรือเก่ากว่า) ถ้าเจอ ssi on คู่กับ aio ให้ถือว่าเข้า CVE-2026-97205 ส่วน CVE-2026-93479 ผมตัดตัวกรองไม่ได้ เพราะเงื่อนไข "ประเมินตัวแปรเพื่อคำนวณ root หรือ log" เป็นสิ่งที่ config ทั่วไปมีอยู่แล้ว ให้ถือว่า 1.30.0 ถึง 1.30.5 และ 1.31.2 ถึง 1.31.6 เข้าหมด

CVE-2026-97629 ผมยืนยันไม่ได้ว่า config ที่ไม่ได้ตั้ง ssl_session_ticket_key เองจะเข้าเงื่อนไขหรือไม่ เพราะข้อความใน CHANGES พูดแค่ว่า "เมื่อใช้ key rotation" ผมเลยแนะนำให้ถือว่าทุกเครื่องที่ terminate TLS ด้วย nginx ในช่วงรุ่นนั้นเข้าข่ายจนกว่าจะอัป

อัปแล้วต้อง restart

การติดตั้งแพ็กเกจใหม่ไม่ได้ทำให้ master process ที่รันอยู่ใช้ binary ใหม่ และ nginx -s reload ก็ไม่เปลี่ยน binary nginx -v อ่านจากไฟล์บนดิสก์ เลยบอกรุ่นที่รันอยู่จริงไม่ได้ ต้อง restart หรือทำ binary upgrade แล้วเช็กว่า process เป็นตัวใหม่

วิธีแก้

nginx.org และหน้า advisories ไม่ได้เผยแพร่ workaround ของชุดนี้ ทางแก้ที่มีคืออัปเดต

  1. เช็กรุ่นและ config ดูว่ารุ่นอยู่ในช่วงที่กระทบและมี directive ที่เกี่ยวข้องหรือไม่
  2. อัปเดต package เป็น stable 1.30.6 หรือ mainline 1.31.7 ขึ้นไป
  3. nginx -t แล้ว restart ไม่ใช่แค่ reload
  4. เช็กว่า master process เป็นตัวใหม่ ก่อนปิดงาน
# แพ็กเกจจาก repo ของ nginx.org หรือ distro (Debian / Ubuntu)
sudo apt update
sudo apt install --only-upgrade nginx
sudo nginx -t && sudo systemctl restart nginx

# RHEL / Rocky / AlmaLinux
sudo dnf upgrade nginx
sudo nginx -t && sudo systemctl restart nginx

ถ้ามาจาก package ของ distro เลขเวอร์ชันอาจไม่ขยับเพราะ backport ให้ดู changelog ว่ามีชื่อ CVE หรือไม่

apt changelog nginx | grep -oE 'CVE-2026-[0-9]+' | sort -u
rpm -q --changelog nginx | grep -oE 'CVE-2026-[0-9]+' | sort -u

เช็กว่า master process เป็นตัวใหม่แล้ว ถ้า binary ถูกแทนไปแล้วแต่ process เดิมยังรันอยู่ จะเห็นคำว่า (deleted) ต่อท้าย (path ของ pid file ขึ้นกับการติดตั้ง)

sudo readlink /proc/$(cat /run/nginx.pid)/exe

เครื่องที่ติดตั้ง nginx ผ่าน DirectAdmin CustomBuild ให้อัปเดตรายการแล้ว build ใหม่ และ container ให้ build image ใหม่แบบดึง base image สดโดยไม่ใช้ cache แล้ว deploy ใหม่ทุกตัว

cd /usr/local/directadmin/custombuild && ./build update && ./build nginx
docker build --pull --no-cache -t myapp:nginx-fixed .

เช็กว่าโดนหรือยัง

nginx และ F5 ไม่ได้เผยแพร่ IOC ของชุดนี้ ผมเลยบอกได้แค่ร่องรอยทั่วไปของ buffer overflow และ use-after-free คือ worker ที่ล่มซ้ำ

sudo grep -hE 'worker process [0-9]+ exited on signal' /var/log/nginx/error.log* | tail -20

เห็นบ่อยก็ไปไล่ต่อว่า request ก่อนล่มคืออะไร ถ้าไม่เห็นก็ไม่ได้แปลว่าปลอดภัย โดยเฉพาะ CVE-2026-97629 ที่เป็นการปลอม session ซึ่งไม่ทิ้งรอยล่มใน log

ส่วนตัวผม เครื่องที่เปิด HTTP/3 หรือ terminate TLS ที่ nginx ผมจะอัปภายในไม่กี่วัน ไม่ต้องข้ามคืน เพราะยังไม่อยู่ใน KEV และไม่เห็นรายงานการโจมตีจริงจากแหล่งต้นทาง ที่เหลือเอาเข้ารอบบำรุงรักษาปกติ แต่ที่ผมไม่แนะนำเลยคือรอให้ distro ตามทัน ถ้าจะรอ ให้ดู changelog เป็นระยะ ตามกำลังคนที่แต่ละที่มี

ปล. ใครยังอยู่สาย 1.28.x หรือ 1.29.x รอบนี้เป็นจังหวะย้ายขึ้น stable 1.30.x เพราะรายการช่วงหลังไม่มีรุ่นที่แก้ในสายเดิมให้อัป

ที่มา: nginx.org Security advisories (https://nginx.org/en/security_advisories.html), nginx.org CHANGES (https://nginx.org/en/CHANGES), nginx.org News (https://nginx.org/), CISA Known Exploited Vulnerabilities Catalog (https://www.cisa.gov/known-exploited-vulnerabilities-catalog) ข้อมูลถึง 5 พ.ย. 2026 ส่วน KEV ตรวจจากไฟล์ที่ CISA ปล่อยเมื่อ 3 พ.ย. 2026 เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ

อยากให้เราทำให้ไหม?

ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า

คุยเรื่องงานกับเรา

เคยเจองานแบบนี้ไหม? ติดตรงไหน?

มาแลกวิธีกันต่อในบอร์ด LinuxThai

→ คุยต่อในบอร์ด

ความคิดเห็น 0

ยังไม่มีความคิดเห็น — เป็นคนแรกเลย