1 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นช่องโหว่ 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
  • ปัจจัยที่อาจทำให้ตรวจพบ 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% reliable
    • cos-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 ได้
  • หน้านี้เป็นเวอร์ชันสั้น ส่วนการวิเคราะห์ root cause ฉบับเต็ม เอกสาร exploit และโค้ด แยกไว้ในลิงก์ต่างหาก

1 ความคิดเห็น

 
GN⁺ 4 시간 전
ความคิดเห็นจาก Lobste.rs
  • การที่ช่องโหว่นี้เข้าถึงได้จาก Chrome sandbox นี่เป็นเรื่องใหญ่มากจริง ๆ แต่แปลกใจนิดหน่อยที่รายงานผ่าน kCTF แล้วได้รางวัลแค่ $71k

  • Bryan Cantrill พูดถูกอีกแล้วแฮะ

    • ยอมรับก็อาย ๆ หน่อย แต่พูดตรง ๆ ความคิดแรกของผมก็เหมือนกัน
    • อยากรู้เหมือนกัน ไม่รู้บริบทว่าเขาพูดถูกเรื่องอะไร
    • ถ้าเป็นไปได้ช่วยให้บริบทหน่อยก็ดี
  • อย่าหลงเชื่อว่า repo ที่ดูเผิน ๆ เหมือนว่างเปล่า exploit ถูกลิงก์ไว้ที่ ช่วงล่างของ README
    ยังไม่ได้ลองทดสอบ และ ไม่มีวิธีบรรเทาผลกระทบ ผู้เขียนอ้างว่าสามารถ root Android ได้ด้วย ดังนั้นเมื่อคิดถึง ecosystem ของ Android แล้ว ผมเดาว่าผู้ผลิตเครื่องผมคงจะปล่อยแพตช์ให้ราว ๆ อีกหนึ่งเดือนข้างหน้า แถมยังทำงานได้ใน Chrome renderer sandbox ด้วย

    • ผมซื้อโทรศัพท์ Android ในปี 2023 แต่อัปเดตเคอร์เนลล่าสุดอยู่กลางปี 2024 ถ้าบั๊กนี้อยู่ในช่วงนั้น การได้รับแพตช์อาจจะเป็นฝ่ายที่หาได้ยากเสียด้วยซ้ำ
  • อันนี้ใช้กับ Android ได้ด้วยเหรอ?

    • ก็เขียนไว้ในประโยคที่สองไง
  • มีข้อมูลไหมว่าเขาค้นพบมันได้ยังไง? เห็นว่า Mythos พลาดไป เลยสงสัยว่าพบด้วยความช่วยเหลือจากโมเดลภาษาขนาดใหญ่อื่น หรือมนุษย์ตรวจโค้ดแล้วเจอเอง
    ถ้าอย่างนั้นก็สงสัยด้วยว่าทำไมถึงไปดูส่วนนี้

  • “Linux distribution จำนวนมากอาจได้รับผลกระทบ หากใช้เคอร์เนลที่อิง v6.4 ขึ้นไปและยังไม่ได้ backport แก้ไขเข้ามา ให้ตรวจสอบอัปเดตความปลอดภัยเคอร์เนลของ distribution ว่ามีการ backport commit แก้ไขข้างต้นหรือไม่ เคอร์เนลเก่าที่อิง v6.1 ไม่ได้รับผลกระทบ เพราะบั๊กถูกนำเข้ามาใน v6.4”
    น่าเสียดายแฮะ หวังว่าจะเป็นวิธีดี ๆ สำหรับ root มือถือ แต่ใหม่เกินไป คง ไม่ได้มีประโยชน์เป็นพิเศษ เท่าไร มือถือผมเป็น 5.15