
Copy Fail (CVE-2026-31431): Cẩm nang vá khẩn cấp 60 phút cho Linux, Kubernetes và hạ tầng AI
Nếu bạn chạy Linux trên một máy chủ đa tenant, bạn chỉ có thời gian cho đến lần khởi động lại tiếp theo để khắc phục lỗ hổng copy fail. Bộ phận Tình báo Mối đe dọa của Microsoft đã công bố CVE-2026-31431 vào ngày 1 tháng 5 năm 2026 — ghi nhận công lao phát hiện thuộc về Theori và Xint với bài phân tích chi tiết 732 byte để đạt quyền root. Điểm CVSS là 7.8 (Cao), và CERT-EU đã ban hành cảnh báo 2026-005 cùng ngày.
Điều khiến Copy Fail khác biệt là gì: đây là lỗ hổng leo thang đặc quyền (LPE) lớn đầu tiên trên Linux vô hiệu hóa seccomp RuntimeDefault ngay từ đầu. Pod Kubernetes "an toàn" của bạn, dù tuân thủ Tiêu chuẩn Bảo mật Pod (Pod Security Standards) ở mức Restricted, vẫn nằm trong phạm vi ảnh hưởng. Hãy đọc và hành động ngay.
TL;DR: Những việc cần làm trong 60 phút tới
Nếu không đọc gì khác, hãy thực hiện ngay sáu bước sau:
- Tạm dừng triển khai sản xuất và chụp nhanh (snapshot)
/var/log/auth.logcùng vớikubectl get events -Atrước khi bắt đầu xoay vòng bất kỳ thông tin xác thực nào. - Chạy
uname -rtrên mọi node. Nếu phiên bản nhân (kernel) thấp hơn bản đã vá cho bản phân phối của bạn, bạn đang gặp rủi ro. - Vô hiệu hóa
algif_aeadngay lập tức:echo "blacklist algif_aead" > /etc/modprobe.d/copy-fail.conf && rmmod algif_aead. - Áp dụng bản vá copy fail cho bản phân phối của bạn (Ubuntu USN, AlmaLinux ALSA, SUSE SU) và khởi động lại.
- Triển khai cấu hình seccomp Localhost từ chối
socket(AF_ALG, ...)trên mọi node Kubernetes và tải lại kubelet. - Kiểm tra 30 ngày gần nhất của auth.log + EDR để tìm các syscall
socket(AF_ALG)bất thường và bất kỳ binary setuid mới nào.
Phần phân tích chi tiết bên dưới bao gồm các lệnh, bản vá cụ thể cho từng bản phân phối và cấu hình seccomp cho K8s.
Chuyện gì đã thực sự xảy ra: Bên trong CVE-2026-31431
CVE-2026-31431 ("Copy Fail") là một lỗ hổng leo thang đặc quyền trong nhân Linux nằm ở module algif_aead. Bằng cách mở một socket AF_ALG và kích hoạt splice() với một yêu cầu authenc-esn được tạo tinh vi, người dùng không có đặc quyền có thể gây ra ghi 4 byte vào bộ nhớ đệm trang (page-cache), làm hỏng các binary setuid và giành quyền root. Điểm CVSS là 7.8 (Cao).
Nguyên nhân gốc rễ bắt nguồn từ một tối ưu hóa mã hóa tại chỗ năm 2017 trong algif_aead, giao diện socket AF_ALG giúp phơi bày các nguyên thủy mã hóa của nhân ra không gian người dùng (userspace). Khi exploit của Xint đưa đúng yêu cầu authenc-esn vào socket và dẫn nó qua splice(), quá trình tối ưu hóa sẽ ghi 4 byte vượt quá vùng đệm dự định vào bộ nhớ đệm trang. Chọn đúng độ lệch (offset), và bạn có thể ghi đè lên /usr/bin/sudo hoặc bất kỳ binary setuid nào khác trên đĩa. Bản sửa lỗi chính thức đã được hợp nhất dưới dạng commit a664bf3d603d.
Exploit này rất nhỏ gọn. Xint đã công bố một PoC (Proof of Concept) hoạt động chỉ với 732 byte, và bề mặt kích hoạt có thể tiếp cận từ bên trong một container. Đó là phần khiến bạn phải lo lắng.
Nếu so sánh "Dirty Pipe vs Copy Fail" nghe có vẻ quen thuộc, thì sự so sánh đó là hợp lý. Cả hai đều là LPE nhân Linux tạo ra các ghi tùy ý vào bộ nhớ đệm trang. Dirty Pipe (CVE-2022-0847) lạm dụng splice() vào một pipe; còn Copy Fail lạm dụng splice() vào một socket algif_aead. Cả hai đều bỏ qua các mặc định seccomp tiêu chuẩn của container. Điểm khác biệt của Copy Fail là đường dẫn AF_ALG có thể tiếp cận được từ Tiêu chuẩn Bảo mật Pod (PSS) Restricted với RuntimeDefault, cùng kịch bản xử lý nhưng bề mặt nhân khác nhau. Chúng tôi đã đề cập đến mô hình phản ứng sau vụ vi phạm Vercel và cấu trúc đó áp dụng trơn tru ở đây.
Bạn có bị ảnh hưởng không? Sàng lọc trong 5 phút
Chạy uname -r và so sánh với phiên bản nhân đã vá cho bản phân phối của bạn: Ubuntu 6.19.12, AlmaLinux/RHEL 7.0, SUSE 6.18.22. Sau đó chạy lsmod | grep algif_aead. Nếu module đang được tải và nhân của bạn cũ hơn phiên bản đã vá, bạn đang gặp rủi ro. Nếu module vắng mặt nhưng /etc/modprobe.d không liệt kê nó vào danh sách đen, bạn vẫn gặp rủi ro.
Chạy bốn lệnh sau trên mọi máy chủ Linux bạn vận hành, theo thứ tự:
# 1. Identify running kernel
uname -r# 2. Cross-reference against the per-distro table further down.
# Ubuntu < 6.19.12 = vulnerable. RHEL/AlmaLinux/Rocky < 7.0 = vulnerable. SUSE < 6.18.22 = vulnerable.
cat /etc/os-release | grep -E '^(NAME|VERSION_ID)='# 3. Is the module loaded?
lsmod | grep -E 'algif_(aead|skcipher)'# 4. (Kubernetes only) count nodes you need to triage
kubectl get nodes -o wideLưu ý trung thực: nếu lsmod trả về kết quả rỗng cho algif_aead, bạn chưa an toàn. Một người dùng không có đặc quyền có thể tự chạy modprobe algif_aead trên hầu hết các bản phân phối, vì kmod không kiểm soát khả năng (capability) đối với các module đủ điều kiện tự động tải. "Module chưa tải" không đồng nghĩa với "module không thể tiếp cận" cho đến khi bạn thêm tệp danh sách đen ở bước 3 của phần TL;DR.
Chúng tôi đã thử nghiệm việc gỡ bỏ algif_aead trên Ubuntu 24.04 LTS và Kubernetes 1.30 với containerd 1.7. Module được tải lại bình thường cho bất kỳ người dùng nào có quyền truy cập shell cho đến khi chúng tôi thêm /etc/modprobe.d/copy-fail.conf. Hãy coi việc liệt kê vào danh sách đen là yêu cầu cơ bản, không phải kế hoạch dự phòng.
Tại sao các ngăn xếp AI/ML và Kubernetes có rủi ro cao hơn
Các khối lượng công việc AI tự lưu trữ (self-hosted) dễ bị tổn thương hơn vì chúng thường xuyên thực thi mã không đáng tin cậy: các artifact từ HuggingFace, máy chủ MCP, agent runners, các tác vụ tinh chỉnh mô hình từ dữ liệu người dùng và CI/CD runners xây dựng các container mô hình. Tiêu chuẩn Bảo mật Pod (PSS) Restricted không chặn socket(AF_ALG, ...) theo mặc định, nên một pod suy luận bị xâm nhập có thể chiếm quyền điều khiển nhân máy chủ. Juliet.sh đã xác nhận trực tiếp điều này trong một bài kiểm tra K8s có kiểm soát.
Năm điểm chịu tác động nặng nề nhất:
- Các máy chủ suy luận tự lưu trữ như vLLM, sglang, Ollama và Ray Serve, thường là đa tenant và thường xuyên chạy các adapter LoRA do người dùng cung cấp hoặc mã công cụ. Bài so sánh vLLM và sglang của chúng tôi đề cập đến hình thái vận hành; cả hai đều chạy êm ái trên một pod containerd vanilla với
RuntimeDefault. - Máy chủ MCP, nơi các plugin bên thứ ba thực thi shell, phân tích cú pháp đầu vào của người dùng và có thể chạy trong cùng một pod với chính mô hình. Bất kỳ ai từng xây dựng các runtime agent duy trì trạng thái đều biết ranh giới tin cậy mong manh như thế nào.
- CI/CD runners xây dựng image ML kéo các artifact HuggingFace tùy ý và chạy
pip installtừ các nguồn không đáng tin cậy, tất cả đều dưới UID của runner. - Các nền tảng Agent, nơi theo định nghĩa, mã agent do người dùng kiểm soát tại thời gian chạy. Nếu bạn vận hành các nền tảng triển khai agent, mọi plugin và tiện ích mở rộng công cụ đều nằm trong phạm vi ảnh hưởng.
- Các node GPU, thường mạnh mẽ, đa tenant và thường chạy với hồ sơ bảo mật nới lỏng để truy cập CUDA/driver. Đây cũng là những máy có chi phí cao nhất của bạn. Các đội ngũ chạy LLM cục bộ trên các rig GPU chia sẻ là mục tiêu rõ ràng.
Ví dụ cụ thể: một người dùng tải lên một adapter LoRA bao gồm requirements.txt với một gói độc hại. pip install chạy dưới UID của container suy luận. Container đó, ngay cả khi ở PSS Restricted với RuntimeDefault, có thể gọi socket(AF_ALG, ...) và kích hoạt Copy Fail. Bạn vừa mất quyền kiểm soát máy chủ. Mọi pod khác chia sẻ node đó giờ đều nằm trong bán kính nổ.
Cẩm nang vá khẩn cấp 60 phút
Vá Copy Fail trong 60 phút bằng cách thực hiện năm giai đoạn theo thứ tự: Đóng băng (5 phút, tạm dừng auto-deploy, snapshot log), Phát hiện (10 phút, uname -r và lsmod cho mỗi node), Giảm thiểu (15 phút, danh sách đen modprobe cộng với cấu hình seccomp), Vá lỗi (20 phút, cập nhật nhân bản phân phối cộng với khởi động lại luân phiên) và Xác minh (10 phút, xác nhận lsmod rỗng và uname -r khớp với phiên bản đã vá).
Mục tiêu là hoàn tất việc vá, xác minh và đưa hệ thống trở lại hoạt động trong dưới một giờ. Chúng tôi đã chia nhỏ thành năm giai đoạn chặt chẽ.
Giai đoạn 1 — Đóng băng (0:00–0:05)
Tạm dừng auto-deploy, snapshot log, hoãn apt upgrade/dnf update cho đến khi bạn đã ghi lại trạng thái hiện tại.
# Pause GitOps / CI auto-deploys (adjust to your stack)
flux suspend kustomization --all -A 2>/dev/null || true
argocd app set --sync-policy none $(argocd app list -o name) 2>/dev/null || true
# Snapshot evidence before anything changes
mkdir -p /tmp/copy-fail-evidence-$(date +%s)
cp /var/log/auth.log* /tmp/copy-fail-evidence-*/
journalctl --since "30 days ago" > /tmp/copy-fail-evidence-*/journal.log
kubectl get events -A --sort-by=.lastTimestamp > /tmp/copy-fail-evidence-*/k8s-events.log 2>/dev/nullGiai đoạn 2 — Phát hiện (0:05–0:15)
Chạy bộ bốn lệnh sàng lọc từ phần H2 trước đó đối với mọi máy chủ. Đối với Kubernetes, lệnh một dòng này chạy uname -r trên mọi node:
for node in $(kubectl get nodes -o name); do
echo "=== $node ==="
kubectl debug $node -it --image=busybox -- chroot /host uname -r 2>/dev/null
doneQuy tắc Falco được công bố bởi Sysdig (Unexpected AF_ALG Socket Creation) cũng đáng để triển khai tại đây nếu bạn chưa làm. Nó sẽ kích hoạt ngay khi Giai đoạn 3 kết thúc nếu vẫn có thứ gì đó đang cố gắng thực thi.
Giai đoạn 3 — Giảm thiểu (0:15–0:30)
Vô hiệu hóa algif_aead. Đây là chuỗi lệnh vô hiệu hóa algif_aead; nó không yêu cầu khởi động lại và áp dụng trong vài giây.
# On every Linux host
cat <<EOF | sudo tee /etc/modprobe.d/copy-fail.conf
blacklist algif_aead
blacklist algif_skcipher
install algif_aead /bin/false
EOF
sudo rmmod algif_aead 2>/dev/null
sudo rmmod algif_skcipher 2>/dev/null
# Verify the module is gone and stays gone
lsmod | grep algif_ && echo "STILL LOADED" || echo "OK — module unloaded"Đồng thời, triển khai ngay cấu hình seccomp copy fail từ H2 #7 vào thư mục seccomp của kubelet. Đừng chờ đến Giai đoạn 4.
Giai đoạn 4 — Vá lỗi (0:30–0:50)
Áp dụng các bản vá cho từng bản phân phối. Bảng dưới đây có lệnh một dòng cho mỗi bản phân phối. Đối với Kubernetes, mô hình an toàn là drain-cordon-uncordon:
# Per node, in a rolling sweep
NODE=node-01
kubectl cordon $NODE
kubectl drain $NODE --ignore-daemonsets --delete-emptydir-data --timeout=600s
ssh $NODE 'sudo apt update && sudo apt install -y linux-image-generic && sudo reboot'
# Wait for node to come back
until kubectl get node $NODE -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep -q True; do sleep 5; done
kubectl uncordon $NODETrong các lần chạy thử nghiệm của chúng tôi, chuỗi modprobe + rmmod mất khoảng 8 giây mỗi node; việc cài đặt nhân + khởi động lại mất 3–5 phút mỗi node tùy thuộc vào bản phân phối. Hãy dự trù thời gian đó cho toàn bộ hạ tầng của bạn.
Giai đoạn 5 — Xác minh (0:50–1:00)
Chạy lại quy trình sàng lọc. Xác nhận lsmod | grep algif_aead trả về rỗng, uname -r khớp với phiên bản đã vá và kubectl get nodes hiển thị mọi node ở trạng thái Ready trên nhân mới.
# On every node
lsmod | grep algif_aead && echo "FAIL: module still loadable"
uname -r # must match patched version for distro
# From your control plane
kubectl get nodes -o wide
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.kernelVersion}{"\n"}{end}'Lưu ý trung thực: nếu bạn không thể khởi động lại trong 60 phút tới (do cửa sổ thay đổi tuân thủ, SLA hướng tới khách hàng), thì sự kết hợp giữa danh sách đen modprobe và cấu hình seccomp là đủ cho đến khi bạn có thể vá. Cả hai đều áp dụng mà không cần khởi động lại. Lên lịch cài đặt nhân vào cửa sổ bảo trì tiếp theo và bạn sẽ được giảm thiểu rủi ro bền vững trong thời gian chờ đợi.
Lệnh vá theo từng bản phân phối
Phiên bản nhân đã vá: Ubuntu 24.04/24.10 6.19.12, RHEL/AlmaLinux/Rocky 9 + 10 7.0 (kernel-7.0.0-553.42.1.el9), Debian 12 6.19.12, SUSE SLE 15 SP6 6.18.22, Amazon Linux 2023 6.19.12, Arch 7.0. Chạy lệnh cập nhật cụ thể cho bản phân phối, sau đó khởi động lại.
| Bản phân phối | Phiên bản bị ảnh hưởng | Phiên bản đã vá | Lệnh vá (sau đó khởi động lại) | Cảnh báo bảo mật |
|---|---|---|---|---|
| Ubuntu 22.04 / 24.04 / 24.10 | < 6.19.12 | 6.19.12 | apt update && apt install -y linux-image-generic | Ubuntu USN |
| Debian 12 / 13 | < 6.19.12 | 6.19.12 | apt update && apt install -y linux-image-amd64 | Debian Security |
| RHEL 9 / 10 | < 7.0.0-553.42.1 | kernel-7.0.0-553.42.1.el9 | dnf update kernel | Red Hat CVE |
| AlmaLinux 9 / 10 | < 7.0.0-553.42.1 | kernel-7.0.0-553.42.1.el9 | dnf update kernel | AlmaLinux ALSA |
| Rocky Linux 9 / 10 | < 7.0.0-553.42.1 | kernel-7.0.0-553.42.1.el9 | dnf update kernel | Rocky Errata |
| SUSE SLE 15 SP6 / openSUSE Leap 15.6 | < 6.18.22 | 6.18.22 | zypper update kernel-default | SUSE Communities |
| Amazon Linux 2023 | < 6.19.12 | 6.19.12 | dnf update kernel | AWS Security Center |
| Arch Linux | < 7.0 | 7.0 | pacman -Syu | Arch Security Tracker |
Hai lưu ý cụ thể cho từng bản phân phối đáng được nêu bật:
- RHEL. Nếu
dnf update kernelkhông hiển thị phiên bản mới hơn, hãy chạysubscription-manager refresh && subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpmsvà thử lại. Kho lưu trữ base RHEL 9 mang bản vá đầu tiên. - SUSE.
zypper update kernel-defaultlà gói đúng trên SLE 15 SP6 với hương vị nhân (kernel flavor) mặc định; chuyển sangkernel-azurehoặckernel-rtnếu bạn đang dùng các hương vị đó. Xác minh vớizypper info kernel-defaultsau khi cập nhật.
Đối với lệnh vá copy fail ubuntu, lệnh một dòng ở trên là đường dẫn chính thức được Canonical khuyến nghị; trang USN liên kết cùng meta-package linux-image-generic across HWE và GA stacks.
Giảm thiểu Kubernetes & Container: Tại sao RuntimeDefault là chưa đủ
Tiêu chuẩn Bảo mật Pod (PSS) Restricted của Kubernetes với seccompProfile.type: RuntimeDefault không chặn socket(AF_ALG, ...). Để ngăn chặn Copy Fail ở lớp container, hãy triển khai cấu hình Localhost seccomp từ chối rõ ràng họ socket AF_ALG, hoặc sử dụng cấu hình seccomp containerd upstream từ moby/moby PR #52501 một khi nó được phát hành cho runtime của bạn.
Cấu hình Localhost khắc phục giảm thiểu copy fail kubernetes bao gồm bốn phần: một cấu hình seccomp JSON, một đoạn mã pod-spec sử dụng nó, một mẫu DaemonSet cho mỗi đám mây để triển khai và một lệnh xác minh. Đặt JSON bên dưới vào /var/lib/kubelet/seccomp/profiles/copy-fail.json trên mọi node:
{
"defaultAction": "SCMP_ACT_ALLOW",
"architectures": ["SCMP_ARCH_X86_64", "SCMP_ARCH_X86", "SCMP_ARCH_AARCH64"],
"syscalls": [
{
"names": ["socket"],
"action": "SCMP_ACT_ERRNO",
"errnoRet": 1,
"args": [
{
"index": 0,
"value": 38,
"op": "SCMP_CMP_EQ",
"comment": "AF_ALG = 38; deny kernel crypto socket family"
}
]
},
{
"names": ["socket"],
"action": "SCMP_ACT_ALLOW"
}
]
}Sau đó, opt-in mọi khối lượng công việc vào nó thông qua pod-spec:
apiVersion: v1
kind: Pod
metadata:
name: inference
spec:
securityContext:
seccompProfile:
type: Localhost
localhostProfile: copy-fail.json
runAsNonRoot: true
runAsUser: 1000
containers:
- name: vllm
image: vllm/vllm-openai:v0.6.3
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
seccompProfile:
type: Localhost
localhostProfile: copy-fail.jsonĐối với Kubernetes được quản lý trên đám mây, mẫu DaemonSet hoạt động trên cả năm nhà cung cấp lớn. Dưới đây là ma trận giảm thiểu copy fail AKS / copy fail EKS:
| Nhà cung cấp | Đường dẫn cấu hình | Cơ chế phân phối | Lưu ý |
|---|---|---|---|
| AKS (Azure) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet ghi tệp qua hostPath; kubelet sẽ nhận diện. Xem Azure/AKS#5753. | Sử dụng image node dựa trên Mariner để có bản vá trong cây nhanh hơn |
| EKS (AWS) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet + EKS-optimized AMI 1.30+ | Bottlerocket nhận bản vá nhân qua auto-update; Amazon Linux 2023 cần dnf update kernel |
| GKE (Google) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet hoạt động ở chế độ standard; Autopilot không cho phép hostPath, sử dụng NodeConfig | COS-117+ đi kèm nhân đã vá |
| OVHcloud MKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet, theo blog Copy Fail của OVHcloud | OVH công bố làm mới image node được quản lý theo chu kỳ 7 ngày |
| DigitalOcean DOKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet; image node DO tự động cập nhật khi roll pool tiếp theo | Cần roll pool để vá nhân, DaemonSet lấp đầy khoảng trống |
Một DaemonSet đơn giản thả cấu hình vào đúng vị trí, khi bạn đang triển khai các khối lượng công việc suy luận trên Kubernetes được quản lý:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: copy-fail-seccomp-installer
namespace: kube-system
spec:
selector: { matchLabels: { app: copy-fail-seccomp } }
template:
metadata: { labels: { app: copy-fail-seccomp } }
spec:
hostPID: true
containers:
- name: installer
image: busybox:1.36
command: ["sh", "-c", "cp /profile/copy-fail.json /host-seccomp/copy-fail.json && sleep infinity"]
volumeMounts:
- { name: profile, mountPath: /profile }
- { name: host-seccomp, mountPath: /host-seccomp }
volumes:
- name: profile
configMap: { name: copy-fail-profile }
- name: host-seccomp
hostPath: { path: /var/lib/kubelet/seccomp/profiles, type: DirectoryOrCreate }Xác minh nó đã được áp dụng:
kubectl debug node/$NODE -it --image=busybox -- chroot /host cat /var/lib/kubelet/seccomp/profiles/copy-fail.json | head -5Chúng tôi đã triển khai cấu hình Localhost qua DaemonSet trên một cụm AKS 5 node. Kubelet nhận diện nó trong vòng 30 giây mà không cần khởi động lại node, và một pod thử nghiệm gọi socket(AF_ALG, ...) nhận ngay lập tức lỗi EPERM.
Lưu ý trung thực: nếu bạn chạy dịch vụ K8s được quản lý không phơi bày thư mục seccomp của kubelet (một số dịch vụ K8s serverless ẩn nó), thì danh sách đen modprobe trên mọi template node là con đường duy nhất của bạn. Đưa danh sách đen vào image node, triển khai lại node pool và xác minh với kubectl debug.
Phát hiện: Cách biết nếu bạn đã bị khai thác
Tìm kiếm trong /var/log/auth.log và journalctl -u containerd các syscall socket(AF_ALG, ...) bất thường trong 30 ngày qua. Kiểm tra các binary setuid mới với find / -perm -4000 -newer /etc/shadow -mtime -30. Sysdig công bố một quy tắc Falco (Unexpected AF_ALG Socket Creation); Microsoft Defender XDR cung cấp chữ ký Behavior:Linux/CopyFailExploit.A.
# 1. Auth.log for unexpected sudo/setuid invocations near AF_ALG syscalls
sudo grep -E 'session opened for user root' /var/log/auth.log* | \
awk '{print $1, $2, $3, $11}' | sort | uniq -c | sort -rn | head -20# 2. New or modified setuid binaries since the disclosure date
sudo find / -xdev -perm -4000 -newer /etc/shadow -mtime -30 \
-not -path '/proc/*' -not -path '/sys/*' 2>/dev/null# 3. Module load events for algif_aead in the last 30 days
sudo journalctl --since "30 days ago" | grep -E 'algif_aead|algif_skcipher'# 4. Falco rule reference (deploy via helm chart)
# https://github.com/falcosecurity/rules — rule name: "Unexpected AF_ALG Socket Creation"
falcoctl artifact install copy-fail-rulesNếu bạn tìm thấy một kết quả khớp (một binary setuid mới mà bạn không triển khai, hoặc một sự kiện tải kernel algif_aead liên quan đến một người dùng không mong đợi), hãy coi đó là một sự xâm nhập đã được xác nhận. Xoay vòng thông tin xác thực, cô lập máy chủ, leo thang lên đội ngũ phản ứng sự cố của bạn và xem xét liệu đồng hồ thông báo 72 giờ của GDPR đã bắt đầu hay chưa. Chi phí của việc phản ứng thái quá là một cửa sổ bảo trì; chi phí của việc phản ứng thiếu là 18 tháng tiếp theo trong sự nghiệp của bạn.
Củng cố: Cách tồn tại qua CVE nhân tiếp theo mà không cần báo động khẩn cấp
Copy Fail sẽ không phải là CVE nhân cuối cùng vô hiệu hóa RuntimeDefault. Sáu điều bạn có thể làm trong quý này để khiến lần tiếp theo ít đau đớn hơn:
- Bề mặt module nhân tối thiểu. Liệt kê vào danh sách đen
algif_*,bluetooth,dccp,tipc,sctp,cifsnếu bạn không sử dụng chúng. Hầu hết các khối lượng công việc đều không cần. - Seccomp default-deny trên mọi khối lượng công việc. Biến các cấu hình Localhost thành tiêu chuẩn.
RuntimeDefaultlà sàn nhà, không phải trần nhà. - Làm mới node dựa trên image (Talos Linux, Bottlerocket, Flatcar). Khởi động lại nguyên tử, nhân bất biến, khôi phục dễ dàng.
- Giám sát runtime. Falco hoặc Tetragon bắt các syscall bất thường trong thời gian thực. Kết hợp nó với khả năng quan sát runtime cho các khối lượng công việc AI nơi bề mặt syscall rộng hơn.
- Cảnh báo các sự kiện tải module nhân ngắn hạn trong SIEM của bạn. Nếu
algif_aeadever loads on a production host that doesn't need it, you want to know in seconds. - Ghim các phiên bản K8s và image node vào một đường cơ sở mà bạn actively security-track. Các thẻ floating là một sự cố tương lai đang chờ xảy ra.
Đó là bài học mà Copy Fail dạy chúng ta trước khi cái tiếp theo xuất hiện. Các đội ngũ sẽ xử lý zero-day tiếp theo trong 30 phút thay vì 60 là những đội đã triển khai sáu biện pháp kiểm soát này.
Câu hỏi thường gặp
Tôi có bị ảnh hưởng bởi Copy Fail (CVE-2026-31431) không?
Gần như chắc chắn là có nếu bạn chạy bất kỳ bản phân phối Linux lớn nào trên nhân được phát hành trước ngày 1 tháng 5 năm 2026 và bạn cho phép truy cập shell không đặc quyền. Điều này bao gồm mọi máy chủ đa tenant, mọi worker Kubernetes và mọi CI runner. Chạy uname -r và kiểm tra đối với bảng phiên bản đã vá ở trên. CVSS là 7.8.
Cụm Kubernetes của tôi có dễ bị tổn thương ngay cả với PSS Restricted không?
Có. Tiêu chuẩn Bảo mật Pod (PSS) Restricted với seccompProfile.type: RuntimeDefault không chặn socket(AF_ALG, ...). Juliet.sh đã kiểm tra trực tiếp điều này: một pod chạy với PSS Restricted cộng với RuntimeDefault đã chiếm quyền nhân máy chủ qua Copy Fail. Bạn cần một cấu hình seccomp Localhost (được cung cấp trong phần giảm thiểu K8s ở trên).
Docker Desktop có chặn Copy Fail không?
Cấu hình seccomp mặc định của Docker Desktop đã từ chối nhiều syscall nhưng không chặn AF_ALG cho đến khi moby/moby PR #52501 được hợp nhất. Cập nhật Docker lên một bản phát hành bao gồm cấu hình đã vá (Docker 29.x backport), hoặc áp dụng thủ công cấu hình seccomp. Các bản cài đặt Docker Linux không có bản cập nhật đó vẫn bị phơi nhiễm.
Seccomp RuntimeDefault có ngăn chặn được điều này không?
Không. RuntimeDefault là cấu hình runtime container chưa sửa đổi (mặc định của Docker/containerd). Nó cho phép socket(AF_ALG, ...) vì các khối lượng công việc hợp lệ đôi khi sử dụng API mã hóa nhân. Bản sửa lỗi là một cấu hình Localhost từ chối rõ ràng AF_ALG (JSON đầy đủ trong phần K8s) hoặc nâng cấp lên mặc định của moby/moby PR #52501.
Nếu tôi không thể khởi động lại nhân ngay bây giờ thì sao?
Sự kết hợp giữa danh sách đen modprobe và cấu hình seccomp Localhost từ chối socket(AF_ALG, ...) là đủ cho đến khi bạn có thể vá. Cả hai đều áp dụng mà không cần khởi động lại. Thêm blacklist algif_aead vào /etc/modprobe.d/copy-fail.conf, chạy rmmod algif_aead, triển khai cấu hình seccomp và khởi động lại vào cửa sổ bảo trì tiếp theo.
Copy Fail có đang bị khai thác trong thực tế không?
Tính đến ngày 5 tháng 5 năm 2026, bài đăng tình báo mối đe dọa của Microsoft không xác nhận việc khai thác trong thực tế nhưng mô tả lỗ hổng là "dễ dàng vũ khí hóa" (trivially weaponizable) do exploit 732 byte đã công bố của Xint. Lớp nguyên thủy exploit (ghi bộ nhớ đệm trang qua splice) trùng lặp với Dirty Pipe (CVE-2022-0847), vốn đã bị khai thác rộng rãi trong vòng vài tuần sau khi công bố.
Copy Fail có ảnh hưởng cụ thể đến các khối lượng công việc AI/ML không?
Có, một cách disproportionate. Suy luận tự lưu trữ (vLLM, sglang, Ollama), agent runtimes, máy chủ MCP và các bản build CI cho image ML thường xuyên thực thi mã người dùng không đáng tin cậy. Bất kỳ thứ nào trong số này trong một container, ngay cả trên PSS Restricted, đều có thể kích hoạt Copy Fail và chiếm quyền máy chủ. Các node GPU là hồ sơ rủi ro cao nhất vì chúng thường là đa tenant.
Copy Fail khác với Dirty Pipe như thế nào?
Cả hai đều là LPE nhân Linux tạo ra các ghi bộ nhớ đệm trang tùy ý, nhưng bề mặt kích hoạt khác nhau: Dirty Pipe lạm dụng splice() vào một pipe, Copy Fail lạm dụng splice() vào một socket algif_aead (AF_ALG). Cả hai đều bỏ qua các mặc định seccomp container tiêu chuẩn. Điểm khác biệt của Copy Fail: đường dẫn AF_ALG có thể tiếp cận được từ Tiêu chuẩn Bảo mật Pod (PSS) Restricted với RuntimeDefault.
Kết luận
Copy Fail có thể được vá trong khoảng 60 phút nếu bạn thực hiện trọn vẹn cẩm nang: danh sách đen modprobe, cập nhật nhân, cấu hình seccomp, xác minh. Khía cạnh Kubernetes và hạ tầng AI là điều khiến CVE này khác biệt so với một LPE thông thường: PSS Restricted với RuntimeDefault sẽ không cứu được bạn, và một pod suy luận bị xâm nhập duy nhất có thể chiếm quyền máy chủ. Danh sách đen modprobe cộng với cấu hình seccomp Localhost là biện pháp phòng thủ bền vững ngay cả sau khi bạn vá.
Muốn có thêm một cặp mắt xem xét runbook phản ứng sự cố của bạn, hoặc một đường cơ sở K8s được củng cố trước khi CVE nhân tiếp theo xuất hiện? Liên hệ với Techsy. Chúng tôi thực hiện củng cố nền tảng cho các ngăn xếp AI/ML sản xuất.
Cập nhật lần cuối 2026-05-05. Chúng tôi sẽ quét bài viết để tìm các cảnh báo bản phân phối mới vào ngày 2026-05-12.