พบช่องโหว่ใหม่บน NGINX ทำให้ผู้โจมตีสามารถเรียกใช้โค้ดที่เป็นอันตรายได้

พบช่องโหว่ใหม่ใน NGINX JavaScript (njs) หมายเลข CVE-2026-8711 ซึ่งทำให้ผู้โจมตีจากภายนอก ที่ไม่จำเป็นต้องผ่านการยืนยันตัวตน สามารถทำให้เกิด buffer overflow ประเภท Heap-based ได้ ซึ่งอาจส่งผลให้ระบบหยุดทำงาน และในบางกรณี อาจนำไปสู่การโจมตีแบบ Remote Code Execution (RCE) ในกระบวนการทำงานของ NGINX worker process ได้

ช่องโหว่ดังกล่าวมีความเชื่อมโยงกับวิธีการที่คำสั่ง js_fetch_proxy จัดการกับตัวแปรที่ถูกควบคุมโดยฝั่ง Client เมื่อมีการใช้งานร่วมกับการดำเนินการของ ngx.fetch() จาก NGINX JavaScript

ช่องโหว่นี้เกิดขึ้นในโมดูล ngx_http_js_module เมื่อมีการกำหนดค่าคำสั่ง js_fetch_proxy ร่วมกับตัวแปร NGINX ที่ฝั่ง Client สามารถควบคุมได้ อย่างน้อยหนึ่งตัวแปร

หากคำสั่ง location มีการเรียกใช้งานฟังก์ชัน NJS ที่เรียกใช้ ngx.fetch() ผู้โจมตีจะสามารถส่ง HTTP requests ที่ถูกสร้างขึ้นมาเป็นพิเศษ ซึ่งจะส่งผลให้เกิด Heap buffer overflow ในส่วนประมวลผล NGINX worker process ได้

ช่องโหว่ Buffer Overflow บน NGINX

ช่องโหว่ดังกล่าวถูกจัดประเภทตามมาตรฐาน CWE เป็น CWE-122: Heap-based Buffer Overflow และถูกติดตามเป็นการภายในโดยบริษัท F5 ภายใต้ ID 160 สำหรับผลิตภัณฑ์ NGINX Plus และ NGINX OSS

ช่องโหว่ดังกล่าวส่งผลกระทบหลักที่ทำให้กระบวนการทำงานของโปรแกรมหยุดทำงาน และต้องเริ่มต้นการทำงานใหม่โดยอัตโนมัติ ซึ่งส่งผลให้เกิดสภาวะการปฏิเสธการให้บริการ (DoS) บน Data plane ของ NGINX ได้

สำหรับระบบที่ไม่ได้เปิดใช้งาน Address Space Layout Randomization (ASLR) หรือมีการกำหนดค่าเอาไว้ไม่รัดกุมพอ อาจมีการใช้ช่องโหว่นี้เพื่อสั่งรันโค้ดอันตรายผ่านสิทธิ์การทำงานของ Worker process ได้ทันที

ช่องโหว่ดังกล่าวส่งผลกระทบต่อ NGINX JavaScript (njs) เวอร์ชัน 0.9.4 ถึง 0.9.8 โดยได้รับการแก้ไขแล้วใน njs เวอร์ชัน 0.9.9 ขึ้นไป

โดย component ที่ได้รับผลกระทบคือโมดูล ngx_http_js_module ซึ่งทำหน้าที่เปิดใช้งานคำสั่งประมวลผล HTTP ที่ทำงานบนพื้นฐานของ NJS เช่น คำสั่ง js_content และ js_fetch_proxy

รูปแบบโครงสร้าง Config ทั่วไปที่เสี่ยงต่อช่องโหว่นี้ คือการตั้งค่าที่คำสั่ง js_fetch_proxy ทำการสร้าง URL สำหรับ proxy ขึ้นมาจากข้อมูล Headers ที่ผู้ใช้งานส่งเข้ามา ตัวอย่างเช่น ตัวแปร $http_x_user และ $http_x_password ในขณะที่คำสั่ง js_content มีการชี้ไปยังฟังก์ชัน NJS เช่น main.fetcher ซึ่งมีการเรียกใช้งาน ngx.fetch() ร่วมกับ URL ดังกล่าว

ภายใต้การตั้งค่าในลักษณะนี้ ผู้โจมตีจะสามารถควบคุม และปรับแต่งค่า Header เหล่านั้น เพื่อเข้าไปสร้างความเสียหายกับหน่วยความจำส่วน Heap ในกระบวนการทำงานของ NGINX worker และส่งผลให้ระบบเกิดการค้าง หรือล่มซ้ำ ๆ ได้

บริษัท F5 ได้ระบุไว้ในบทความ K000161307 ว่า ช่องโหว่ดังกล่าวถูกจำกัดอยู่เฉพาะในส่วนของ Data plane เท่านั้น และไม่ได้ส่งผลกระทบต่อ Control plane แต่อย่างใด

มีรายงานว่า ผลิตภัณฑ์ และบริการอื่น ๆ ของ F5 เช่น BIG-IP, BIG-IQ, BIG-IP Next, F5OS และบริการ F5 Distributed Cloud ในเวอร์ชันที่ได้รับการประเมินตรวจสอบแล้วนั้น ไม่ได้รับผลกระทบจากช่องโหว่ CVE-2026-8711 แต่อย่างใด

ผู้ดูแลระบบที่ใช้งาน NGINX JavaScript (njs) เวอร์ชันที่ได้รับผลกระทบ ได้รับคำแนะนำอย่างเร่งด่วนให้ทำการอัปเกรดเป็นเวอร์ชัน 0.9.9 หรือสูงกว่า ซึ่งถือเป็นแนวทางหลักในการแก้ไขปัญหาเพื่อปิดช่องโหว่ดังกล่าว

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

ในกรณีที่ยังไม่สามารถทำการอัปเกรดระบบได้ในทันที ผู้ดูแลระบบควรทำการตรวจสอบการตั้งค่าที่มีการใช้งาน js_fetch_proxy ร่วมกับตัวแปรที่ถูกควบคุมโดยฝั่ง Client เพื่อปรับปรุงโครงสร้างโค้ด (Refactor) หรือนำ Pattern เหล่านั้นออกไป พร้อมทั้งตรวจสอบให้แน่ใจว่าได้เปิดใช้งานระบบ ASLR บนเครื่องโฮสต์ของ NGINX ทุกเครื่อง เพื่อขัดขวางความพยายามในการสั่งรันโค้ดอันตราย

ที่มา : Cybersecuritynews