Họ đã tìm thấy một lỗ hổng trong cgroups v1 cho phép thoát ra khỏi một vùng chứa bị cô lập

Vài ngày trước tin tức đã được phát hành chi tiết đã được tiết lộ một lỗ hổng điều đó đã được tìm thấy trong việc thực hiện cơ chế giới hạn tài nguyên cgroup v1 trong hạt nhân Linux đã được xếp vào danh mục CVE-2022-0492.

Lỗ hổng này được tìm thấy se có thể được sử dụng để thoát khỏi các thùng chứa bị cô lập và chi tiết rằng vấn đề đã xuất hiện kể từ nhân Linux 2.6.24.

Trong bài đăng trên blog có đề cập rằng lỗ hổng bảo mật là do lỗi logic trong trình xử lý tệp release_agent, vì vậy việc kiểm tra thích hợp đã không được thực hiện khi trình điều khiển được chạy với đầy đủ quyền.

Tập tin release_agent được sử dụng để xác định chương trình mà hạt nhân thực thi khi một quá trình kết thúc trong một cgroup. Chương trình này chạy dưới quyền root với tất cả "khả năng" trong không gian tên gốc. Chỉ quản trị viên được cho là có quyền truy cập vào cấu hình release_agent, nhưng trên thực tế, việc kiểm tra được giới hạn trong việc cấp quyền truy cập cho người dùng root, điều này không loại trừ việc thay đổi cấu hình từ vùng chứa hoặc bởi người dùng root không phải quản trị viên (CAP_SYS_ADMIN) .

Trước đây, tính năng này sẽ không được coi là một lỗ hổng, nhưng tình hình đã thay đổi với sự ra đời của không gian tên định danh người dùng (không gian tên người dùng), cho phép bạn tạo người dùng gốc riêng biệt trong các vùng chứa không trùng lặp với người dùng gốc của môi trường chính.

Do đó, đối với một cuộc tấn công, nó là đủ trong một vùng chứa có người dùng gốc của riêng nó trong một không gian id người dùng riêng biệt để cắm trình xử lý release_agent của bạn, trình xử lý này sau khi hoàn tất quá trình sẽ chạy với tất cả các đặc quyền của môi trường mẹ.

Theo mặc định, cgroupfs được gắn trong vùng chứa chỉ đọc, nhưng không có vấn đề gì khi đếm lại các giả này ở chế độ ghi với quyền CAP_SYS_ADMIN hoặc bằng cách tạo vùng chứa lồng nhau với không gian tên người dùng riêng biệt bằng cách sử dụng lệnh ngừng chia sẻ hệ thống, trong đó quyền CAP_SYS_ADMIN có sẵn cho vùng chứa đã tạo.

Cuộc tấn công có thể được thực hiện bằng cách có đặc quyền root trong một vùng chứa riêng biệt hoặc bằng cách chạy vùng chứa mà không có cờ no_new_privs, cờ này cấm đạt được các đặc quyền bổ sung.

Hệ thống phải có hỗ trợ cho không gian tên được bật người dùng (được bật theo mặc định trên Ubuntu và Fedora, nhưng không được bật trên Debian và RHEL) và có quyền truy cập vào cgroup gốc v1 (ví dụ: Docker chạy các vùng chứa trong cgroup gốc RDMA). Cuộc tấn công cũng có thể xảy ra với các đặc quyền CAP_SYS_ADMIN, trong trường hợp đó, hỗ trợ không gian tên người dùng và quyền truy cập vào hệ thống phân cấp gốc của cgroup v1 là không cần thiết.

Ngoài việc thoát ra khỏi vùng chứa bị cô lập, lỗ hổng bảo mật còn cho phép các quy trình do người dùng gốc không có "khả năng" hoặc bất kỳ người dùng nào có quyền CAP_DAC_OVERRIDE bắt đầu (cuộc tấn công yêu cầu quyền truy cập vào tệp / sys / fs / cgroup / * / release_agent thuộc sở hữu của root) để có được quyền truy cập vào tất cả các "khả năng" của hệ thống.

Ngoài vùng chứa, lỗ hổng bảo mật cũng có thể cho phép các quá trình máy chủ gốc không có khả năng hoặc các quá trình máy chủ không gốc có khả năng CAP_DAC_OVERRIDE nâng đặc quyền lên đầy đủ các khả năng. Điều này có thể cho phép những kẻ tấn công bỏ qua một biện pháp tăng cường được sử dụng bởi các dịch vụ nhất định, biện pháp này loại bỏ các khả năng nhằm hạn chế tác động nếu xảy ra thỏa hiệp.

Unit 42 khuyến nghị người dùng nâng cấp lên phiên bản kernel cố định. Đối với những vùng chứa đang chạy đó, hãy bật Seccomp và đảm bảo rằng AppArmor hoặc SELinux được bật. Người dùng Prisma Cloud có thể tham khảo phần “Prisma Cloud Protection” để xem các biện pháp giảm thiểu do Prisma Cloud cung cấp.

Lưu ý rằng không thể khai thác lỗ hổng khi sử dụng cơ chế bảo vệ Seccomp, AppArmor hoặc SELinux để cách ly vùng chứa bổ sung, vì Seccomp chặn lệnh gọi hệ thống unshare () và AppArmor và SELinux không cho phép gắn cgroupfs ở chế độ ghi.

Cuối cùng, điều đáng nói là nó đã được sửa trong các phiên bản kernel 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 và 4.9.301. Bạn có thể theo dõi việc phát hành các bản cập nhật gói trong các bản phân phối trên các trang này: DebianSUSEUbuntuRHELFedoraGentooArch Linux.

Cuối cùng nếu bạn muốn biết thêm về nó, bạn có thể kiểm tra các chi tiết trong liên kết theo dõi.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.