Mặc định MPTCP trong Go 1.24 khiến máy chủ Linux đối mặt rủi ro RCE từ kernel
Một lỗ hổng nghiêm trọng trong Linux kernel cho phép thực thi mã từ xa (RCE) thông qua giao thức MPTCP. Go 1.24 bật mặc định giao thức này, đòi hỏi các nhà phát triển phải áp dụng biện pháp giảm thiểu ngay lập tức.
Được dịch tự động từ bản gốc tiếng Anh.
Một lỗ hổng bảo mật nghiêm trọng trong Linux kernel, được xác định là CVE-2026-98432, đặt ra rủi ro lớn cho các máy chủ chạy ứng dụng Go. Vấn đề liên quan đến lỗi use-after-free trong quá trình xử lý kết nối IPv4 TCP, có thể dẫn đến việc Thực thi Mã từ xa (Remote Code Execution). Do phiên bản Go 1.24 bật mặc định Multipath TCP (MPTCP) trên Linux, nhiều dịch vụ Go hiện đại vô tình bị phơi nhiễm trước vector tấn công này nếu không áp dụng các biện pháp giảm thiểu cụ thể hoặc vá lỗi kernel.
Chuyện gì đã xảy ra
Đội ngũ Go đã đưa ra một cảnh báo khẩn cấp sau khi lỗ hổng CVE-2026-98432 được công bố. Lỗ hổng này nằm trong Linux kernel và ảnh hưởng đến cách kernel xử lý các kết nối IPv4 TCP. Các nhà nghiên cứu bảo mật tại Anthropic đã chứng minh một exploit thực tế, trong đó một máy chủ đang lắng nghe kết nối MPTCP có thể bị xâm nhập, cho phép kẻ tấn công thực thi mã tùy ý từ xa. Mặc dù bằng chứng khái niệm (proof-of-concept) nhắm mục tiêu cụ thể vào các hệ thống có listener MPTCP đang hoạt động, nhưng lỗi hỏng bộ nhớ cơ bản không chỉ giới hạn ở lưu lượng MPTCP. Điều này có nghĩa là ngay cả những hệ thống không được cấu hình rõ ràng cho mạng multipath vẫn có thể dễ bị tổn thương bởi các kỹ thuật khai thác tương tự.
Mối lo ngại chính đối với cộng đồng Go bắt nguồn từ một thay đổi được giới thiệu trong Go 1.24. Trong phiên bản này, runtime tự động bật MPTCP cho tất cả các socket listen trên hệ thống Linux. Hành vi mặc định này nhằm mục đích cải thiện khả năng phục hồi và hiệu suất mạng, nhưng giờ đây đã trở thành một bề mặt tấn công đáng kể do lỗi kernel. Các nhà duy trì Go nhấn mạnh rằng việc tắt MPTCP ở tầng ứng dụng chỉ cung cấp một lá chắn tạm thời, chứ không phải là giải pháp hoàn chỉnh. Bản sửa lỗi cơ bản yêu cầu cập nhật hệ điều hành host lên phiên bản kernel bao gồm bản vá cho CVE-2026-98432.
Cơ chế hoạt động
Multipath TCP là một phần mở rộng của giao thức TCP chuẩn, cho phép một kết nối đơn lẻ sử dụng nhiều đường dẫn mạng đồng thời. Điều này cải thiện độ tin cậy và thông lượng bằng cách tổng hợp băng thông hoặc chuyển đổi đường dẫn nếu một đường dẫn bị lỗi. Trong Go 1.24, gói net tự động thiết lập các tùy chọn socket cần thiết để bật MPTCP khi tạo listener trên Linux. Quá trình này diễn ra một cách minh bạch, nghĩa là các nhà phát triển không cần viết thêm mã để kích hoạt nó.
Lỗ hổng CVE-2026-98432 là một lỗi use-after-free trong stack TCP của kernel. Khi kernel xử lý một số gói tin TCP nhất định, nó có thể giải phóng sớm một đối tượng bộ nhớ nhưng tiếp tục tham chiếu đến nó. Kẻ tấn công có thể chế tạo các gói tin cụ thể để kích hoạt điều kiện này, tiềm ẩn nguy cơ ghi đè các cấu trúc bộ nhớ và giành quyền kiểm soát luồng thực thi. Vì Go 1.24 mặc định mở cửa cho việc đàm phán MPTCP, bất kỳ dịch vụ Go nào đang lắng nghe trên giao diện công cộng đều trở thành mục tiêu tiềm năng cho exploit cấp kernel này, bất kể logic ứng dụng có thực sự sử dụng các tính năng multipath hay không.
Chi tiết chính
- ID Lỗ hổng: CVE-2026-98432 ảnh hưởng đến việc xử lý IPv4 TCP trong Linux kernel.
- Tác động: Có thể xảy ra Thực thi Mã từ xa (RCE) thông qua các gói tin được chế tạo đặc biệt.
- Phiên bản Go: Go 1.24 bật MPTCP mặc định cho các socket listen trên Linux.
- Bản sửa lỗi chính: Nâng cấp Linux kernel lên phiên bản đã được vá ngay lập tức.
- Giảm thiểu lúc chạy (Runtime): Đặt
GODEBUG=multipathtcp=0trong môi trường để tắt MPTCP. - Giảm thiểu lúc build (Build-time): Thêm
godebug multipathtcp=0vào tệpgo.mod.
Tại sao điều này quan trọng
Đối với các kỹ sư phần mềm và trưởng nhóm kỹ thuật, sự cố này làm nổi bật các phụ thuộc ẩn giữa runtime ứng dụng và kernel hệ điều hành. Nhiều đội ngũ giả định rằng việc cập nhật runtime ngôn ngữ hoặc mã ứng dụng là đủ cho bảo mật. Tuy nhiên, vì Go 1.24 thay đổi một mặc định mạng cấp thấp, nó tương tác nguy hiểm với một kernel chưa được vá. Điều này tạo ra kịch bản nơi một codebase ứng dụng an toàn vẫn có thể bị xâm nhập do các lỗ hổng ở cấp hạ tầng. Nó buộc các đội DevOps và nền tảng phải phối hợp vá kernel trên tất cả các môi trường sản xuất một cách khẩn cấp.
Hơn nữa, cảnh báo khuyên không nên chỉ dựa vào việc tắt ở tầng ứng dụng. Việc đặt GODEBUG=multipathtcp=0 được mô tả là một "biện pháp giảm thiểu mong manh". Nếu một instance dịch vụ bị cấu hình sai hoặc nếu một dịch vụ mới được triển khai mà thiếu cờ này, toàn bộ host vẫn gặp rủi ro. Ngoài ra, cách tiếp cận này giả định rằng mọi exploit đều yêu cầu một listener MPTCP đang hoạt động, điều có thể không đúng do bản chất chung của lỗi use-after-free. Sự không chắc chắn này có nghĩa là việc tắt MPTCP chỉ là một biện pháp tạm thời, không phải chiến lược bảo mật dài hạn.
Bạn có thể làm gì
- Ưu tiên vá các kernel Linux của bạn lên các phiên bản giải quyết CVE-2026-98432.
- Nếu không thể cập nhật kernel ngay lập tức, hãy đặt
GODEBUG=multipathtcp=0trong các biến môi trường sản xuất của bạn. - Thêm
godebug multipathtcp=0vào tệpgo.modcủa bạn để thực thi việc tắt ở thời điểm build. - Kiểm toán hạ tầng của bạn để đảm bảo không có dịch vụ cũ nào vô tình phơi bày các listener MPTCP.
- Theo dõi cuộc thảo luận trên issue tracker của Go về các thay đổi trong tương đối đối với hành vi mặc định.
- Xem xét việc sử dụng
net.Dialer.SetMultipathTCPvànet.ListenConfig.SetMultipathTCPđể quản lý rõ ràng hành vi socket.



