Tóm tắt nhanh

  • Nhân Linux chứa một lỗi logic cho phép người dùng không có đặc quyền "đánh cắp" file descriptor của các file được bảo vệ bởi root, như khóa SSH riêng tư và file /etc/shadow.
  • Bằng cách khai thác một khoảng thời gian ngắn trong quá trình thoát của tiến trình, sau khi bộ nhớ bị xóa nhưng trước khi file được đóng, kẻ tấn công có thể sử dụng syscall pidfd_getfd để vượt qua các kiểm tra bảo mật thường bảo vệ các tiến trình SUID nhạy cảm.
  • Mặc dù lỗ hổng thiết kế "FD-theft" này đã được một nhà nghiên cứu bảo mật chỉ ra vào tháng 10 2020, nó vẫn chưa được vá trong nhân Linux ổn định trong khoảng sáu năm. Ngoài ra, mẫu mã cụ thể trong tiện ích ssh-keysign khiến nó trở thành mục tiêu cho khai thác này vẫn không thay đổi kể từ năm 2002.

Khai thác FD-Theft: Lỗi nhân Linux 6 năm

Một bản vá bảo mật mới vừa được phát hành cho nhân Linux. Đây không phải là một khai thác "leo thang đặc quyền" thông thường. Thay vào đó, nó là một lỗ hổng "Đánh cắp File Descriptor (FD)" thông minh đã tồn tại trong thiết kế nhân suốt 6 năm.

Linus Torvalds gần đây đã đẩy một bản sửa lỗi cho một lỗi logic trong cách nhân xử lý các tiến trình đang thoát. Mặc dù bản vá đã chính thức, câu chuyện về cách lỗ hổng này hoạt động và nó đã ẩn náu bao lâu là một cái nhìn thú vị vào nội bộ nhân.

Lỗ hổng Đánh cắp File Descriptor (FD) là gì?

Hầu hết tin tức bảo mật Linux tập trung vào "Leo thang đặc quyền", nơi người dùng trở thành root. Lỗi này khác. Nó là một khai thác truy cập file.

FD-Theft (Đánh cắp File Descriptor) đề cập đến quá trình kẻ tấn công "đánh cắp" hoặc sao chép các file descriptor đang hoạt động từ một tiến trình có đặc quyền trong khi nó đang trong quá trình thoát. Kỹ thuật này cho phép người dùng không có đặc quyền truy cập vào các file nhạy cảm đã được mở khi tiến trình đích vẫn còn quyền root.

Kẻ tấn công có thể sử dụng lỗ hổng này để "đánh cắp" các liên kết đang hoạt động đến các file nhạy cảm, như khóa SSH riêng tư hoặc file mật khẩu /etc/shadow, trong khi một chương trình có đặc quyền đang cố gắng đóng chúng.

Nếu kẻ tấn công lấy được file shadow của bạn, chúng có thể lấy các băm mật khẩu và bẻ khóa ngoại tuyến để cuối cùng có được quyền truy cập root đầy đủ.

Cửa sổ bảo mật trong nhân

Để hiểu lỗi fd-theft này, bạn phải xem cách một chương trình thoát. Khi một chương trình kết thúc, nhân Linux dọn dẹp tài nguyên của nó theo một thứ tự cụ thể. Lỗ hổng này khai thác một khoảng trống thời gian nhỏ trong chuỗi đó:

  1. Bộ nhớ bị xóa trước (exit_mm): Nhân xóa bộ nhớ của chương trình.
  2. Kiểm tra thất bại: Thông thường, nhân bảo vệ các chương trình thuộc sở hữu của root khỏi bị người dùng thường can thiệp. Đây được gọi là kiểm tra "dumpable". Nhưng trong nhiều năm, nhân có chính sách "fail open": nếu bộ nhớ đã biến mất, nhân cho rằng chương trình an toàn để truy cập.
  3. File vẫn mở trong một phần giây (exit_files): Mặc dù bộ nhớ đã biến mất, các file của chương trình vẫn chưa được đóng.

Trong khoảng thời gian nhỏ này, kẻ tấn công có thể sử dụng một công cụ gọi là pidfd_getfd để sao chép các file đang mở đó. Vì chương trình ban đầu đã mở các file đó với quyền root, kẻ tấn công nhận được một bản sao hoạt động của chúng.

Mục tiêu thực tế: ssh-keysign và chage

Cuộc tấn công này nhắm vào một "hình dạng" rất cụ thể của chương trình. Nó cần một công cụ thuộc sở hữu của root mở một file nhạy cảm, giảm đặc quyền xuống người dùng thường, và sau đó thoát.

  • ssh-keysign: Công cụ này mở các khóa SSH riêng tư của máy chủ. Do lỗi này, kẻ tấn công có thể nắm bắt khóa và sau đó giả mạo máy chủ của bạn để lừa người dùng khác.
  • chage: Công cụ này quản lý mật khẩu người dùng và mở /etc/shadow. Kẻ tấn công có thể "chạy đua" với chương trình khi nó đóng để đánh cắp các băm mật khẩu của bạn.

Đáng ngạc nhiên, mã trong ssh-keysign khiến điều này có thể đã không thay đổi kể từ 2002. Nhà nghiên cứu bảo mật Jann Horn thậm chí đã cảnh báo về lỗ hổng thiết kế này vào tháng 10 2020, gọi logic của nhân là "đáng ngờ từ góc độ bảo mật".

Nếu bạn muốn kiểm tra khai thác này, hãy xem kho lưu trữ ssh-keysign-pwn trên GitHub. Nó cung cấp mã cần thiết để chứng minh lỗ hổng trên các nhân được phát hành trước tháng 5 14, 2026.

Linus Torvalds phát hành bản vá mới để sửa lỗi

Bản vá mới của Linus Torvalds, được xác định là Commit 31e62c2ebbfd, giới thiệu một logic "hợp lý hơn một chút" như ông gọi.

Thay vì nhân "quên" trạng thái bảo mật của chương trình ngay khi bộ nhớ bị xóa, nhân bây giờ sử dụng một cờ được lưu trong bộ nhớ đệm gọi là user_dumpable.

Cờ này ghi nhớ liệu chương trình có được bảo vệ khi nó còn sống hay không. Bây giờ, nếu kẻ tấn công cố gắng lấy một file descriptor trong cửa sổ thoát đó, nhân thấy cờ đã lưu và chặn truy cập trừ khi người dùng có đặc quyền CAP_SYS_PTRACE cao.

Các hệ thống Linux bị ảnh hưởng

Lỗ hổng ảnh hưởng đến hầu hết các bản phân phối Linux chính chạy nhân được phát hành trước tháng 5 14, 2026. Các phiên bản bị ảnh hưởng đã được xác nhận bao gồm:

  • Ubuntu (22.04, 24.04, 26.04)
  • Debian 13
  • Arch Linux
  • CentOS 9
  • Raspberry Pi OS (Bookworm)

Khắc phục khai thác FD-Theft

Cập nhật nhân của bạn ngay khi bản phân phối của bạn cung cấp bản vá bảo mật mới nhất. Khi bạn đã ở trên một phiên bản bao gồm bản sửa lỗi của Torvalds, "cửa sổ bảo mật" đó sẽ bị đóng vĩnh viễn.

Đề xuất đọc thêm:

Liên kết liên quan: CVE-2026-41651, FD-Theft Exploit, File Descriptor Theft, Kernel Patch, Linus Torvalds, Linux, Linux Kernel, Linux security, pidfd_getfd, ptrace_may_access, Security, shadow theft, SSH-keysign exploit, https://ostechnix.com/linux-kernel-ptrace-fd-theft-vulnerability-fix/.