ช่องโหว่ใหม่ใน Linux Kernel ที่ถูกเรียกว่า PinTheft กำลังได้รับความสนใจในชุมชนความปลอดภัยไซเบอร์ เพราะสามารถทำให้ผู้ใช้ที่มีสิทธิ์ธรรมดาในระบบ ยกระดับสิทธิ์เป็น root ได้ ผ่านการโจมตีระดับเคอร์เนล
จุดอ่อนนี้อยู่ในระบบเครือข่ายของเคอร์เนลที่ชื่อว่า RDS (Reliable Datagram Sockets) และใช้เทคนิคผสมกับฟีเจอร์ I/O สมัยใหม่อย่าง io_uring เพื่อเปลี่ยนข้อผิดพลาดในการจัดการหน่วยความจำให้กลายเป็นการควบคุมข้อมูลใน page cache ของระบบได้
นักวิจัยด้านความปลอดภัย Aaron Esau จากทีม V12 Security เป็นผู้ค้นพบช่องโหว่นี้ และมีการเผยแพร่ proof‑of‑concept (PoC) หลังจากที่แพตช์ของเคอร์เนลถูกปล่อยออกมาแล้ว
แม้จะไม่ใช่การโจมตีจากระยะไกล แต่ผู้โจมตีที่สามารถรันโค้ดในเครื่องได้อยู่แล้ว เช่น บนเครื่องเซิร์ฟเวอร์ที่มีผู้ใช้หลายคน ก็อาจใช้ช่องโหว่นี้เพื่อยึดสิทธิ์ root ได้
ช่องโหว่นี้อยู่ใน RDS subsystem ซึ่งเป็นโปรโตคอลเครือข่ายที่ออกแบบมาสำหรับระบบที่ต้องการประสิทธิภาพสูง เช่น คลัสเตอร์ HPC หรือระบบที่ใช้ InfiniBand
บั๊กเกิดในเส้นทางการส่งข้อมูลแบบ zerocopy ของ RDS ซึ่งเป็นเทคนิคที่ให้เคอร์เนลส่งข้อมูลจากหน่วยความจำของผู้ใช้โดยตรงโดยไม่ต้องคัดลอกหลายรอบ เพื่อลด overhead ของการทำงาน
ฟังก์ชันที่เกี่ยวข้องคือ rds_message_zcopy_from_user() ซึ่งทำหน้าที่ pin หน้า memory ของผู้ใช้ทีละหน้า เพื่อเตรียมส่งข้อมูล
ปัญหาคือ:
ผลลัพธ์คือเคอร์เนลอาจมีการอ้างอิงไปยังหน่วยความจำที่ถูกปล่อยไปแล้ว ซึ่งเปิดทางให้ผู้โจมตีควบคุมหน่วยความจำบางส่วนได้
นักวิจัยแสดงให้เห็นว่า bug นี้สามารถนำมาสร้าง chain การโจมตีเพื่อยกระดับสิทธิ์ได้
ผู้โจมตีที่มีสิทธิ์ local จะเรียกใช้เส้นทาง zerocopy ของ RDS เพื่อให้เกิดเงื่อนไขที่ทำให้เกิด double‑free ของหน้า memory
เมื่อเคอร์เนลปล่อยหน้า memory ที่ยังมีการอ้างอิงอยู่ จะทำให้สถานะของหน่วยความจำไม่ถูกต้อง
ขั้นต่อมาคือใช้ io_uring fixed buffers ซึ่งเป็น API สำหรับทำ asynchronous I/O ที่มีประสิทธิภาพสูง
ผู้โจมตีสามารถจัดการ buffer เหล่านี้เพื่อ ยึดครอง physical pages ที่ถูก free ไปก่อนหน้า และควบคุมเนื้อหาของหน่วยความจำตำแหน่งนั้นได้
หากหน้า memory ที่ถูกควบคุมเป็นส่วนหนึ่งของ page cache ซึ่งเป็นแคชของไฟล์ในหน่วยความจำ
ผู้โจมตีจะสามารถ แก้ไขข้อมูลไฟล์ที่เคอร์เนลส่งออกจาก cache ได้
สำคัญคือ:
ขั้นตอนสุดท้ายของ exploit คือโจมตี SUID‑root executable
SUID เป็น permission พิเศษของ Linux ที่ทำให้โปรแกรมรันด้วยสิทธิ์ของเจ้าของไฟล์ (มักเป็น root)
ผู้โจมตีจึง:
ผลลัพธ์คือโปรแกรมจะรัน โค้ดของผู้โจมตีด้วยสิทธิ์ root
แม้ช่องโหว่นี้จะอยู่ในเคอร์เนล Linux แต่ความเสี่ยงจริงขึ้นอยู่กับการตั้งค่าของแต่ละระบบ
รายงานด้านความปลอดภัยระบุว่า Arch Linux เป็นหนึ่งในระบบที่มีความเสี่ยงสูง เพราะ
จึงถูกใช้เป็นสภาพแวดล้อมหลักในการสาธิตการโจมตี
distribution ใด ๆ ก็อาจได้รับผลกระทบหาก
รายงานบางฉบับระบุว่า Ubuntu, Debian, RHEL และ AlmaLinux ในการติดตั้งค่าเริ่มต้นมักไม่ได้เปิดใช้ RDS จึงมีความเสี่ยงต่ำกว่า
แต่ผู้ดูแลระบบควรตรวจสอบ configuration จริงของ kernel มากกว่าคาดเดา
CloudLinux ระบุว่าทดสอบ PoC กับหลายเวอร์ชันของแพลตฟอร์มและ ไม่พบผลกระทบ ต่อระบบของตน
การใช้ PinTheft ต้องมีหลายปัจจัยพร้อมกัน เช่น
หากเงื่อนไขเหล่านี้ไม่ครบ การโจมตีจะทำได้ยากหรือเป็นไปไม่ได้
ผู้ดูแลระบบสามารถลดความเสี่ยงได้ด้วยมาตรการต่อไปนี้
นักพัฒนาเคอร์เนลได้ปล่อย แพตช์สำหรับ RDS bug แล้ว การอัปเดต kernel เป็นเวอร์ชันล่าสุดคือการป้องกันที่สำคัญที่สุด
หลังอัปเดตต้อง รีบูตระบบ เพื่อให้เคอร์เนลใหม่มีผล
หากระบบไม่ได้ใช้ RDS networking สามารถลดความเสี่ยงได้โดย
rdsเนื่องจาก exploit ใช้ io_uring fixed buffers เป็นส่วนสำคัญ
การจำกัดหรือปิดการใช้งานสำหรับผู้ใช้ที่ไม่ใช่ root สามารถลด attack surface ได้
เนื่องจากขั้นตอนสุดท้ายของ exploit ใช้ SUID executable
ผู้ดูแลระบบควร
ระบบที่มีผู้ใช้หลายคน เช่น
ควรได้รับการแพตช์ก่อน เพราะช่องโหว่นี้ต้องใช้ local execution เป็นจุดเริ่มต้น
PinTheft แสดงให้เห็นแนวโน้มของ exploit สมัยใหม่ใน Linux: ผู้โจมตีมัก ผสมหลาย subsystem ของเคอร์เนลเข้าด้วยกัน เพื่อเปลี่ยนบั๊กเล็ก ๆ ให้กลายเป็นการยึดสิทธิ์ระดับ root
ในกรณีนี้ ช่องโหว่ใน RDS networking ถูกเชื่อมกับ io_uring I/O framework เพื่อสร้าง primitive ที่สามารถแก้ไข page cache ได้
เหตุการณ์นี้จึงตอกย้ำหลักการสำคัญของการดูแลระบบ Linux:
Studio Global AI
Use this topic as a starting point for a fresh source-backed answer, then compare citations before you share it.
PinTheft คือช่องโหว่ยกระดับสิทธิ์ (Local Privilege Escalation) ใน Linux Kernel ที่เกิดจากบั๊ก double‑free ใน RDS zerocopy และสามารถใช้ io uring fixed buffers เพื่อเขียนทับ page cache ได้ [1][5][12]
PinTheft คือช่องโหว่ยกระดับสิทธิ์ (Local Privilege Escalation) ใน Linux Kernel ที่เกิดจากบั๊ก double‑free ใน RDS zerocopy และสามารถใช้ io uring fixed buffers เพื่อเขียนทับ page cache ได้ [1][5][12] ผู้โจมตีที่มีสิทธิ์รันโค้ดในเครื่องสามารถแก้ไขข้อมูลของ SUID‑root binary ในหน่วยความจำ ทำให้โปรแกรมรันด้วยสิทธิ์ root แม้ไฟล์บนดิสก์จะไม่ถูกแก้ไข [14]
วิธีป้องกันหลักคืออัปเดต kernel ที่มีแพตช์แล้ว ปิดหรือ blacklist โมดูล RDS หากไม่ใช้งาน และจำกัดการใช้ io uring สำหรับผู้ใช้ทั่วไป [1][6]