Theo symlink trong sandbox cho phép ghi đè tệp tùy ý và leo thang quyền root trong NixOS nix

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-39860 là gì?

Lỗ hổng CVE-2026-39860 là lỗ hổng UNIX Symbolic Link (Symlink) Following ảnh hưởng tới nix (phiên bản bị ảnh hưởng: >= 2.21, < 2.28.6, >= 2.29.0, < 2.29.3 và các phiên bản bị ảnh hưởng khác). Lỗ hổng này được xếp hạng ở mức Nghiêm trọng, với điểm CVSS 9. Các nguồn hiện có chưa ghi nhận lỗ hổng này bị khai thác.

Giới thiệu chung

Dữ liệu gốc

Nix là một package manager cho Linux và các hệ thống Unix khác. Một lỗi trong bản sửa cho CVE-2024-27297 cho phép ghi đè tùy ý các tệp mà tiến trình Nix điều phối các bản build có quyền ghi (thường là Nix daemon chạy với quyền root trong các cài đặt multi-user) do theo symlink trong quá trình đăng ký output của fixed-output derivation. Lỗi này ảnh hưởng đến các Linux build chạy trong sandbox; các macOS build chạy trong sandbox không bị ảnh hưởng. Vị trí của output tạm được dùng để sao chép output nằm bên trong build chroot. Builder của derivation có thể tạo tại đường dẫn đó một symlink trỏ đến vị trí tùy ý trong filesystem. Trong quá trình đăng ký output, tiến trình Nix (chạy trong host mount namespace) sẽ theo symlink đó và ghi đè đích bằng nội dung output của derivation. Trong các cài đặt multi-user, điều này cho phép tất cả user có khả năng gửi build đến Nix daemon (allowed-users - mặc định là tất cả user) đạt được quyền root bằng cách sửa đổi các tệp nhạy cảm. Lỗ hổng này được sửa trong 2.34.5, 2.33.4, 2.32.7, 2.31.4, 2.30.4, 2.29.3 và 2.28.6.

Sản phẩm và phạm vi ảnh hưởng

NixOS nix bị ảnh hưởng khi thực hiện sandboxed Linux builds trong các phạm vi sau:

  • >= 2.18.2, <= 2.18.9.
  • >= 2.19.4, <= 2.19.7.
  • >= 2.20.5, <= 2.20.9.
  • >= 2.21, < 2.28.6.
  • >= 2.29.0, < 2.29.3.
  • >= 2.30.0, < 2.30.4.
  • >= 2.31.0, < 2.31.4.
  • >= 2.32.0, < 2.32.7.
  • >= 2.33.0, < 2.33.4.
  • >= 2.34.0, < 2.34.5.

Các bản sửa được xác định tương ứng là 2.28.6, 2.29.3, 2.30.4, 2.31.4, 2.32.7, 2.33.4 và 2.34.5. Sandboxed macOS builds được advisory xác định là không bị ảnh hưởng. Trạng thái của các nhánh hoặc phiên bản nằm ngoài các phạm vi nêu trên chưa được xác lập chỉ từ bản ghi này.

Chi tiết kỹ thuật

NixOS nix có lỗi CWE-61 trong quy trình đăng ký output của fixed-output derivation khi build Linux chạy trong sandbox. Vị trí output tạm dùng để sao chép output nằm bên trong build chroot, nơi derivation builder có thể tạo một symlink trỏ đến vị trí tùy ý trên filesystem. Khi đăng ký output, tiến trình Nix chạy trong host mount namespace sẽ theo symlink đó và ghi đè đích bằng nội dung output của derivation. Trong cài đặt multi-user, tiến trình này thường là Nix daemon chạy với quyền root, vì vậy người dùng có thể gửi build đến daemon có thể tác động đến các tệp mà tiến trình daemon được phép ghi. Chi tiết công khai không xác định các đích filesystem cụ thể hoặc tên hàm triển khai ngoài cơ chế symlink, temporary output và output registration đã mô tả.

Khả năng khai thác

Đường tấn công được mô tả là local và không cần tương tác bổ sung từ người dùng sau khi build phù hợp được gửi. Vendor nêu rõ các user có quyền submit build đến Nix daemon là đối tượng có thể khai thác, trong đó allowed-users mặc định cho phép tất cả user. Bản ghi chuẩn hóa có đánh giá khác nhau về điều kiện quyền: CNA ghi nhận không cần privilege, còn NVD ghi nhận cần low privilege; về vận hành, quyền gửi build đến daemon là điều kiện tiền đề quan trọng. Độ phức tạp được ghi nhận là thấp và không có network path từ xa nào được mô tả. Bản ghi đánh dấu public_exploit là false và không đánh dấu là đã bị khai thác, nhưng các trạng thái này không chứng minh rằng việc khai thác là không thể hoặc chưa từng xảy ra.

Tác động kỹ thuật

Lỗi cho phép attacker kiểm soát một symlink trong đường dẫn output tạm để chuyển hướng thao tác sao chép của tiến trình Nix sang một vị trí khác trên filesystem. Kết quả trực tiếp là arbitrary overwrite đối với các tệp writable bởi tiến trình điều phối build. Khi tiến trình đó là Nix daemon chạy với quyền root, ranh giới privilege bị vượt qua và user gửi build có thể đạt quyền root bằng cách sửa đổi tệp nhạy cảm. Tác động đến confidentiality có thể xảy ra do quyền root mở rộng khả năng truy cập sau khi tệp hoặc cấu hình bị sửa, nhưng primitive trực tiếp được tài liệu hóa là ghi đè tệp, không phải đọc tệp. Lỗi chỉ được xác định cho sandboxed Linux builds; sandboxed macOS builds không bị ảnh hưởng theo advisory.

Tác động đến tổ chức

  • Toàn vẹn hệ thống: Kẻ tấn công có thể khiến tiến trình Nix ghi đè các tệp mà tiến trình đó được phép ghi, bao gồm các tệp nhạy cảm nếu deployment cho phép tiếp cận.
  • Phân quyền: Trong cài đặt multi-user, việc Nix daemon chạy với quyền root có thể biến quyền submit build thành khả năng sửa đổi tài nguyên ngoài phạm vi của user.
  • Dữ liệu và cấu hình: Việc sửa đổi tệp cấu hình, tệp credential hoặc dữ liệu hệ thống có thể làm suy yếu kiểm soát bảo mật hoặc gây hành vi ứng dụng không mong muốn; bản ghi không chỉ rõ tệp cụ thể nào sẽ bị nhắm tới.
  • Giới hạn tác động: Primitive trực tiếp được mô tả là arbitrary file overwrite. Bản ghi không nêu một kịch bản mất dịch vụ cụ thể, nên không nên suy diễn thành một sự cố availability đã được xác nhận.

Cách khắc phục

  1. Nâng cấp theo đúng nhánh được hỗ trợ: dùng 2.28.6 cho nhánh 2.28, 2.29.3 cho nhánh 2.29, 2.30.4 cho nhánh 2.30, 2.31.4 cho nhánh 2.31, 2.32.7 cho nhánh 2.32, 2.33.4 cho nhánh 2.33 hoặc 2.34.5 cho nhánh 2.34. Không suy diễn trạng thái của các nhánh song song hoặc phiên bản khác chỉ vì chúng có số phiên bản cao hơn.
  2. Giảm phơi nhiễm trước khi nâng cấp: không cho phép untrusted builds được gửi đến Nix daemon thông qua allowed-users, hoặc làm cho thư mục /nix/var/nix/daemon-socket không thể truy cập bởi user không tin cậy.
  3. Kiểm tra cả máy chạy daemon và các build worker để bảo đảm binary Nix đang thực thi là bản đã sửa, rồi khởi động lại dịch vụ hoặc worker theo quy trình vận hành của tổ chức.
  4. Các bản vá cho nhánh 2.31, 2.32, 2.33 và 2.34 còn bổ sung hardening chống communication và file descriptor smuggling giữa các fixed-output derivation qua abstract Unix sockets. Biện pháp này có hiệu lực trên kernel >= 6.12 khi Landlock LSM được bật; trên kernel cũ hơn, hardening bị bỏ qua và không ngăn được giao tiếp giữa fixed-output derivation với process bên ngoài Nix sandbox.
  5. Sau khi xử lý, rà soát lại danh sách user được phép submit build, quyền socket daemon và các tệp nhạy cảm mà daemon có thể ghi. Nếu có dấu hiệu ghi đè trái phép, điều tra trước khi chỉ khôi phục tệp hoặc xóa build artifact.

Cách phát hiện

  1. Kiểm kê phiên bản Nix trên các máy chạy build và trên máy chạy nix-daemon, sau đó đối chiếu với các nhánh bị ảnh hưởng.
  2. Xác định deployment nào dùng sandboxed Linux builds, fixed-output derivations và cài đặt multi-user; sandboxed macOS builds được advisory xác định là không bị ảnh hưởng bởi lỗi này.
  3. Kiểm tra cấu hình allowed-users và quyền truy cập vào /nix/var/nix/daemon-socket, đặc biệt trên các hệ thống cho phép user không tin cậy gửi build.
  4. Rà soát lịch sử submit build cùng các thay đổi bất thường đối với những tệp mà daemon có quyền ghi. Đây là kiểm tra điều tra phòng ngừa, không phải IOC cụ thể được vendor công bố.
  5. Nếu phát hiện tệp nhạy cảm bị thay đổi, đối chiếu thời điểm thay đổi với các fixed-output derivation build và bảo toàn bằng chứng trước khi nâng cấp hoặc khôi phục.
Nguồn (27)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.

Khám phá các giải pháp khác liên quan