สรุปสั้น

บริษัท Horizon3.ai เผยแพร่บทวิเคราะห์เชิงลึกพร้อมโค้ด proof-of-concept (PoC) บน GitHub สำหรับช่องโหว่ CVE-2026-106173 ใน Fortinet FortiSIEM ซึ่งเป็นช่องโหว่ path traversal ระดับวิกฤต คะแนน CVSS 9.4 ที่ให้ผู้โจมตีซึ่งไม่ต้องยืนยันตัวตนรันโค้ดหรือคำสั่งบนเครื่องได้ด้วยแพ็กเก็ตที่สร้างขึ้นเฉพาะ บริษัท Fortinet ออกแพตช์ไปเมื่อสัปดาห์ก่อนในรอบเดียวกับ Citrix และ Ivanti (ดูโพสต์ 120) แต่ตอนนั้นยังไม่มีรายละเอียดเชิงเทคนิค การมี PoC สาธารณะทำให้ช่วงเวลาระหว่างแพตช์ออกกับการถูกโจมตีจริงสั้นลงมาก

ช่องโหว่อยู่ในบริการ gRPC ที่เปิดฟังบนพอร์ต TCP 27918 ผู้โจมตีใช้ลำดับ ../ ร่วมกับการแทรก NUL byte ในพารามิเตอร์ query-id เพื่อเขียนทับไฟล์ที่มีอยู่แล้วนอกไดเรกทอรีที่กำหนด แล้วเปลี่ยนความสามารถในการเขียนไฟล์นั้นเป็นการรันโค้ดระยะไกล ตัวอย่างใน PoC คือเขียนทับสคริปต์ตรวจสุขภาพ Redis ที่ cron รันทุก 60 วินาที FortiSIEM เป็นระบบ SIEM ที่รวบรวมล็อกและข้อมูลรับรองของทั้งองค์กร เครื่องที่ถูกยึดจึงเป็นฐานที่มีค่ามาก ผู้ใช้ FortiSIEM 7.5.0 ต้องอัปเกรดเป็น 7.5.1 ขึ้นไปโดยเร็ว ส่วนสาย 7.6 ไม่ได้รับผลกระทบ

รายละเอียดข่าว

เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 20 ตุลาคม 2569 ว่านักวิจัยได้ปล่อยโค้ด PoC สำหรับช่องโหว่ CVE-2026-106173 ที่ Fortinet แพตช์ไปเมื่อสัปดาห์ก่อนตามประกาศ FG-IR-26-180 โดย Horizon3.ai ระบุว่าผู้โจมตีที่ไม่ต้องยืนยันตัวตนสามารถเชื่อมต่อบริการ gRPC บนพอร์ต TCP 27918 ใช้ช่องโหว่เขียนทับไฟล์ที่มีอยู่นอกไดเรกทอรีที่ตั้งใจไว้ แล้วยกระดับจากการเขียนไฟล์ได้ตามใจ (arbitrary file write) ไปเป็นการรันโค้ดระยะไกล Horizon3.ai อธิบายว่า handler QueryResultReq ของ gRPC ใน FortiSIEM ประมวลผล metadata ที่ไม่น่าเชื่อถือโดยไม่ตรวจเส้นทางให้ถูกต้อง และการสร้าง metadata ที่มีทั้งลำดับ path traversal และ NUL byte ซ่อนอยู่ในชั้นการเข้ารหัส HTTP/2 และ HPACK ของ gRPC ทำให้เขียนไฟล์ลงระบบไฟล์ได้ทุกตำแหน่ง

นาย Zach Hanley ตำแหน่ง Chief Attack Engineer ของ Horizon3.ai ระบุว่าไฟล์ที่เขียนจะลงที่เส้นทางตรงตามที่อยู่ก่อน NUL byte พอดี หากชี้ไปที่ไฟล์ที่มีอยู่แล้ว ไฟล์นั้นจะถูกเขียนทับในที่เดิมโดยคงเจ้าของและสิทธิ์เดิมไว้ และยังมีอีกรูปแบบที่ใช้คำขอ 2 ครั้งเพื่อสร้างไฟล์ใหม่ที่มีชื่อตรงตามต้องการได้ด้วย เวอร์ชันที่ The Hacker News ระบุคือ FortiSIEM 7.5.0 ต้องอัปเกรดเป็น 7.5.1 ขึ้นไป และ FortiSIEM 7.6 ไม่ได้รับผลกระทบ ผู้ดูแลที่ใช้สายเวอร์ชันอื่นควรเช็กรายการเวอร์ชันเต็มในประกาศของ Fortinet โดยตรง เพราะบทความไม่ได้ระบุครบทุกสาย ณ วันที่รายงาน ยังไม่มีรายงานการโจมตีจริง แต่ช่องโหว่ FortiSIEM เคยถูกนำไปใช้โจมตีอย่างรวดเร็วหลังมี PoC มาแล้วในอดีต

Public PoC released for critical FortiSIEM gRPC path traversal flaw

รายละเอียดช่องโหว่

ต้นเหตุอยู่ที่การสร้างเส้นทางไฟล์อย่างไม่ปลอดภัยในฟังก์ชัน SendQueryResult() ซึ่งนำค่าพารามิเตอร์ query-id ที่ผู้ใช้ส่งมาไปต่อเป็นเส้นทางไฟล์โดยไม่ตรวจสอบเพียงพอ ผู้โจมตีจึงใส่ลำดับ ../ เพื่อหลุดออกจากไดเรกทอรีเดิมได้ แต่จุดอ่อนนี้อย่างเดียวยังไม่พอ เพราะโปรแกรมจะต่อท้ายชื่อไฟล์ของตัวเองในรูปแบบ result-<IP ต้นทาง>-0-0-<id>.dat เสมอ โดย <id> เป็นตัวนับที่เซิร์ฟเวอร์ควบคุม ผู้โจมตีจึงเลือกได้แค่ไดเรกทอรีแต่เลือกชื่อไฟล์ไม่ได้

จุดอ่อนที่สองทำให้การโจมตีสมบูรณ์ คือสามารถแทรก NUL byte (\0) ลงใน query-id ได้ เมื่อเส้นทางถูกส่งต่อให้ฟังก์ชันเปิดไฟล์ระดับระบบปฏิบัติการ อักขระนี้จะถูกตีความว่าเป็นจุดสิ้นสุดสตริง ส่วนต่อท้ายที่โปรแกรมเติมให้จึงถูกตัดทิ้ง ผู้โจมตีสร้างค่าแบบ ../../../../../opt/charting/redishb.sh\0... ให้ชื่อไฟล์ที่ต้องการเขียนทับอยู่หน้า NUL byte พอดี

ไฟล์ redishb.sh เป็นเชลล์สคริปต์ตรวจสุขภาพบริการ Redis ที่ cron job รันทุก 60 วินาที เมื่อเนื้อหาถูกแทนด้วยคำสั่งของผู้โจมตี คำสั่งนั้นจะถูกรันโดยอัตโนมัติภายในไม่เกินหนึ่งนาทีด้วยสิทธิ์ของสคริปต์เดิม เพราะการเขียนทับคงเจ้าของและสิทธิ์ไฟล์ไว้ การที่ payload ซ่อนอยู่ในชั้น HTTP/2 และ HPACK ของ gRPC ยังทำให้อุปกรณ์ตรวจจับที่ดูเฉพาะทราฟฟิก HTTP แบบข้อความธรรมดามองไม่เห็นลำดับ ../ ได้ง่าย

ผลกระทบ

FortiSIEM เป็นศูนย์รวมล็อก การแจ้งเตือน และมักเก็บข้อมูลรับรองสำหรับดึงข้อมูลจากอุปกรณ์จำนวนมากในเครือข่าย การยึดเครื่อง SIEM ได้จึงให้ทั้งมุมมองว่าทีมความปลอดภัยเห็นอะไร โอกาสลบหรือแก้ล็อกเพื่อปิดร่องรอย และข้อมูลรับรองสำหรับเคลื่อนย้ายไปยังระบบอื่น การโจมตีไม่ต้องล็อกอินและไม่ต้องให้ผู้ใช้ทำอะไร ความเสี่ยงสูงสุดอยู่ที่ FortiSIEM ซึ่งพอร์ต 27918 เข้าถึงได้จากอินเทอร์เน็ตหรือจากเครือข่ายที่ผู้โจมตีอยู่แล้ว เมื่อมี PoC สาธารณะ การสแกนหาเครื่องเป้าหมายมักเริ่มภายในไม่กี่วัน องค์กรที่ยังไม่แพตช์ตั้งแต่รอบที่แล้วจึงควรถือเป็นงานเร่งด่วน

คำแนะนำ

  • อัปเกรด FortiSIEM 7.5.0 เป็น 7.5.1 ขึ้นไปทันที และตรวจเวอร์ชันที่แก้ของสายอื่นจากประกาศ FG-IR-26-180 ของ Fortinet
  • ระหว่างรอแพตช์ จำกัดการเข้าถึงพอร์ต TCP 27918 ให้เฉพาะเครื่องคอลเลกเตอร์และคอมโพเนนต์ FortiSIEM ที่จำเป็น และไม่เปิดออกอินเทอร์เน็ต
  • ตรวจความถูกต้องของไฟล์ /opt/charting/redishb.sh และสคริปต์อื่นที่ cron รัน เทียบกับไฟล์ต้นฉบับของเวอร์ชันที่ติดตั้ง และตรวจไฟล์ใหม่ที่ไม่ควรมีในไดเรกทอรีระบบ
  • ตรวจกระบวนการลูกที่ผิดปกติจาก cron บนเครื่อง FortiSIEM เช่น เชลล์ย้อนกลับ การดาวน์โหลดไฟล์ หรือการเชื่อมต่อขาออกที่ไม่รู้จัก
  • หากพบร่องรอยการบุกรุก ให้ถือว่าข้อมูลรับรองที่ FortiSIEM เก็บไว้รั่ว และเปลี่ยนข้อมูลรับรองของอุปกรณ์และบริการที่เชื่อมต่อทั้งหมด
  • ใช้ PoC ของ Horizon3.ai ทดสอบในสภาพแวดล้อมทดลองเพื่อยืนยันว่าแพตช์ได้ผล ก่อนสรุปว่าปลอดภัย

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