PinTheft: ช่องโหว่ใน Linux Kernel ที่ใช้บั๊ก RDS และ io_uring ยกระดับสิทธิ์เป็น root | ตอบ | Studio Global
What is the “PinTheft” Linux kernel privilege escalation vulnerability, how does the exploit work (including the RDS zerocopy double‑free bu PinTheft chains an RDS zerocopy memory bug with io_uring fixed buffers to overwrite page cache and escalate privileges. AI พรอมต์ Create a landscape editorial hero image for this Studio Global article: What is the “PinTheft” Linux kernel privilege escalation vulnerability, how does the exploit work (including the RDS zerocopy double‑free bu. Article summary: PinTheft is a recently disclosed Linux local privilege escalation affecting the kernel’s RDS subsystem, where an RDS zerocopy reference-count/double-free bug can be chained with io_uring fixed buffers to overwrite page-c. Topic tags: general, general web. Reference image context from search candidates: Reference image 1: visual subject "# Re: PinTheft Linux LPE. > > v12-security have shared a new Linux LPE today, PinTheft [0]. > > > PinTheft is a Linux local privilege escalation exploit for an RDS zerocopy double-" source context "Re: PinTheft Linux LPE - oss-sec" Reference image 2: visual subject "# PinTheft: New Linux Exploit Steals Kernel References to Root
openai.com ช่องโหว่ใหม่ใน Linux Kernel ที่ถูกเรียกว่า PinTheft กำลังได้รับความสนใจในชุมชนความปลอดภัยไซเบอร์ เพราะสามารถทำให้ผู้ใช้ที่มีสิทธิ์ธรรมดาในระบบ ยกระดับสิทธิ์เป็น root ได้ ผ่านการโจมตีระดับเคอร์เนล
จุดอ่อนนี้อยู่ในระบบเครือข่ายของเคอร์เนลที่ชื่อว่า RDS (Reliable Datagram Sockets) และใช้เทคนิคผสมกับฟีเจอร์ I/O สมัยใหม่อย่าง io_uring เพื่อเปลี่ยนข้อผิดพลาดในการจัดการหน่วยความจำให้กลายเป็นการควบคุมข้อมูลใน page cache ของระบบได้
นักวิจัยด้านความปลอดภัย Aaron Esau จากทีม V12 Security เป็นผู้ค้นพบช่องโหว่นี้ และมีการเผยแพร่ proof‑of‑concept (PoC) หลังจากที่แพตช์ของเคอร์เนลถูกปล่อยออกมาแล้ว
แม้จะไม่ใช่การโจมตีจากระยะไกล แต่ผู้โจมตีที่สามารถรันโค้ดในเครื่องได้อยู่แล้ว เช่น บนเครื่องเซิร์ฟเวอร์ที่มีผู้ใช้หลายคน ก็อาจใช้ช่องโหว่นี้เพื่อยึดสิทธิ์ root ได้
คนยังถาม คำตอบสั้น ๆ สำหรับ "PinTheft: ช่องโหว่ใน Linux Kernel ที่ใช้บั๊ก RDS และ io_uring ยกระดับสิทธิ์เป็น root" คืออะไร 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]
PinTheft เกิดขึ้นในส่วนไหนของ Linux Kernel ช่องโหว่นี้อยู่ใน RDS subsystem ซึ่งเป็นโปรโตคอลเครือข่ายที่ออกแบบมาสำหรับระบบที่ต้องการประสิทธิภาพสูง เช่น คลัสเตอร์ HPC หรือระบบที่ใช้ InfiniBand
บั๊กเกิดในเส้นทางการส่งข้อมูลแบบ zerocopy ของ RDS ซึ่งเป็นเทคนิคที่ให้เคอร์เนลส่งข้อมูลจากหน่วยความจำของผู้ใช้โดยตรงโดยไม่ต้องคัดลอกหลายรอบ เพื่อลด overhead ของการทำงาน
ฟังก์ชันที่เกี่ยวข้องคือ rds_message_zcopy_from_user() ซึ่งทำหน้าที่ pin หน้า memory ของผู้ใช้ทีละหน้า เพื่อเตรียมส่งข้อมูล
หากเกิด page fault ระหว่างขั้นตอนนี้
โค้ดในส่วนจัดการ error จะปล่อยหน้า memory ที่ถูก pin ไปก่อนหน้า
แต่ในบางสถานการณ์เกิดการ double‑free หรือ reference count ผิดพลาด
หลักการทำงานของ exploit (ภาพรวม) นักวิจัยแสดงให้เห็นว่า bug นี้สามารถนำมาสร้าง chain การโจมตีเพื่อยกระดับสิทธิ์ได้
1. กระตุ้นบั๊ก RDS zerocopy ผู้โจมตีที่มีสิทธิ์ local จะเรียกใช้เส้นทาง zerocopy ของ RDS เพื่อให้เกิดเงื่อนไขที่ทำให้เกิด double‑free ของหน้า memory
เมื่อเคอร์เนลปล่อยหน้า memory ที่ยังมีการอ้างอิงอยู่ จะทำให้สถานะของหน่วยความจำไม่ถูกต้อง
2. ใช้ io_uring fixed buffers ควบคุมหน่วยความจำ ขั้นต่อมาคือใช้ io_uring fixed buffers ซึ่งเป็น API สำหรับทำ asynchronous I/O ที่มีประสิทธิภาพสูง
ผู้โจมตีสามารถจัดการ buffer เหล่านี้เพื่อ ยึดครอง physical pages ที่ถูก free ไปก่อนหน้า และควบคุมเนื้อหาของหน่วยความจำตำแหน่งนั้นได้
3. เปลี่ยน memory corruption ให้กลายเป็น page‑cache overwrite หากหน้า memory ที่ถูกควบคุมเป็นส่วนหนึ่งของ page cache ซึ่งเป็นแคชของไฟล์ในหน่วยความจำ
ผู้โจมตีจะสามารถ แก้ไขข้อมูลไฟล์ที่เคอร์เนลส่งออกจาก cache ได้
ไฟล์จริงบนดิสก์ไม่ได้ถูกแก้
แต่ข้อมูลที่ระบบอ่านจาก cache ถูกเปลี่ยนไปแล้ว
4. เปลี่ยน SUID‑root binary ใน cache ขั้นตอนสุดท้ายของ exploit คือโจมตี SUID‑root executable
SUID เป็น permission พิเศษของ Linux ที่ทำให้โปรแกรมรันด้วยสิทธิ์ของเจ้าของไฟล์ (มักเป็น root)
แก้ไขเนื้อหาของ binary ใน page cache
เมื่อโปรแกรมถูกเรียกใช้งาน
เคอร์เนลจะโหลดโค้ดที่ถูกแก้ไขจาก cache
ผลลัพธ์คือโปรแกรมจะรัน โค้ดของผู้โจมตีด้วยสิทธิ์ root
ระบบที่ได้รับผลกระทบมากที่สุด แม้ช่องโหว่นี้จะอยู่ในเคอร์เนล Linux แต่ความเสี่ยงจริงขึ้นอยู่กับการตั้งค่าของแต่ละระบบ
Arch Linux รายงานด้านความปลอดภัยระบุว่า Arch Linux เป็นหนึ่งในระบบที่มีความเสี่ยงสูง เพราะ
PoC exploit ถูกทดสอบบน Arch Linux
โมดูล RDS อาจมีให้ใช้งานใน kernel configuration
จึงถูกใช้เป็นสภาพแวดล้อมหลักในการสาธิตการโจมตี
ระบบที่เปิดใช้งาน RDS module distribution ใด ๆ ก็อาจได้รับผลกระทบหาก
ใช้ kernel เวอร์ชันที่มีบั๊ก
มี RDS module เปิดใช้งานหรือสามารถโหลดได้
การตั้งค่ามาตรฐานของบางดิสโทร รายงานบางฉบับระบุว่า Ubuntu, Debian, RHEL และ AlmaLinux ในการติดตั้งค่าเริ่มต้นมักไม่ได้เปิดใช้ RDS จึงมีความเสี่ยงต่ำกว่า
แต่ผู้ดูแลระบบควรตรวจสอบ configuration จริงของ kernel มากกว่าคาดเดา
CloudLinux CloudLinux ระบุว่าทดสอบ PoC กับหลายเวอร์ชันของแพลตฟอร์มและ ไม่พบผลกระทบ ต่อระบบของตน
เงื่อนไขที่ต้องมีเพื่อให้โจมตีสำเร็จ การใช้ PinTheft ต้องมีหลายปัจจัยพร้อมกัน เช่น
ผู้โจมตีต้องสามารถ รันโค้ดในเครื่องได้ก่อน (local access)
ระบบใช้ Linux kernel ที่มีบั๊ก RDS zerocopy
โมดูล RDS ถูกโหลดหรือสามารถโหลดได้
ผู้ใช้ทั่วไปสามารถใช้งาน io_uring fixed buffers ได้
มี SUID‑root binary ที่สามารถใช้เป็นเป้าหมายของการโจมตีได้
หากเงื่อนไขเหล่านี้ไม่ครบ การโจมตีจะทำได้ยากหรือเป็นไปไม่ได้
วิธีป้องกันและลดความเสี่ยง ผู้ดูแลระบบสามารถลดความเสี่ยงได้ด้วยมาตรการต่อไปนี้
อัปเดต Kernel ให้เป็นเวอร์ชันที่มีแพตช์ นักพัฒนาเคอร์เนลได้ปล่อย แพตช์สำหรับ RDS bug แล้ว การอัปเดต kernel เป็นเวอร์ชันล่าสุดคือการป้องกันที่สำคัญที่สุด
หลังอัปเดตต้อง รีบูตระบบ เพื่อให้เคอร์เนลใหม่มีผล
ปิดโมดูล RDS หากไม่ใช้งาน หากระบบไม่ได้ใช้ RDS networking สามารถลดความเสี่ยงได้โดย
blacklist โมดูล rds
ป้องกันไม่ให้โมดูลโหลดอัตโนมัติ
จำกัดการใช้งาน io_uring ของผู้ใช้ทั่วไป เนื่องจาก exploit ใช้ io_uring fixed buffers เป็นส่วนสำคัญ
การจำกัดหรือปิดการใช้งานสำหรับผู้ใช้ที่ไม่ใช่ root สามารถลด attack surface ได้
ตรวจสอบ SUID binaries เนื่องจากขั้นตอนสุดท้ายของ exploit ใช้ SUID executable
ตรวจสอบไฟล์ที่มี SUID
ลบ SUID bit จากโปรแกรมที่ไม่จำเป็น
ให้ความสำคัญกับระบบ multi‑user ระบบที่มีผู้ใช้หลายคน เช่น
CI runners
shared hosting
development servers
ควรได้รับการแพตช์ก่อน เพราะช่องโหว่นี้ต้องใช้ local execution เป็นจุดเริ่มต้น
บทเรียนด้านความปลอดภัยจาก PinTheft PinTheft แสดงให้เห็นแนวโน้มของ exploit สมัยใหม่ใน Linux: ผู้โจมตีมัก ผสมหลาย subsystem ของเคอร์เนลเข้าด้วยกัน เพื่อเปลี่ยนบั๊กเล็ก ๆ ให้กลายเป็นการยึดสิทธิ์ระดับ root
ในกรณีนี้ ช่องโหว่ใน RDS networking ถูกเชื่อมกับ io_uring I/O framework เพื่อสร้าง primitive ที่สามารถแก้ไข page cache ได้
เหตุการณ์นี้จึงตอกย้ำหลักการสำคัญของการดูแลระบบ Linux:
อัปเดต kernel อย่างสม่ำเสมอ
ปิดโมดูลที่ไม่จำเป็น
ลดพื้นผิวการโจมตีของระบบให้มากที่สุด
cybersecuritynews.com PinTheft Linux Vulnerability Let Attackers Gain Root Access
Comments
0 comments