Bad Epoll (CVE-2026-46242)
(github.com/J-jaeyoung)- เป็นช่องโหว่ race-condition UAF ในซับซิสเต็ม
epollของเคอร์เนล Linux ซึ่งทำให้โปรเซสที่ไม่มีสิทธิ์สามารถยกระดับเป็น root ได้ ทั้งบนเดสก์ท็อปและเซิร์ฟเวอร์ Linux รวมถึงอุปกรณ์ Android - ช่องโหว่นี้ถูกรายงานและพัฒนา exploit แบบ 0-day โดย Jaeyoung Chung ผ่าน Google kernelCTF และ kernelCTF มอบรางวัล $71,337+ สำหรับ exploit เคอร์เนล Linux
- AI Mythos ของ Anthropic พบ race-condition bug อีกตัวหนึ่งในโค้ด
epollเดียวกัน คือ CVE-2026-43074 แต่พลาด Bad Epoll ไป epollเป็น ฟังก์ชันเคอร์เนลแกนหลัก ที่ระบบปฏิบัติการ, บริการเครือข่าย และเบราว์เซอร์พึ่งพาอยู่ จึงไม่สามารถปิดการใช้งานได้ และไม่มีวิธีบรรเทาแบบง่ายนอกจากติดตั้งแพตช์- ช่องโหว่นี้ถูกนำเข้ามาในคอมมิต
58c9b016e128เมื่อ 2023-04-08 และถูกแก้ในคอมมิตa6dc643c6931เมื่อ 2026-04-24 โดยดิสโทรที่ใช้เคอร์เนลตั้งแต่ v6.4 ขึ้นไปและยังไม่มีการ backport แพตช์ อาจได้รับผลกระทบ
ลักษณะและความร้ายแรงของ Bad Epoll
- Bad Epoll เป็นช่องโหว่ use-after-free(UAF) แบบ race condition ในซับซิสเต็ม
epollของเคอร์เนล Linux โดยมีรหัส CVE-2026-46242 - โปรเซสที่ไม่มีสิทธิ์สามารถยกระดับเป็น root ได้ และอาจส่งผลกระทบไม่เฉพาะเดสก์ท็อปและเซิร์ฟเวอร์ Linux แต่รวมถึง อุปกรณ์ Android ด้วย
- ช่องโหว่นี้ถูกส่งเข้า Google kernelCTF ในฐานะ 0-day และถูกรายงานพร้อม exploit โดย Jaeyoung Chung
- kernelCTF มอบรางวัล $71,337+ สำหรับ exploit เคอร์เนล Linux
ทำไมจึงอันตราย
- เป็นบั๊กยกระดับสิทธิ์บน Linux ที่ สามารถ root Android ได้ ซึ่งพบไม่บ่อย
- ช่องโหว่ยกระดับสิทธิ์บน Linux จำนวนมากต้องอาศัยโมดูลที่ Android ไม่ได้โหลด จึงไม่สามารถนำไปสู่การ root Android ได้
- จากช่องโหว่ราว 130 รายการที่ถูก exploit ใน Google kernelCTF มีเพียงประมาณ 10 รายการที่มีโอกาสใช้ root Android ได้ และ Bad Epoll เป็นหนึ่งในนั้น
- สามารถถูก trigger ได้แม้อยู่ภายใน Chrome renderer sandbox
- sandbox นี้ป้องกันบั๊กเคอร์เนลอื่นเกือบทั้งหมด
- หากเชื่อม renderer exploit เข้ากับ Bad Epoll ก็อาจไปถึงผลกระทบระดับรันโค้ดในเคอร์เนลได้ คล้ายกรณีที่ Project Zero เคยแสดงด้วย
MSG_OOB
epollไม่มี kill-switch- ช่องโหว่ตระกูล Copy Fail สามารถทำให้หมดฤทธิ์ได้ด้วยการ unload โมดูลที่มีปัญหา
- แต่
epollเป็นฟังก์ชันแกนหลักที่ระบบปฏิบัติการ, บริการเครือข่าย และเบราว์เซอร์พึ่งพาอยู่ จึงปิดใช้งานไม่ได้ - วิธีแก้มีเพียงการติดตั้งแพตช์เท่านั้น
- หน้าต่างของ race มีขนาดเล็กมาก ระดับประมาณ 6 คำสั่ง
- การลองแบบทั่วไปแทบไม่โดนจังหวะเลย
- exploit นี้ขยายหน้าต่าง race ให้กว้างขึ้น และรันลูป retry ที่ไม่ทำให้เคอร์เนลล่ม
- ผลลัพธ์คือให้ความน่าเชื่อถือราว 99% บนเป้าหมายของ kernelCTF
บั๊กที่ Mythos พลาดไป
- ในปี 2023 คอมมิตเดียว
58c9b016e128ได้นำ race condition แยกกันสองตัวเข้าสู่โค้ดepollขนาดราว 2,500 บรรทัด - Mythos ของ Anthropic พบหนึ่งในนั้นและรายงานเป็น CVE-2026-43074
- ผลลัพธ์นี้เป็นกรณีศึกษาที่มีความหมาย เพราะการตรวจหาบั๊ก race condition ในเคอร์เนลทำได้ยาก
- ต่อมานักวิจัยอิสระได้ส่ง 1-day exploit ของช่องโหว่นี้เข้า kernelCTF
- race condition อีกตัวคือ Bad Epoll และ Mythos พลาดมันไป
- เนื่องจาก Mythos พบบั๊กตัวแรกในเส้นทางโค้ด
epollเล็ก ๆ เดียวกัน จึงเป็นไปได้ว่ามันได้สำรวจพื้นที่เดียวกันนี้อย่างมีนัยสำคัญ - แต่ไม่ทราบเหตุผลที่แน่ชัดว่าทำไม Mythos จึงพลาด Bad Epoll
- เนื่องจาก Mythos พบบั๊กตัวแรกในเส้นทางโค้ด
- ปัจจัยที่อาจทำให้ตรวจพบ Bad Epoll ได้ยาก
- หน้าต่าง race มีเพียงราว 6 คำสั่ง ทำให้ยากที่จะจินตนาการลำดับ interleaving ของเธรดที่ถูกต้องจากการอ่านโค้ดที่มีช่องโหว่อย่างเดียว
- หลังการแก้ CVE-2026-43074 แล้ว UAF ของ Bad Epoll มักไม่ trigger KASAN
- เมื่อไม่มีสัญญาณจาก KASAN, Mythos อาจไม่มั่นใจมากพอที่จะรายงานว่าเป็นบั๊กจริง
- การแก้ไขก็ไม่ง่ายเช่นกัน
- แพตช์แรกของผู้ดูแลรักษาแก้ปัญหาได้ไม่สมบูรณ์
- แพตช์ที่ถูกต้องถูกนำเข้า mainline หลังรายงานครั้งแรกราว สองเดือน
ลำดับการโจมตี
- เส้นทาง close ของ
epollสองเส้นทางทำงานพร้อมกันและชนกัน- ขณะที่เส้นทางหนึ่งกำลัง free ออบเจ็กต์ อีกเส้นทางยังคงเขียนไปยังออบเจ็กต์นั้น ทำให้เกิด UAF
- exploit จัดออบเจ็กต์
epollสี่ตัวเป็นสองคู่- คู่หนึ่งใช้ trigger race condition
- อีกคู่เป็นออบเจ็กต์เหยื่อ
- จากนั้นแปลงการเขียน UAF ขนาด 8 ไบต์ให้กลายเป็น file object UAF
- ใช้ cross-cache attack เพื่อควบคุมเนื้อหาทั้งหมดของ file
- หลังได้การควบคุมแล้ว จะใช้
/proc/self/fdinfoเพื่ออ่านหน่วยความจำเคอร์เนลแบบ arbitrary - ขั้นสุดท้ายคือ hijack control flow และรัน ROP chain เพื่อให้ได้ root shell
- เอกสารเทคนิคโดยละเอียด
การบรรเทาและเวอร์ชันที่ได้รับผลกระทบ
epollปิดการใช้งานไม่ได้ จึงไม่มี วิธีบรรเทาแบบง่าย- วิธีแก้คือใช้ upstream คอมมิต
a6dc643c6931หรือ backport ของดิสโทร - ช่วงเวลาที่ช่องโหว่ถูกนำเข้าและถูกแก้
- นำเข้า: [
58c9b016e128], 2023-04-08 - แก้ไข: [
a6dc643c6931], 2026-04-24
- นำเข้า: [
- ดิสโทร Linux ที่ใช้เคอร์เนลตั้งแต่ v6.4 ขึ้นไปและยังไม่ได้ backport แพตช์ อาจได้รับผลกระทบ
- เคอร์เนลเก่าที่อิง v6.1 ไม่ได้รับผลกระทบ เพราะช่องโหว่นี้ถูกนำเข้ามาใน v6.4
เป้าหมายของ exploit และสถานะบน Android
- ปัจจุบัน exploit นี้ถูกเขียนให้ตรงกับเป้าหมายของ Google kernelCTF
lts-6.12.67(LTS): 99% reliablecos-121-18867.294.100(COS): 98% reliable
- exploit บน Android ยังอยู่ระหว่างดำเนินการ
- Pixel 10, kernel v6.6+: ขณะนี้ PoC สามารถ trigger UAF ได้แล้ว และกำลังพัฒนา root exploit เต็มรูปแบบ
- exploit และ writeup สำหรับ Android จะเผยแพร่เมื่อเสร็จสมบูรณ์
- Pixel 8 และอุปกรณ์อื่นที่อิง v6.1 ไม่ได้รับผลกระทบ เพราะช่องโหว่นี้ถูกนำเข้ามาใน v6.4
ไทม์ไลน์
- 2023-04-08: บั๊กถูกนำเข้าใน
epollด้วยคอมมิต58c9b016e128 - 2026-02-17: รายงานบั๊กไปยัง security@kernel.org
- 2026-02-17: ผู้ดูแลรักษาเสนอแพตช์ต้นแบบ แต่ยังไม่ใช่การแก้ที่ถูกต้อง และการสนทนาหยุดลง
- 2026-04-02: การแก้ CVE-2026-43074 ที่ Mythos พบ ถูกนำเข้า mainline
- 2026-04-22: มีการรายงานปัญหาที่ยังคงเหลืออีกครั้ง
- 2026-04-24: คอมมิตแก้ Bad Epoll
a6dc643c6931ถูกนำเข้า mainline
ชื่อและเอกสารอ้างอิง
- ชื่อ Bad Epoll สืบทอดมาจากซีรีส์ “Bad” ของบั๊กเคอร์เนลที่สามารถนำไปสู่ Android root ได้
- ตัวอย่างก่อนหน้านี้มี Bad Binder, Bad IO_uring, Bad Spin
- หน้านี้เป็นเวอร์ชันสั้น ส่วนการวิเคราะห์ root cause ฉบับเต็ม เอกสาร exploit และโค้ด แยกไว้ในลิงก์ต่างหาก
1 ความคิดเห็น
ความคิดเห็นจาก Lobste.rs
การที่ช่องโหว่นี้เข้าถึงได้จาก Chrome sandbox นี่เป็นเรื่องใหญ่มากจริง ๆ แต่แปลกใจนิดหน่อยที่รายงานผ่าน kCTF แล้วได้รางวัลแค่ $71k
Bryan Cantrill พูดถูกอีกแล้วแฮะ
อย่าหลงเชื่อว่า repo ที่ดูเผิน ๆ เหมือนว่างเปล่า exploit ถูกลิงก์ไว้ที่ ช่วงล่างของ README
ยังไม่ได้ลองทดสอบ และ ไม่มีวิธีบรรเทาผลกระทบ ผู้เขียนอ้างว่าสามารถ root Android ได้ด้วย ดังนั้นเมื่อคิดถึง ecosystem ของ Android แล้ว ผมเดาว่าผู้ผลิตเครื่องผมคงจะปล่อยแพตช์ให้ราว ๆ อีกหนึ่งเดือนข้างหน้า แถมยังทำงานได้ใน Chrome renderer sandbox ด้วย
อันนี้ใช้กับ Android ได้ด้วยเหรอ?
มีข้อมูลไหมว่าเขาค้นพบมันได้ยังไง? เห็นว่า Mythos พลาดไป เลยสงสัยว่าพบด้วยความช่วยเหลือจากโมเดลภาษาขนาดใหญ่อื่น หรือมนุษย์ตรวจโค้ดแล้วเจอเอง
ถ้าอย่างนั้นก็สงสัยด้วยว่าทำไมถึงไปดูส่วนนี้
“Linux distribution จำนวนมากอาจได้รับผลกระทบ หากใช้เคอร์เนลที่อิง v6.4 ขึ้นไปและยังไม่ได้ backport แก้ไขเข้ามา ให้ตรวจสอบอัปเดตความปลอดภัยเคอร์เนลของ distribution ว่ามีการ backport commit แก้ไขข้างต้นหรือไม่ เคอร์เนลเก่าที่อิง v6.1 ไม่ได้รับผลกระทบ เพราะบั๊กถูกนำเข้ามาใน v6.4”
น่าเสียดายแฮะ หวังว่าจะเป็นวิธีดี ๆ สำหรับ root มือถือ แต่ใหม่เกินไป คง ไม่ได้มีประโยชน์เป็นพิเศษ เท่าไร มือถือผมเป็น 5.15