Anthropic ได้เปิดเผยช่องโหว่ร้ายแรง (CVE-2026-98432) ในสแต็ก TCP ของเคอร์เนล Linuxซึ่งอนุญาตให้เรียกใช้โค้ดจากระยะไกลได้โดยการส่งแพ็กเก็ตที่สร้างขึ้นเป็นพิเศษ มีการรายงานช่องโหว่ที่ใช้งานได้จริง ซึ่งอนุญาตให้เรียกใช้โค้ดในระดับเคอร์เนลและได้รับสิทธิ์ระดับรูทบนระบบจากระยะไกล ช่องโหว่นี้เหมาะสำหรับการโจมตีระบบที่มีกระบวนการเซิร์ฟเวอร์ที่ยอมรับการเชื่อมต่อผ่านซ็อกเก็ตเครือข่ายที่รองรับโปรโตคอล Multipath TCP (MPTCP) การสนับสนุน MPTCP สามารถเปิดใช้งานได้ในแต่ละซ็อกเก็ตเครือข่าย ซึ่งเป็นค่าเริ่มต้นในไลบรารีมาตรฐานของ Go เริ่มตั้งแต่ Go 1.24 (กุมภาพันธ์ 2025)
ช่องโหว่ที่เตรียมไว้สามารถใช้กับแอปพลิเคชันเซิร์ฟเวอร์ใดๆ ที่เขียนด้วยภาษา Go รวมถึงเซิร์ฟเวอร์ HTTP ของ Caddy ตราบใดที่สามารถส่งแพ็กเก็ตเครือข่ายไปยังซ็อกเก็ตที่สร้างขึ้นได้ เนื่องจากช่องโหว่นี้มีอยู่ในสแต็ก IPv4 โดยตรงและไม่ได้จำเพาะเจาะจงกับ MPTCP จึงเป็นไปได้ที่จะสร้างช่องโหว่ที่ใช้งานได้โดยไม่พึ่งพา MPTCP แต่ยังไม่มีการสาธิตช่องโหว่ดังกล่าว ตัวอย่างเช่น เป็นไปได้ที่จะใช้ประโยชน์จากช่องโหว่นี้เมื่อประมวลผลคำขอการย้ายซ็อกเก็ต ซึ่งมีอยู่ในคอนฟิกที่มีพารามิเตอร์ net.ipv4.tcp_migrate_req=1 หรือเมื่อใช้โปรแกรม eBPF ที่มีตัวเลือก BPF_SK_REUSEPORT_SELECT_OR_MIGRATE
ช่องโหว่นี้เกิดจากสภาวะการแข่งขัน (race condition) ที่เกิดขึ้นระหว่างการประมวลผลคำขอ SYN ที่ส่งซ้ำพร้อมกันในระหว่างการสร้างการเชื่อมต่อ TCP เนื่องจากฟังก์ชัน tcp_v4_syn_recv_sock() ส่งผ่านพารามิเตอร์จากโครงสร้าง ireq->ireq_opt ไปยังซ็อกเก็ตลูกผ่านการอ้างอิงแทนที่จะคัดลอก ดังนั้นในบางสถานการณ์จึงเกิดกรณีที่หน่วยความจำสำหรับโครงสร้าง inet_opt และ ireq_opt ที่มีพารามิเตอร์ซ็อกเก็ตถูกปล่อยไปแล้ว แต่ตัวเลือกซ็อกเก็ตที่เกี่ยวข้องยังคงถูกใช้งานต่อไป (use-after-free)
การโจมตีจากระยะไกลทำได้โดยการส่งคำขอเครือข่ายที่ซิงโครไนซ์เวลาเป็นชุดๆ การโจมตีนี้ใช้ได้ผลกับเคอร์เนลที่ใช้การสุ่มที่อยู่ (KASLR) แต่การเข้าถึงช่วงเวลาที่เงื่อนไขการแข่งขันเหมาะสมนั้นต้องใช้เวลานานมากและต้องลองใหม่หลายครั้ง การโจมตีจะง่ายขึ้นเนื่องจากหากพลาดช่วงเวลาที่เงื่อนไขการแข่งขันเหมาะสม จะส่งผลให้เกิดการจับมือกันเท่านั้น ไม่ใช่การเกิดข้อผิดพลาดของเคอร์เนล ทำให้สามารถลองได้เรื่อยๆ ในต้นแบบการโจมตี การโจมตีใช้เวลาประมาณหนึ่งชั่วโมง โดย 48 นาทีใช้ในการกำหนดโครงสร้างหน่วยความจำ และอีก 5 นาทีใช้ในการจัดระเบียบการทำงานของโค้ด
ขณะนี้ยังไม่มีวิธีแก้ไขใด ๆ ที่รับประกันว่าจะแก้ช่องโหว่นี้ได้ การติดตั้งการอัปเดตเคอร์เนลเป็นวิธีเดียวที่เชื่อถือได้ ปัญหาเริ่มปรากฏให้เห็นตั้งแต่ระดับเคอร์เนล Linux 4.4 และแก้ไขแล้วในเวอร์ชัน 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 และ 7.3 สามารถตรวจสอบสถานะการแก้ไขช่องโหว่ในแต่ละเวอร์ชันได้ที่หน้าเหล่านี้: Debian, UbuntuSUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora
คำแนะนำสำหรับการรับมือกับวิธีการโจมตีเฉพาะที่ไม่ได้ปิดกั้นช่องโหว่โดยทั่วไป ได้แก่ การปิดใช้งานการสนับสนุน MPTCP และการตั้งค่าพารามิเตอร์ sysctl ของเคอร์เนล net.ipv4.tcp_migrate_req เป็น 0:
sysctl -w net.mptcp.enabled=0
sysctl -w net.ipv4.tcp_migrate_req=0
เพื่อตรวจสอบว่ามีกระบวนการใดในระบบที่ใช้ซ็อกเก็ตหรือไม่
สำหรับ MPTCP คุณสามารถใช้คำสั่งต่อไปนี้:
ip mptcp endpoint show
ip mptcp limits show
ในการปิดใช้งานการสนับสนุน MPTCP ในโปรแกรม Go ให้ใช้แฟล็ก "multipathtcp=0" ซึ่งสามารถตั้งค่าได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม "GODEBUG=multipathtcp=0" หากต้องการปิดใช้งานการสนับสนุน MPTCP ในระหว่างการสร้าง ให้เพิ่ม "godebug multipathtcp=0" ลงในไฟล์ go.mod ในโค้ดแอปพลิเคชันของคุณ คุณสามารถปิดใช้งาน MPTCP ได้โดยใช้ฟังก์ชัน net.Dialer.SetMultipathTCP และ net.ListenConfig.SetMultipathTCP
นอกเหนือจากประเด็นที่กล่าวถึงแล้ว Anthropic ยังประกาศถึงช่องโหว่ที่สามารถใช้ประโยชน์ได้ในระดับท้องถิ่นอีกหลายรายการในเคอร์เนลอีกด้วย Linuxช่องโหว่ในระบบปฏิบัติการ OpenBSD และ FreeBSD ที่อนุญาตให้เข้าถึงระบบด้วยสิทธิ์ root และหลุดออกจากคอนเทนเนอร์ที่แยกต่างหาก; ช่องโหว่ใน Chrome และ Safari ที่นำไปสู่การเรียกใช้โค้ดบนระบบเมื่อเปิดเว็บเพจที่ออกแบบมาเป็นพิเศษ; ช่องโหว่ในเคอร์เนล Windowsส่งผลให้ระบบล่ม; ช่องโหว่ของแพลตฟอร์ม Androidซึ่งช่วยให้คุณสามารถข้ามการล็อกหน้าจอและเข้าถึงข้อมูลส่วนตัวและรูปภาพได้โดยไม่ต้องปลดล็อกอุปกรณ์ (การโจมตีนี้สาธิตบนสมาร์ทโฟน Google Pixel 9)
เสริม:
- ใน nginx ความสามารถในการเปิดใช้งานตัวเลือก IPPROTO_MPTCP สำหรับซ็อกเก็ตเครือข่ายที่กำลังรับฟังนั้นมีมาตั้งแต่เวอร์ชัน 1.29.7 แล้ว แต่ไม่ได้ถูกใช้งานโดยค่าเริ่มต้น
- ใน Lighttpd ตัวเลือกในการเปิดใช้งาน MPTCP มีให้ใช้งานตั้งแต่เวอร์ชัน 1.4.76 เป็นต้นไป
- ใน Apache httpd มีการเพิ่มแพตช์เพื่อรองรับ MPTCP เข้าไปในสาขา Apache httpd 2.5-HEAD ในปี 2024
- ใน systemd เวอร์ชัน 257 ได้เพิ่มการรองรับการเปิดใช้งาน MPTCP เมื่อเปิดใช้งานผ่านซ็อกเก็ต
- ใน Apache Traffic Server ตัวเลือกในการเปิดใช้งาน MPTCP นั้นรองรับตั้งแต่เวอร์ชัน 9.2.4 เป็นต้นไป
- ใน HAProxy ตั้งแต่เวอร์ชัน 3.1.0 เป็นต้นไป ตัวเลือก "mptcp{,4,6}@" สามารถใช้งานได้ ".
- ใน Traefik การตั้งค่าแฟล็ก IPPROTO_MPTCP จะถูกเปิดใช้งานโดยค่าเริ่มต้นตั้งแต่เวอร์ชัน 2.11.26, 3.4.2 และ v3.5.0-rc1 เป็นต้นไป
- ในระบบจัดการฐานข้อมูล Valkey ตั้งแต่เวอร์ชัน 9.0.0 เป็นต้นไป จะมีตัวเลือก "--mptcp" และการตั้งค่า "mptcp yes" และ "repl-mptcp yes" ให้ใช้งานได้
ที่มา: opennet.ru
