สรุปสั้น

นักวิจัยเปิดเผยรายละเอียดเชิงเทคนิคของช่องโหว่เคอร์เนล Linux ที่มีอายุยาวนานถึง 14 ปี ในอินเทอร์เฟซการเข้ารหัสฝั่งผู้ใช้ที่ชื่อ AF_ALG (CVE-2025-39964) ซึ่งเปิดทางให้ผู้โจมตีที่มีสิทธิ์ระดับผู้ใช้ท้องถิ่นสามารถยกระดับสิทธิ์เป็น root และในสภาพแวดล้อมพิสูจน์แนวคิด (proof-of-concept) ยังสามารถหลุดออกจาก Docker container เข้าไปยึดเครื่องโฮสต์ที่รองรับอยู่เบื้องหลังได้ ต้นตอของปัญหาคือ race condition ที่เกิดจากการเขียนพร้อมกันอย่างไม่ปลอดภัยลงในซ็อกเก็ต AF_ALG เดียวกัน ซึ่งใช้สำหรับงานเข้ารหัสอย่างการเข้ารหัสและถอดรหัส AES

เนื่องจากโพรเซสท้องถิ่นที่ไม่มีสิทธิ์พิเศษสามารถเข้าถึงอินเทอร์เฟซนี้ได้ มันจึงเป็นพื้นผิวการโจมตี (attack surface) ที่มีค่าสำหรับทั้งนักวิจัยเคอร์เนลและผู้โจมตี ช่องโหว่นี้ถูกค้นพบโดยนาย Muhammad Alifa Ramdhan จาก STAR Labs ระหว่างตรวจสอบโค้ดเคอร์เนล Linux ให้กับโครงการ kernelCTF ของ Google ในปี 2025 โดยงานวิจัยที่ทำร่วมกับนาย Bing-Jhong Billy Jheng สามารถพัฒนาต่อยอดจนกลายเป็น exploit ยกระดับสิทธิ์ท้องถิ่นที่ใช้งานได้จริง และได้รับเงินรางวัลราว 113,337 ดอลลาร์ ทั้งนี้ CISA ได้ระบุ CVE-2025-39964 ไว้ในบัญชีช่องโหว่ที่ถูกใช้โจมตีจริง ทำให้ความจำเป็นในการรีบแพตช์ยิ่งเร่งด่วนขึ้น

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

เว็บไซต์ Cybersecurity News รายงานเมื่อวันที่ 25 กันยายน พ.ศ. 2569 ว่า ช่องโหว่เคอร์เนล Linux อายุ 14 ปีในอินเทอร์เฟซ AF_ALG สามารถเปิดทางให้ผู้โจมตีท้องถิ่นยกระดับสิทธิ์เป็น root และหลุดออกจาก Docker container ไปยังเครื่องโฮสต์ได้

โค้ดที่มีช่องโหว่ถูกใส่เข้ามาตั้งแต่ Linux เวอร์ชัน 2.6.38 ในปี 2011 และเปิดโล่งอยู่นานราว 14 ปี ช่องโหว่นี้ถูกค้นพบโดยนาย Muhammad Alifa Ramdhan นักวิจัยความปลอดภัยจาก STAR Labs ในปี 2025 ระหว่างตรวจสอบโค้ดเคอร์เนลให้โครงการ kernelCTF ของ Google งานวิจัยที่ทำร่วมกับนาย Bing-Jhong Billy Jheng สาธิตให้เห็นว่าบั๊กนี้สามารถพัฒนาเป็น exploit ยกระดับสิทธิ์ท้องถิ่นที่เชื่อถือได้ และการส่งผลงานเข้า kernelCTF รายงานว่าได้รับรางวัลราว 113,337 ดอลลาร์

ก่อนหน้านี้ CISA เพิ่งเพิ่ม CVE-2025-39964 เข้าบัญชีช่องโหว่ที่ถูกใช้โจมตีจริง (KEV) พร้อมช่องโหว่เคอร์เนล Linux อีกสองรายการเมื่อวันศุกร์ที่ผ่านมา (รายงานในโพสต์ 145 ) แต่ในตอนนั้นยังไม่มีการเปิดเผยรายละเอียดว่าถูกใช้โจมตีอย่างไร รายงานเชิงเทคนิคจาก IDNsec และ STAR Labs ครั้งนี้จึงเป็นการเปิดกลไกการทำงานของช่องโหว่อย่างละเอียด ซึ่งแสดงให้เห็นว่าช่องโหว่นี้รุนแรงกว่าที่ประกาศ KEV ระบุไว้ในตอนแรก เพราะไม่ได้เพียงทำให้ระบบล่ม แต่นำไปสู่การยึดสิทธิ์ root ได้เต็มรูปแบบและหลุดออกจากคอนเทนเนอร์

14-year-old linux kernel af_alg flaw enables root and container escape

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

ต้นตอของปัญหาคือ race condition ในเส้นทางการจัดการ sendmsg() ของ AF_ALG โดยปกติเคอร์เนลจะรวบรวมข้อมูลนำเข้าทางการเข้ารหัสจากคำร้องหนึ่งครั้งหรือมากกว่า แล้วติดตามบัฟเฟอร์เหล่านั้นด้วยรายการ scatter-gather โดยมีแฟล็กบริบทชื่อ merge คอยระบุว่าบัฟเฟอร์สุดท้ายยังมีพื้นที่หน้าเหลือและสามารถต่อข้อมูลใหม่เข้าไปได้อย่างปลอดภัย

ปัญหาคือสองเธรดสามารถส่งคำสั่งเขียนไปยังซ็อกเก็ตปฏิบัติการ AF_ALG เดียวกันได้ แม้ตัวล็อกของซ็อกเก็ตจะปกป้องการเปลี่ยนสถานะส่วนใหญ่ แต่เคอร์เนลจะปล่อยล็อกนั้นระหว่างที่เธรดหนึ่งกำลังรอพื้นที่บัฟเฟอร์ว่างสำหรับเขียน ช่วงเวลานี้เองที่เปิดให้ผู้เขียนอีกรายเข้ามาแก้ไขบริบทที่ใช้ร่วมกันก่อนที่เธรดเดิมจะทำงานต่อ ตามงานวิจัยของ IDNsec ผู้โจมตีสามารถควบคุมจังหวะเวลาให้แฟล็ก ctx->merge ยังคงเปิดอยู่ทั้งที่รายการ scatter-gather สุดท้ายไม่มีรายการที่ถูกต้องเหลืออยู่ ทำให้การเขียนครั้งถัดไปเข้าถึง metadata ก่อนหน้าอาร์เรย์ที่ตั้งใจผ่าน sg[-1]

การเข้าถึงนอกขอบเขต (out-of-bounds) ดังกล่าวกลายเป็นอันตราย เพราะข้อมูลบน heap ที่ผู้โจมตีควบคุมได้สามารถส่งผลต่อ metadata ของ scatterlist ปลอม นักวิจัยใช้เงื่อนไขนี้สร้าง usercopy oracle และท้ายที่สุดได้ความสามารถเขียนหน่วยความจำเคอร์เนลตามอำเภอใจ (arbitrary kernel write) จากนั้น exploit จะเขียนทับค่า core_pattern ซึ่งเป็นการตั้งค่าเคอร์เนลที่ควบคุมวิธีที่ Linux จัดการ core dump ของโพรเซส เมื่อ core_pattern ขึ้นต้นด้วยอักขระ pipe เคอร์เนลจะรันโปรแกรมที่กำหนดไว้ในฐานะตัวจัดการ core dump ดังนั้นเมื่อผู้โจมตีแทนค่าดังกล่าวแล้วจงใจทำให้โพรเซสลูกล่ม โค้ดที่ผู้โจมตีควบคุมก็จะถูกรันด้วยสิทธิ์ root ทันที และเนื่องจากคอนเทนเนอร์ใช้เคอร์เนลร่วมกับโฮสต์ กลไกระดับเคอร์เนลตัวเดียวกันนี้จึงเปิดให้หลุดออกจาก Docker container ได้ในบางการตั้งค่า

โค้ดที่มีช่องโหว่ถูกใส่เข้ามาตั้งแต่ Linux 2.6.38 ในปี 2011 ทีมพัฒนา Linux ต้นน้ำแก้ไขด้วยการเพิ่มการครองสิทธิ์เขียนแบบผูกขาด (exclusive write ownership) ให้บริบท AF_ALG โดยเพิ่มการตรวจสอบสถานะ ctx->write ที่จะทำให้ผู้เขียนรายที่สองซึ่งเขียนพร้อมกันล้มเหลวแทนที่จะเข้าไปแก้ไขสถานะที่ใช้ร่วมกันของซ็อกเก็ต เวอร์ชันที่ได้รับการแก้ไขตามประกาศสาธารณะได้แก่ Linux 5.10.246, 5.15.195, 6.1.155, 6.6.109, 6.12.50 และ 6.16.10 โดยขึ้นอยู่กับการ backport ของแต่ละดิสโทรด้วย

ผลกระทบ

AF_ALG เป็นอินเทอร์เฟซมาตรฐานในเคอร์เนล Linux ที่โพรเซสท้องถิ่นทั่วไปเข้าถึงได้โดยไม่ต้องมีสิทธิ์พิเศษ ทำให้ช่องโหว่นี้กลายเป็นเครื่องมือยกระดับสิทธิ์ที่ทรงพลังในมือผู้โจมตีที่ตั้งหลักในเครื่องได้แล้ว ไม่ว่าจะผ่านบัญชีผู้ใช้ที่ถูกยึดหรือช่องโหว่ของแอปพลิเคชัน ระบบที่มีความเสี่ยงสูงเป็นพิเศษคือโครงสร้างพื้นฐาน Linux ที่ใช้ร่วมกันหลายผู้ใช้ เครื่องโฮสต์ที่รันคอนเทนเนอร์ และสภาพแวดล้อมที่อนุญาตให้โค้ดของผู้ใช้ที่ไม่น่าเชื่อถือหรือเวิร์กโหลดของผู้เช่า (tenant) รันได้ เพราะความสามารถหลุดออกจากคอนเทนเนอร์หมายถึงการทลายขอบเขตการแยกที่หลายองค์กรพึ่งพาในการแบ่งแยกภาระงานระหว่างผู้ใช้ การที่ CISA ยืนยันว่าช่องโหว่นี้ถูกใช้โจมตีจริงยิ่งทำให้ความเสี่ยงไม่ใช่เรื่องเชิงทฤษฎีอีกต่อไป

คำแนะนำ

  • ติดตั้งแพ็กเกจเคอร์เนลที่แก้ไขแล้วจากดิสโทรของท่าน (เช่น Red Hat, Ubuntu, Debian, SUSE) และรีบูตเข้าสู่เคอร์เนลเวอร์ชันใหม่โดยเร็ว
  • จัดลำดับความสำคัญให้แก่โครงสร้างพื้นฐาน Linux ที่ใช้ร่วมกัน เครื่องโฮสต์คอนเทนเนอร์ ระบบที่มีผู้ใช้หลายคน และสภาพแวดล้อมที่มีโค้ดของผู้ใช้ที่ไม่น่าเชื่อถือรันอยู่
  • จำกัดสิทธิ์การรันโค้ดในระดับท้องถิ่น และเฝ้าระวังพฤติกรรมยกระดับสิทธิ์หรือการเข้าถึง AF_ALG ที่ผิดปกติ
  • ตรวจสอบเวอร์ชันเคอร์เนลกับรายการที่ได้รับการแก้ไข (5.10.246, 5.15.195, 6.1.155, 6.6.109, 6.12.50, 6.16.10) และอ้างอิงประกาศความปลอดภัยของดิสโทรสำหรับ backport

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