Dev.to Security 🔐 Cybersecurity 👁 0 📖 1 min read

Node.js แพตช์ 10 ช่องโหว่ รวม RCE ใน Brotli: เซิร์ฟเวอร์และ AI agent บน Node ต้องอัปเดตไหม?

Node.js แพตช์ 10 ช่องโหว่ รวม RCE ใน Brotli: เซิร์ฟเวอร์และ AI agent บน Node ต้องอัปเดตไหม? โดย Nokka (นก-กา) | นักเขียนอิสระสาย AI และระบบเปิด | ตรวจสอบข้อมูล ณ 23 ต.ค. 2026 บทความนี้เขียนโดย AI (deepseek-v4.1-flash

Node.js แพตช์ 10 ช่องโหว่ รวม RCE ใน Brotli: เซิร์ฟเวอร์และ AI agent บน Node ต้องอัปเดตไหม?

โดย Nokka (นก-กา) | นักเขียนอิสระสาย AI และระบบเปิด | ตรวจสอบข้อมูล ณ 23 ต.ค. 2026

บทความนี้เขียนโดย AI (deepseek-v4.1-flash · ผู้ให้บริการโมเดล: ollama-cloud) ผ่าน Hermes Agent ภายใต้การควบคุมและตรวจสอบคุณภาพโดยมนุษย์ - Nokka (นก-กา)

เรื่องนี้เกี่ยวกับใคร

วันที่ 21 ตุลาคม 2026 ทีม Node.js ออกอัปเดตพร้อมกันสามรุ่น คือ 22.23.4, 24.22.1 และ 26.12.1 เพื่อแก้ช่องโหว่สิบรายการ [2]

ในจำนวนนั้นมีสี่รายการที่ระดับความรุนแรงสูง และหนึ่งในนั้นคือช่องที่ทำให้ผู้โจมตีรันโค้ดบนเซิร์ฟเวอร์ได้

ถ้าคุณดูแล API ที่รับข้อมูลแบบ compressed จากภายนอก หรือรัน AI agent กับ MCP server บน Node เรื่องนี้เกี่ยวกับคุณตรง ๆ

ไม่ได้หมายความว่ามีช่องโหว่เฉพาะใน agent แต่ agent และ MCP server รันอยู่บน runtime เดียวกัน จึงได้รับผลจากช่องโหว่ของ Node ด้วย

บทสรุปของ SecurityOnline ระบุว่า ทีม Node.js ยังไม่รายงานการโจมตีที่เกิดขึ้นจริง และยังไม่มีหลักฐานการพิสูจน์แนวคิดที่เผยแพร่ต่อสาธารณะ [1]

สรุปสั้น

  • Node.js ออกแพตช์ 21 ต.ค. 2026 พร้อมกันสามรุ่น ครอบสาย 22.x, 24.x และ 26.x [2]
  • ช่องโหว่ที่หนักที่สุดคือช่องเขียนเกินขอบเขตในตัวถอดรหัส Brotli ซึ่งนำไปสู่การรันโค้ดจากระยะไกลได้ [2]
  • อีกสองช่องระดับสูงทำให้การตรวจชื่อโฮสต์ของ TLS ถูกข้ามได้ และอีกช่องหนึ่งทำให้ชื่อ DNS ที่มีอักขระ NUL ถูกตัดทอน [2]
  • มีการถอดความเชื่อถือใบรับรองของ eMudhra ออกด้วย แปลว่าแอปที่ต้องต่อกับบริการที่ใช้ใบรับรองชุดนั้นอาจเจอ error หลังอัปเดต [2]
  • Node 26 จะกลายเป็น LTS วันที่ 28 ตุลาคม 2026 ซึ่งใกล้มากแล้ว [6]

ช่องโหว่ระดับสูงทั้งสี่

CVE-2026-111497: ช่องเขียนเกินขอบเขตในตัวถอดรหัส Brotli

  • กระทบทั้ง 22.x, 24.x และ 26.x
  • ผลคือสามารถนำไปสู่การรันโค้ดจากระยะไกลได้
  • ผู้รายงานคือทีม OpenAI Codex Security สองคน คือ Khai Tran และ Sylvie Mayer [2]

จุดนี้สำคัญกับคนที่รับ HTTP request แล้วถอดรหัส content-encoding: br จากผู้ใช้ เพราะข้อมูล compressed จากภายนอกจะถูกส่งเข้าตัวถอดรหัส ซึ่งเป็นจุดที่ช่องโหว่นี้อยู่

CVE-2026-105482: dns.resolve ตัดชื่อที่มีอักขระ NUL

  • กระทบทั้งสามสาย
  • ชื่อที่ถูกตัดทอนอาจทำให้การตรวจสอบรายชื่อที่อนุญาตคลาดเคลื่อน

ถ้าคุณใช้ผลจาก dns.resolve ไปเทียบกับ allowlist ควรตรวจ logic ของตัวเองซ้ำ

CVE-2026-105483: การข้ามการตรวจชื่อโฮสต์เมื่อ IP เขียนด้วยเลขเต็มความกว้าง

  • กระทบ 26.x และ 24.x
  • เป็นการข้ามการตรวจใบรับรอง TLS ด้วยรูปแบบตัวเลขที่ผิดปกติ

CVE-2026-106069: การข้ามการตรวจชื่อโฮสต์เมื่อชื่อโฮสต์แปลงเป็น IP ได้หลวม

  • กระทบทั้งสามสาย
  • หมายความว่าใบรับรองที่ออกให้ชื่อหนึ่งอาจถูกใช้ยืนยันอีกปลายทางหนึ่งได้

สองข้อนี้เกี่ยวกับการตรวจใบรับรอง TLS โดยตรง ซึ่งมีผลกับทุกโค้ดที่เชื่อมต่อออกไปยังบริการภายนอก

ระดับกลางสามรายการ

  • CVE-2026-105481 ระบบ keep-alive อาจประมวลผลคำตอบที่ถูกเขียนไว้ก่อนคำขอถูกส่ง กระทบทั้งสามสาย
  • CVE-2026-106072 การตรวจใบรับรองสำหรับชื่อโฮสต์ IPv4 ที่ไม่เป็นรูปแบบมาตรฐานทำให้ DNS SAN ใช้ยืนยันปลายทางแบบ IP ได้ กระทบทั้งสามสาย
  • CVE-2026-106074 ค่าแคช entropy ของ crypto.randomUUID() และ randomInt() ถูกบันทึกลง startup snapshot และ SEA ทำให้ทุกโปรเซสที่สร้างจากไฟล์เดียวกันได้ค่าเดิม กระทบทั้งสามสาย

ข้อสุดท้ายนี้สำคัญกับคนที่แพ็กแอปเป็น single executable เพราะค่าสุ่มที่ซ้ำกันคือรากของปัญหาความปลอดภัยหลายอย่าง

ระดับต่ำสามรายการ

  • CVE-2026-106070 ZipFile คืนไบต์นำหน้าที่ผู้โจมตีควบคุมได้หลังการตรวจหัวไฟล์ล้มเหลว กระทบเฉพาะ 26.x
  • CVE-2026-106071 Permission Model ให้สิทธิ์เกินผ่านการค้นหาแบบ wildcard กระทบเฉพาะ 26.x
  • CVE-2026-106073 Permission Model ถูกข้ามได้ด้วย fs.realpathSync กระทบทั้งสามสาย

สองข้อแรกกระทบเฉพาะ 26.x ถ้าคุณอยู่สาย 22 หรือ 24 ก็ยังควรอัปเดตเพราะมีช่องอื่นร่วมด้วย

การถอดใบรับรอง eMudhra

แพตช์รอบนี้ยังอัปเดตชุดใบรับรอง CA ที่มาพร้อม Node โดยถอดความเชื่อถือที่เกี่ยวกับกรณี eMudhra Intermediate CA Compromise ออก [2]

ผลที่ตามมาคือแอปที่เชื่อมต่อกับบริการซึ่งใช้ใบรับรองจากผู้ออกชุดนั้นจะเริ่มเจอ error เรื่อง chain ไม่สมบูรณ์

ถ้าคุณเจอ error แบบนี้หลังอัปเดต อย่าเพิ่งปิดการตรวจใบรับรอง ให้ตรวจว่าปลายทางเปลี่ยนมาใช้ CA รายอื่นแล้วหรือยัง

dependency ที่ถูกอัปเดตตามมา

หน้า release ระบุว่าแพตช์นี้รวมการอัปเดต dependency เพื่อแก้ช่องโหว่ที่เปิดเผยต่อสาธารณะแล้ว [2]

  • c-ares ทั้งสามสาย
  • ca-cert สำหรับกรณี eMudhra ทั้งสามสาย
  • OpenSSL เฉพาะ 24.x และ 22.x
  • SQLite เฉพาะ 22.x
  • Undici ทั้งสามสาย

ถ้าคุณใช้ undici ตรง ๆ ในโปรเจกต์ การอัปเดต Node ไม่ได้อัปเดตสำเนาใน node_modules ของคุณ ต้องอัปเดตแยก

สายไหนควรทำอะไร

ถ้าคุณอยู่ 26.x อัปเดตเป็น 26.12.1 [5] และควรรู้ว่า Node 26 จะกลายเป็น LTS วันที่ 28 ตุลาคม 2026 ซึ่งอีกไม่กี่วัน [6]

ถ้าคุณอยู่ 24.x อัปเดตเป็น 24.22.1 [4] สายนี้อยู่ในช่วง maintenance แล้ว โดยช่วง support ปกติสิ้นสุดเมื่อ 20 ตุลาคม 2026 [6]

ถ้าคุณอยู่ 22.x อัปเดตเป็น 22.23.4 [3] สายนี้ยังได้รับการดูแลถึงเมษายน 2027 [6]

ถ้าคุณยังอยู่ 20.x หรือเก่ากว่า สายนั้นอยู่นอกช่วงที่ยังได้รับการดูแลตามที่ endoflife.date บันทึกไว้ [6] ซึ่งหมายความว่าคุณไม่ได้รับแพตช์รอบนี้

วิธีตรวจว่าเครื่องคุณใช้รุ่นไหน

node -v
npm ls undici
docker images | grep node

สามคำสั่งนี้บอกได้เกือบครบว่าคุณเสี่ยงแค่ไหน

ถ้าใช้ Docker ให้ปักแท็กอิมเมจเป็นเวอร์ชันที่ระบุ เพราะแท็ก latest จะเลื่อนไปเรื่อย ๆ และคุณจะไม่รู้ว่าอิมเมจที่รันอยู่เป็นรุ่นไหน

สิ่งที่มักพังหลังอัปเดต

หนึ่ง native module ที่คอมไพล์ไว้กับรุ่นเก่าต้อง rebuild

สอง แอปที่แพ็กเป็น SEA หรือใช้ startup snapshot ต้องสร้างไฟล์ใหม่ เพราะค่า entropy เดิมถูกฝังไปแล้ว

สาม ถ้าโปรเจกต์ปัก engines ไว้แคบเกินไป npm อาจเตือนตอนติดตั้ง

วางแผนทดสอบบน staging ก่อนเสมอ โดยเฉพาะบริการที่รับ Brotli จากภายนอก

เช็กลิสต์สำหรับวันนี้

  • ตรวจรุ่นที่รันจริงทั้งในเครื่องและใน container
  • อัปเดตเป็น 22.23.4 หรือ 24.22.1 หรือ 26.12.1 ตามสายที่ใช้
  • อัปเดต undici ในโปรเจกต์แยกจาก Node
  • ตรวจบริการที่รับ content-encoding: br ว่าอยู่หลัง reverse proxy ที่ถอดรหัสก่อนหรือไม่
  • ทบทวน logic ที่ใช้ผล dns.resolve ไปเทียบ allowlist
  • ทดสอบการเชื่อมต่อ TLS ออกภายนอกว่ายังผ่านหลังถอด CA ของ eMudhra

มุมมองของผม

ช่อง Brotli คือช่องที่ผมคิดว่าคนไทยมองข้ามมากที่สุด เพราะเรามักคิดว่า compression เป็นเรื่องของ performance ไม่ใช่ความปลอดภัย

แต่ถ้าเซิร์ฟเวอร์ของคุณถอดรหัสข้อมูลที่ผู้ใช้ส่งมา ตัวถอดรหัสก็คือพื้นผิวการโจมตีเต็มตัว

และสำหรับคนที่รัน agent หรือ MCP server บน Node คำถามไม่ใช่ว่าตัว agent ฉลาดพอไหม แต่คือ runtime ที่มันเกาะอยู่ได้รับการแพตช์หรือยัง

แหล่งอ้างอิง

[1] SecurityOnline, "Node.js Security Release Fixes Remote Code Execution Bug", 21 ต.ค. 2026. https://securityonline.info/nodejs-security-release-october-2026/

[2] Node.js, "Wednesday, October 21, 2026 Security Releases", 21 ต.ค. 2026 (รายการ CVE ทั้งสิบ, dependency ที่อัปเดต, ผู้รายงาน, และลิงก์ดาวน์โหลด). https://nodejs.org/en/blog/vulnerability/october-2026-security-releases

[3] Node.js, "Node.js v22.23.4", 21 ต.ค. 2026. https://nodejs.org/en/blog/release/v22.23.4/

[4] Node.js, "Node.js v24.22.1", 21 ต.ค. 2026. https://nodejs.org/en/blog/release/v24.22.1/

[5] Node.js, "Node.js v26.12.1", 21 ต.ค. 2026. https://nodejs.org/en/blog/release/v26.12.1/

[6] endoflife.date, "Node.js", สืบค้น 23 ต.ค. 2026 (กำหนด LTS ของ 26 คือ 28 ต.ค. 2026, 24 อยู่ใน maintenance, 22 ดูแลถึง เม.ย. 2027). https://endoflife.date/nodejs

📰 Read the original article on Dev.to Security

Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.