
ช่องโหว่ระดับ Critical ที่ชื่อ 'HTTP2Shell' ใน Brotli ซึ่งเป็น Library decoder ภาษา C ที่ติดตั้งมาพร้อมกับ Node.js อาจทำให้ผู้โจมตีทำให้เกิด corrupt memory และเข้าถึงข้อมูลที่สำคัญได้
ช่องโหว่ด้านความปลอดภัยนี้มีหมายเลข CVE-2026-111497 และเป็นที่รู้จักในชื่อ “Broccoli2Shell” และ “Node2Shell” โดยส่งผลกระทบต่อ Brotli เวอร์ชัน 1.0.3 ถึง 1.0.9, 1.1.0 และ 1.2.0
ช่องโหว่นี้ถูกรายงานภายใต้หลายชื่อ เนื่องจากในตอนแรกถูกพบใน Node.js ก่อนที่นักวิจัยจะพบว่าช่องโหว่เดียวกันใน Brotli decoder สามารถส่งผลกระทบต่อซอฟต์แวร์ใน ecosystems หลายระบบ
Brotli เป็นโปรเจกต์ Open source ที่พัฒนา และดูแลโดย Google สำหรับการ Compression ข้อมูลแบบ Lossless โดยจะย่อขนาดไฟล์เพื่อให้สามารถส่งข้อมูลได้เร็วขึ้นโดยไม่ส่งผลกระทบต่อข้อมูลต้นฉบับ
ผลกระทบในวงกว้าง
ชื่อ HTTP2Shell สะท้อนถึงผลกระทบที่มีต่อ HTTP clients และเซิร์ฟเวอร์ แม้ว่าช่องโหว่นี้จะไม่ได้จำกัดอยู่แค่ HTTP/2 และสามารถส่งผลกระทบต่อแอปพลิเคชันอื่น ๆ ที่ Decompress ข้อมูล Brotli ซึ่งถูกควบคุมโดยผู้โจมตีได้
นอกเหนือจาก Node.js ซอฟต์แวร์ที่อาจได้รับผลกระทบยังรวมถึง HTTP clients ของ Python เช่น urllib3[brotli], requests, httpx และ aiohttp[speedups] เมื่อมีการกำหนดค่าให้ใช้ Brotli decoder ที่มีช่องโหว่ รวมถึงแอปพลิเคชัน และเครื่องมืออื่น ๆ ที่ใช้งานระบบ Brotli ที่มีช่องโหว่
เมื่อวันอาทิตย์ที่ผ่านมา Microsoft ได้ปล่อยแพตซ์อัปเดตด้านความปลอดภัยฉุกเฉินเพื่อแก้ไขช่องโหว่ใน .NET โดยแจ้งเตือนว่าหากเจาะระบบสำเร็จ ผู้โจมตีจะสามารถยกระดับสิทธิ์บนระบบที่รัน .NET เวอร์ชันที่มีช่องโหว่ได้
ช่องโหว่ Node2Shell เป็นช่องโหว่ Buffer Overflow ที่ทำให้ Brotli-compressed stream ที่ถูกสร้างขึ้นมาเป็นพิเศษสามารถกระตุ้นให้เกิดการ Block switch ที่ไม่ถูกต้อง ซึ่งตัว decoder จะมองว่าถูกต้อง และตีความผิดว่าเป็นการ Request Input เพิ่มเติม
เมื่อมีการเพิ่ม Input bytes ต่อท้าย Buffer ภายในขนาด 8 byte อย่างต่อเนื่อง การเขียนข้อมูลจะขยายเกินขอบเขต ส่งผลให้หน่วยความจำบริเวณใกล้เคียงเกิด corrupt ได้
Node.js อธิบายในประกาศแจ้งเตือน โดยระบุว่า “การ Block switch ที่ไม่ถูกต้องถูกรายงานว่าเป็นความต้องการข้อมูล Input เพิ่มเติมชั่วคราวแทนที่จะเป็น Format error อย่างถาวร ดังนั้นตัว decoder แบบ Streaming จึงเพิ่ม Input bytes เข้าไปใน Buffer ภายในขนาด 8 bytes อย่างต่อเนื่อง”
ผู้โจมตีสามารถใช้ประโยชน์จากช่องโหว่นี้โดยทำให้แอปพลิเคชัน decompress ข้อมูลที่เป็นอันตราย เช่น การ Serving response HTTP ที่ถูก Compressed ไปยังแอปพลิเคชันที่ URL request หรือโดยการส่ง Request ที่ถูก Compressed ไปยังเซิร์ฟเวอร์โดยตรง
Node.js ระบุว่า ช่องโหว่นี้สามารถทำให้โปรเซสหยุดทำงาน (Crash), เปิดเผยข้อมูลในหน่วยความจำ และอาจทำให้เกิดการรันโค้ดที่เป็นอันตรายจากระยะไกลได้ (RCE)
รายงานล่าสุดจาก Imperva บริษัทด้าน Cybersecurity ยืนยันว่าการใช้ประโยชน์จากช่องโหว่ Node2Shell (CVE-2026-111497) สามารถนำไปสู่การทำ RCE ได้จริง
การแก้ไขตัว Upstream Brotli ถูก Committed ลงในซอร์สโค้ดของโปรเจกต์เป็นครั้งแรกในเดือนกุมภาพันธ์ แต่ Node.js และ Google เพิ่งปล่อยแพตช์แก้ไขเวอร์ชัน Stable สำหรับผู้ใช้ในวันที่ 21 ตุลาคม ตามด้วยการเปิดเผยต่อสาธารณะในวันถัดมา ส่วนแพ็กเกจ PyPI ที่มีการแก้ไขเริ่มพร้อมใช้งานในวันที่ 23 ตุลาคม
เวอร์ชันที่ได้รับการแพตช์แล้ว ได้แก่
- Google Brotli 1.0.10, 1.1.1, 1.2.1
- Node.js 22.23.4, 24.22.1, 26.12.1
- Python Brotli 1.2.1
- Python brotlicffi 1.2.1.0
แม้จะมีการเผยแพร่โค้ด PoC ของช่องโหว่สำหรับ Node2Shell ออกมาแล้ว แต่ยังไม่มีรายงานการโจมตีจริง อย่างไรก็ตาม ผู้ใช้ควรให้ความสำคัญกับการอัปเดตด้านความปลอดภัยที่มีให้โดยเร็วที่สุด
หลังจากการอัปเดต ผู้ดูแลระบบจะต้องรีสตาร์ทโปรเซสที่ได้รับผลกระทบ และ Container images ที่ได้รับผลกระทบจะต้อง Rebuilt และ Redeploy ใหม่
Online portal ที่ติดตามผลกระทบของช่องโหว่นี้ยังเตือนด้วยว่า การอัปเดต Brotli library ของระบบนั้น ไม่ได้แก้ปัญหาความเสี่ยงในการ Deploy Node.js หรือแอปพลิเคชันอื่น ๆ ที่ใช้งาน Library ที่ฝังมาพร้อมกับตัวแอปพลิเคชันเอง
นอกจากนี้ การบล็อก Requests Brotli ขาเข้าเพียงอย่างเดียวก็ยังคงเปิดช่องให้ถูกโจมตีผ่าน HTTP-response ได้อยู่ดี
หากไม่สามารถอัปเดตได้ในทันที มีคำแนะนำให้ลบ Brotli support ออกจากแอปพลิเคชัน Python และบล็อก Requests ที่ Compressed ด้วย Brotli ขาเข้าที่ระดับ Proxy หรือ Firewall
ที่มา : www.bleepingcomputer.com

You must be logged in to post a comment.