Một lỗ hổng trong KVM cho phép thực thi mã bên ngoài hệ thống khách trên bộ xử lý AMD

Các nhà nghiên cứu từ nhóm Google Project Zero đã công bố vài ngày trước trong một bài đăng trên blog rằng đã xác định được lỗ hổng (CVE-2021-29657) trong bộ ảo hóa KVM (một trình ảo hóa dựa trên Linux mã nguồn mở hỗ trợ ảo hóa được tăng tốc phần cứng trên x86, ARM, PowerPC và S/390) cho phép bạn tránh sự cô lập của hệ thống khách và chạy mã của bạn ở phía môi trường máy chủ.

Ấn phẩm đề cập rằng vấn đề biểu hiện từ nhân Linux 5.10-rc1 đến v5.12-rc6, nghĩa là, chỉ bao gồm lõi 5.10 và 5.11 (hầu hết các nhánh phân phối ổn định không bị ảnh hưởng bởi sự cố này). Sự cố xảy ra trong cơ chế Nested_svm_vmrun, được triển khai bằng tiện ích mở rộng AMD SVM (Máy ảo bảo mật) và cho phép khởi chạy lồng nhau các hệ thống khách.

Trong bài đăng trên blog này, tôi mô tả một lỗ hổng trong mã KVM dành riêng cho AMD và thảo luận về cách lỗi này có thể biến thành một lối thoát hoàn toàn cho máy ảo. Theo những gì tôi biết, đây là bài viết công khai đầu tiên về sự gián đoạn giữa các máy khách với máy chủ KVM không phụ thuộc vào lỗi trong các thành phần không gian người dùng như QEMU.

Lỗi được thảo luận được gán mã CVE-2021-29657, ảnh hưởng đến các phiên bản kernel từ v5.10-rc1 đến v5.12-rc6 và đã được vá vào cuối tháng 2021 năm 5.10. Vì lỗi này chỉ có thể khai thác được trong phiên bản v5 và được phát hiện khoảng XNUMX tháng sau đó nên hầu hết việc triển khai KVM trong thế giới thực sẽ không bị ảnh hưởng. Tôi vẫn nghĩ rằng vấn đề này là một nghiên cứu điển hình thú vị về công việc cần thiết để xây dựng một lối thoát ổn định giữa khách với máy chủ chống lại KVM và hy vọng bài viết này có thể củng cố lập luận rằng các thỏa hiệp của bộ điều khiển ảo hóa không chỉ là vấn đề lý thuyết.

Các nhà nghiên cứu đề cập rằng để thực hiện đúng chức năng này, trình ảo hóa phải chặn tất cả các hướng dẫn SVM được thực thi trên hệ thống khách, mô phỏng hành vi của nó và đồng bộ hóa trạng thái với phần cứng, đó là một nhiệm vụ khá phức tạp

Sau khi phân tích việc triển khai KVM được đề xuất, các nhà nghiên cứuđã tìm thấy một lỗi logic cho phép nội dung của MSR Máy chủ (Đăng ký cụ thể theo mẫu) bị ảnh hưởng từ hệ thống khách, có thể được sử dụng để thực thi mã ở cấp máy chủ.

Cụ thể, việc thực thi thao tác VMRUN từ hệ thống khách ở cấp độ lồng thứ hai (L2 được khởi chạy từ một khách khác) sẽ dẫn đến lệnh gọi thứ hai tới Nested_svm_vmrun và làm hỏng cấu trúc svm->nested.hsave, cấu trúc này trùng lặp với dữ liệu từ vmcb của L2 hệ thống khách.

Kết quả là, một tình huống phát sinh khi ở cấp độ L2 khách có thể giải phóng bộ nhớ trong cấu trúc svm->nested.msrpm, lưu trữ bit MSR, mặc dù nó vẫn tiếp tục được sử dụng và truy cập MSR của máy chủ môi trường .

Ví dụ, điều này có nghĩa là bộ nhớ của khách có thể được kiểm tra bằng cách loại bỏ bộ nhớ được phân bổ của quy trình không gian người dùng của nó hoặc có thể dễ dàng thực thi các giới hạn tài nguyên cho thời gian CPU và bộ nhớ. 

Ngoài ra, KVM có thể chuyển hầu hết công việc liên quan đến mô phỏng thiết bị sang thành phần không gian người dùng.

Sự cố nằm trong mã được sử dụng trên hệ thống có bộ xử lý AMD (mô-đun kvm-amd.ko) và không xuất hiện trên bộ xử lý Intel.

 Ngoài một số thiết bị nhạy cảm với hiệu suất liên quan đến xử lý ngắt, tất cả mã cấp thấp phức tạp để cung cấp quyền truy cập đĩa ảo, mạng hoặc GPU đều có thể được triển khai trong không gian người dùng.  

Các nhà nghiên cứu ngoài việc mô tả vấn đề Họ cũng đã chuẩn bị một nguyên mẫu khai thác có thể hoạt động được cho phép bạn chạy shell gốc từ môi trường khách trong môi trường máy chủ trên hệ thống có bộ xử lý AMD Epyc 7351P và nhân Linux 5.10.

Người ta quan sát thấy rằng đây là lỗ hổng client-to-host đầu tiên trong bộ ảo hóa KVM bản thân nó, không liên quan đến lỗi trong các thành phần không gian người dùng như QEMU. Bản sửa lỗi đã được chấp nhận vào kernel vào cuối tháng 3.

Cuối cùng nếu bạn muốn biết thêm về nó về ghi chú, bạn có thể kiểm tra chi tiết Trong liên kết sau đây.


Hãy là người đầu tiên nhận xét

Để 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.