Tóm tắt nhanh

  • Nhóm Docker đã phát hành bản giảm thiểu cho lỗ hổng Copy Fail (CVE-2026-31431).
  • Để bảo vệ khỏi lỗ hổng Copy Fail, bạn nên nâng cấp lên Docker Engine v29.4.3 hoặc mới hơn.
  • Phiên bản vá này triển khai chiến lược phòng thủ theo chiều sâu sử dụng AppArmor và SELinux để chặn việc tạo socket AF_ALG, là bề mặt syscall cụ thể mà khai thác yêu cầu.

Giới thiệu

Nếu bạn sử dụng Linux, chắc hẳn bạn đã nghe về một lỗ hổng bảo mật nghiêm trọng mang tên Copy Fail (CVE-2026-31431) vừa ảnh hưởng đến nhiều hệ thống Linux. Lỗ hổng này ảnh hưởng đến hầu hết mọi hệ thống Linux được xây dựng từ năm 2017.

Vì Docker chia sẻ nhân Linux với các container, lỗ hổng này đặt container của bạn vào rủi ro. May mắn thay, nhóm Docker đã phát hành bản sửa lỗi cho lỗ hổng Copy Fail.

Lỗ hổng Copy Fail là gì?

Copy Fail (CVE-2026-31431) là một lỗ hổng logic nhân Linux mức độ nghiêm trọng cao cho phép người dùng cục bộ không có đặc quyền giành được quyền root hoặc thoát khỏi container bằng cách ghi bốn byte có kiểm soát vào bộ nhớ đệm trang (page cache) của hệ thống.

Nói một cách dễ hiểu, Copy Fail là một sai sót trong cách Linux xử lý toán học cho dữ liệu mã hóa. Một người dùng thông thường có thể khai thác lỗi logic này để ghi dữ liệu vào page cache. Vì page cache lưu trữ bản sao của các tệp trong bộ nhớ, kẻ tấn công có thể "thay đổi" tệp mà không thực sự chạm vào đĩa.

Ví dụ, một hacker có thể thay đổi tệp hệ thống để cấp cho mình quyền "root". Trong môi trường Docker, một container bị xâm nhập có thể tấn công toàn bộ máy chủ hoặc các container khác.

Được phát hiện bởi các nhà nghiên cứu tại Xint Code, lỗ hổng Copy Fail khai thác hệ thống con mật mã của nhân và ảnh hưởng đến hầu hết các bản phân phối Linux chính thống được phát hành từ năm 2017.

Một chi tiết đáng ngạc nhiên về Copy Fail là tính tàng hình của nó. Nó hoàn toàn vô hình trước phân tích pháp y đĩa. Vì ghi độc hại bỏ qua đường dẫn Hệ thống tệp ảo (VFS) tiêu chuẩn, dữ liệu bị hỏng chỉ tồn tại trong RAM và không bao giờ chạm vào đĩa vật lý.

Do đó, một hình ảnh pháp y của đĩa sẽ hiển thị tệp sạch ban đầu, và sự hỏng hóc biến mất hoàn toàn không để lại dấu vết sau khi hệ thống khởi động lại hoặc page cache bị loại bỏ.

Docker bảo vệ bạn như thế nào

Khai thác dựa vào một loại kết nối cụ thể gọi là socket AF_ALG. Để ngăn chặn cuộc tấn công, Docker cần chặn các container tạo các kết nối này.

Nỗ lực đầu tiên (v29.4.2)

Ban đầu, Docker đã cố gắng chặn các socket này bằng một công cụ gọi là seccomp. Tuy nhiên, phiên bản này cũng chặn một công cụ hệ thống cũ hơn có tên socketcall. Mặc dù điều này ngăn chặn lỗi, nhưng vô tình làm hỏng mạng cho các ứng dụng 32-bit, chương trình Go và các trò chơi cũ.

Bản sửa lỗi tốt hơn (v29.4.3)

Phiên bản Docker v29.4.3 khắc phục những vấn đề này. Thay vì chặn quá nhiều, nó sử dụng các lớp bảo mật thông minh hơn như AppArmor và SELinux. Các công cụ này chặn cụ thể các kết nối "Copy Fail" mà không làm hỏng các ứng dụng 32-bit của bạn.

Các bước áp dụng giảm thiểu Copy Fail cho Docker

1. Cập nhật kernel Linux của bạn

Đây là cách duy nhất để sửa nguyên nhân gốc rễ của lỗi. Kiểm tra bản phân phối Linux của bạn để có các bản vá bảo mật mới nhất.

Các bản phân phối Linux phổ biến đã phát hành các bản vá để sửa lỗ hổng Copy Fail. Để áp dụng các bản sửa lỗi, bạn chỉ cần cập nhật hệ thống và khởi động lại.

Ubuntu / Debian

sudo apt update && sudo apt full-upgrade -y
sudo reboot

Fedora

sudo dnf upgrade --refresh -y
sudo reboot

RHEL / AlmaLinux / Rocky Linux

sudo dnf update -y
sudo reboot

CentOS Stream

sudo dnf upgrade -y
sudo reboot

Arch Linux

sudo pacman -Syu
sudo reboot

openSUSE

sudo zypper refresh
sudo zypper update -y
sudo reboot

Alpine Linux

sudo apk update
sudo apk upgrade
sudo reboot

2. Nâng cấp Docker Engine

Nếu bạn không thể vá kernel ngay lập tức, Docker đã phát hành bản giảm thiểu trong Docker Engine v29.4.3 và mới hơn.

$ sudo docker version
[sudo: authenticate] Password:
Client: Docker Engine - Community
Version:           29.5.2
API version:       1.54
Go version:        go1.26.3
Git commit:        79eb04c
Built:             Wed May 20 14:38:06 2026
OS/Arch:           linux/amd64
Context:           default
Server: Docker Engine - Community
Engine:
Version:          29.5.2
API version:      1.54 (minimum version 1.40)
Go version:       go1.26.3
Git commit:       568f755
Built:            Wed May 20 14:38:06 2026
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          v2.2.4
GitCommit:        193637f7ee8ae5f5aa5248f49e7baa3e6164966e
runc:
Version:          1.3.5
GitCommit:        v1.3.5-0-g488fc13e
docker-init:
Version:          0.19.0
GitCommit:        de40ad0

Điều này cung cấp một lớp phòng thủ quan trọng ngay cả khi bạn chưa thể khởi động lại toàn bộ máy chủ.

Tuy nhiên, việc cập nhật kernel Linux và khởi động lại hệ thống vẫn được khuyến nghị mạnh mẽ.

3. Chặn danh sách đen các mô-đun

Nếu bạn không thể cập nhật hệ thống ngay lập tức, bạn có thể vô hiệu hóa thủ công các phần bị ảnh hưởng của Linux. Bạn có thể thực hiện điều này bằng cách thêm blacklist af_alg vào cài đặt mô-đun của hệ thống.

Lưu ý: Các bản phân phối như Fedora đã phát hành kernel 7.0.4 chứa bản vá.

Kết luận

Hiện đã có bản giảm thiểu cho Docker để giúp bảo vệ khỏi lỗ hổng Copy Fail (CVE-2026-31431). Nếu bạn không thể vá kernel máy chủ ngay lập tức, bạn nên nâng cấp lên Docker Engine v29.4.3 hoặc mới hơn.

Tuy nhiên, vẫn khuyến nghị mạnh mẽ rằng bạn cập nhật kernel máy chủ và khởi động lại hệ thống. Bằng cách cập nhật cả kernel và Docker Engine, bạn có thể bảo vệ hệ thống của mình khỏi một số lỗ hổng leo thang đặc quyền cục bộ (https://ostechnix.com/tag/lpe/) nghiêm trọng.