Lỗ hổng thoát khỏi microVM Firecracker thông qua thao túng thanh ghi KVM
Các nhà nghiên cứu đã chứng minh khả năng thoát khỏi máy chủ ở cấp độ root từ các microVM của Firecracker bằng cách chiếm quyền điều khiển các thanh ghi CPU được lưu trữ trong quá trình thoát KVM, thực thi mã tùy ý trong khi vẫn giữ cho VM hoạt động.
Được dịch tự động từ bản gốc tiếng Anh.
Các nhà nghiên cứu bảo mật đã chứng minh một lỗ hổng nghiêm trọng trong Firecracker, công nghệ ảo hóa mã nguồn mở được sử dụng để vận hành các nền tảng điện toán không máy chủ (serverless). Bằng cách thao túng các thanh ghi CPU được lưu trữ trong một chuyển đổi kernel cụ thể, họ đã đạt được khả năng thực thi mã với quyền root trên máy chủ. Kỹ thuật khai thác này, được chi tiết hóa vào tháng 11 năm 2026, cho phép kẻ tấn công bên trong máy ảo khách chiếm quyền điều khiển tiến trình quản lý VM đó trên máy chủ mà không làm sập VM hoặc cảnh báo các công cụ giám sát tiêu chuẩn.
Chuyện gì đã xảy ra
Nhóm nghiên cứu, xuất bản dưới tên PWN.AI Security Research, đã công bố phần thứ hai của loạt bài "PwnEscape". Công trình này xây dựng dựa trên một primitive bộ nhớ đã được tiết lộ trước đó, cho phép máy khách đọc và ghi vào các vùng chọn lọc trong bộ nhớ vật lý của máy chủ. Trong lần theo dõi này, họ kết hợp primitive đó với một kỹ thuật để xác định và sửa đổi trạng thái thực thi trực tiếp của tiến trình Firecracker trên máy chủ. Mục tiêu là phiên bản Firecracker 1.16.1 chạy trên hệ thống x86-64 với Linux kernel 7.0.0-1011-aws.
Kỹ thuật khai thác không dựa vào các lỗi tràn bộ đệm truyền thống hay lỗi logic ứng dụng phần mềm. Thay vào đó, nó lợi dụng cơ chế mà Linux kernel dùng để lưu và khôi phục trạng thái bộ vi xử lý khi chuyển đổi giữa VM khách và tiến trình người dùng trên máy chủ. Bằng cách xác định chính xác vị trí bộ nhớ nơi các thanh ghi của luồng máy chủ được lưu trữ trong quá trình thoát KVM, những kẻ tấn công đã chuyển hướng dòng chảy thực thi. Họ buộc tiến trình máy chủ thực hiện lời gọi hệ thống write, in ra một chuỗi đánh dấu cụ thể tới luồng lỗi chuẩn (standard error stream) của nó. Quan trọng hơn, sau khi thực thi payload, kỹ thuật khai thác đã khôi phục các giá trị thanh ghi ban đầu, cho phép tiến trình Firecracker tiếp tục chạy bình thường. VM vẫn có thể truy cập qua SSH và không có lỗi nào được ghi lại bởi kernel máy chủ.
Cách thức hoạt động
Cốt lõi của cuộc tấn công dựa vào việc hiểu cách các Virtual CPU (vCPU) tương tác với máy chủ. Mỗi vCPU trong một microVM của Firecracker tương ứng với một luồng trong tiến trình máy chủ. Khi máy khách cần thực hiện một thao tác đòi hỏi sự can thiệp của máy chủ, chẳng hạn như xử lý ngắt hoặc truy cập phần cứng giả lập, luồng sẽ thoát khỏi module kernel KVM và quay trở lại không gian người dùng. Trong quá trình thoát này, kernel lưu trạng thái hiện tại của luồng—bao gồm con trỏ lệnh và con trỏ ngăn xếp—vào một cấu trúc gọi là pt_regs.
Những kẻ tấn công đã sử dụng primitive truy cập bộ nhớ hiện có của họ để quét bộ nhớ vật lý của máy chủ nhằm tìm kiếm các cấu trúc thanh ghi được lưu trữ này. Đầu tiên, họ đặt một mẫu byte duy nhất, hay nonce, trong một trang máy khách đã biết. Bằng cách đi qua Bảng Trang Mở rộng (Extended Page Tables - EPT), họ dịch địa chỉ vật lý của máy khách sang địa chỉ vật lý của máy chủ. Tiếp theo, họ ánh xạ ngược bảng trang của máy chủ để tìm xem tiến trình máy chủ nào đã ánh xạ trang vật lý đó, qua đó xác định hiệu quả tiến trình Firecracker và bố cục bộ nhớ của nó bất chấp Random hóa Bố cục Không gian Địa chỉ (ASLR).
Sau khi xác định được tiến trình, họ tìm kiếm một khung pt_regs khớp với trạng thái dự kiến của một luồng đang quay trở lại từ lời gọi ioctl KVM_RUN. Họ xác thực các ứng viên bằng cách kiểm tra con trỏ lệnh đã lưu so với các địa chỉ mã Firecracker đã biết và đảm bảo rằng các đối số syscall khớp với một yêu cầu KVM đang hoạt động. Sau khi xác định đúng khung, họ sửa đổi con trỏ lệnh đã lưu để trỏ tới một wrapper write trong binary Firecracker và điều chỉnh con trỏ ngăn xếp để bao gồm các đối số payload của họ. Khi máy khách kích hoạt một lần thoát KVM bằng cách ghi vào cổng nối tiếp, luồng máy chủ tiếp tục thực thi tại địa chỉ do kẻ tấn công kiểm soát, thực hiện lệnh write, và sau đó quay trở lại đường dẫn gốc của nó thông qua một chuỗi return được xây dựng cẩn thận.
Chi tiết chính
- Môi trường mục tiêu: Firecracker v1.16.1 trên x86-64, kernel máy chủ 7.0.0-1011-aws, kernel máy khách 6.18.44+.
- Cấp độ đặc quyền: Kỹ thuật khai thác đạt được khả năng thực thi mã với quyền root vì phiên bản thử nghiệm được khởi chạy trực tiếp với quyền root mà không có jailer hoặc các hạn chế namespace.
- Tính ẩn mình: VM vẫn hoạt động hoàn toàn sau khi khai thác; các kết nối SSH vẫn tồn tại và bộ đếm uptime tiếp tục chạy bình thường.
- Primitive bộ nhớ: Cuộc tấn công đòi hỏi khả năng đọc và ghi các trang bộ nhớ vật lý cụ thể của máy chủ từ bên trong máy khách trước đó.
- Xác minh: Các nhà nghiên cứu xác nhận thành công bằng cách bắt được chuỗi đánh dấu
N8V23M2\ntừ stderr của tiến trình máy chủ trong khi xác minh rằng văn bản thực thi và các thư viện chia sẻ vẫn chưa bị sửa đổi. - Khôi phục: Kỹ thuật khai thác khôi phục rõ ràng ba từ ngăn xếp đã sửa đổi sau khi thực thi, không để lại dấu vết pháp y ngay lập tức trong khu vực ngăn xếp tạm thời.
Tại sao điều này quan trọng
Đối với các kỹ sư xây dựng nền tảng serverless hoặc môi trường container cô lập, minh chứng này nhấn mạnh rủi ro của việc chỉ dựa vào ranh giới hypervisor cho bảo mật. Firecracker được thiết kế cho sự cô lập mật độ cao, nhưng kỹ thuật khai thác này cho thấy nếu một máy khách có thể phá vỡ lớp cách ly bộ nhớ, nó có thể chiếm quyền điều khiển chính luồng quản lý. Điều này đặc biệt nguy hiểm vì cuộc tấn công không làm sập dịch vụ, khiến nó khó phát hiện thông qua các trình giám sát tính sẵn sàng tiêu chuẩn.
Tác động phụ thuộc rất nhiều vào cấu hình triển khai. Các nhà nghiên cứu lưu ý rằng thiết lập thử nghiệm của họ chạy Firecracker với quyền root mà không có các lớp chứa bổ sung như bộ lọc seccomp hoặc user namespaces. Trong các môi trường sản xuất, những biện pháp kiểm soát này hạn chế những gì kẻ tấn công có thể làm ngay cả khi chúng đạt được khả năng thực thi mã. Tuy nhiên, khả năng chuyển hướng dòng chảy thực thi trong tiến trình VMM vẫn là một mối đe dọa nghiêm trọng, tiềm năng cho phép kẻ tấn công bỏ qua các chính sách seccomp nếu họ có thể thao túng các đối số syscall hoặc nhảy tới các chuỗi gadget trong không gian bộ nhớ được phép.
Bạn có thể làm gì
- Kiểm toán cấp độ đặc quyền: Đảm bảo các tiến trình Firecracker không chạy với quyền root. Sử dụng jailer tích hợp sẵn để hạ thấp đặc quyền và hạn chế quyền truy cập tệp tin ngay khi khởi động.
- Kích hoạt bộ lọc seccomp: Cấu hình các hồ sơ seccomp nghiêm ngặt để hạn chế các syscall có sẵn cho tiến trình Firecracker, giảm bề mặt tấn công cho bất kỳ khả năng thực thi mã nào.
- Sử dụng user namespaces: Chạy Firecracker bên trong user namespaces để cô lập tiến trình khỏi người dùng root của máy chủ, hạn chế tác động của bất kỳ cuộc thoát nào.
- Giám sát hành vi bất thường: Triển khai ghi nhật ký cho đầu ra stderr không mong muốn hoặc các mẫu syscall bất thường từ các tiến trình VMM, mặc dù kỹ thuật khai thác này được thiết kế để ẩn mình.
- Cập nhật thường xuyên: Theo dõi các bản cập nhật từ dự án Firecracker và áp dụng các bản vá liên quan đến cách ly bộ nhớ và xử lý tương tác KVM ngay khi chúng có sẵn.
- Xem xét các primitive bộ nhớ: Điều tra cách khối lượng công việc của bạn có thể phơi bày các ánh xạ bộ nhớ vật lý của máy chủ cho các máy khách và củng cố các giao diện đó chống lại các tra cứu dịch trái phép.



