Docker vừa tung ra bản vá cho một lỗ hổng bảo mật nghiêm trọng, ảnh hưởng đến ứng dụng Docker Desktop trên Windows và macOS. Lỗ hổng này có thể cho phép kẻ tấn công vượt qua rào cản bảo vệ và thoát ra khỏi container.
Lỗ hổng này, được theo dõi với mã hiệu CVE-2025-9074, có điểm CVSS là 9.3 trên thang điểm 10. Bản vá đã được phát hành trong phiên bản 4.44.3.
Theo thông báo từ Docker, một container độc hại chạy trên Docker Desktop có thể truy cập vào Docker Engine và khởi chạy các container khác mà không cần gắn kết Docker socket. Điều này có thể dẫn đến việc truy cập trái phép vào các tập tin của người dùng trên hệ thống máy chủ. Lưu ý rằng, Enhanced Container Isolation (ECI) không thể ngăn chặn lỗ hổng này.
Nhà nghiên cứu bảo mật Felix Boulet cho biết, lỗ hổng này xuất phát từ việc container có thể kết nối với Docker Engine API tại địa chỉ 192.168.65[.]7:2375 mà không cần xác thực. Điều này mở ra cơ hội cho một container đặc quyền có toàn quyền truy cập vào máy chủ bên dưới sau khi gắn ổ đĩa C:\ vào nó.
Trong một thử nghiệm khai thác (PoC), một yêu cầu web từ bất kỳ container nào cũng có thể kích hoạt lỗ hổng và dẫn đến việc xâm nhập hoàn toàn máy chủ:
- Gửi một payload JSON đến “/containers/create”, gắn ổ đĩa C:\ của máy chủ vào một thư mục trong container (/mnt/host/c:/host_root), và sử dụng một lệnh khởi động để ghi hoặc đọc bất cứ thứ gì dưới /host_root khi container khởi động.
- Gửi yêu cầu POST đến “/containers/{id}/start” để khởi chạy container và bắt đầu thực thi.
Boulet giải thích rằng, cốt lõi của lỗ hổng này là một sai sót đơn giản: Docker’s internal HTTP API có thể truy cập được từ bất kỳ container nào mà không cần xác thực hoặc kiểm soát truy cập.
Philippe Dugre (“zer0x64”), một nhà nghiên cứu từ PVOTAL Technologies, người đã kiểm tra kỹ hơn về lỗ hổng này, cho biết kẻ tấn công có thể khai thác lỗ hổng trên phiên bản Windows của Docker Desktop để gắn toàn bộ hệ thống tập tin với tư cách quản trị viên, đọc bất kỳ tập tin nhạy cảm nào và ghi đè một DLL hệ thống để leo thang đặc quyền lên quản trị viên của hệ thống máy chủ.
Tuy nhiên, trên macOS, ứng dụng Docker Desktop vẫn có một lớp cách ly và việc cố gắng gắn một thư mục người dùng sẽ yêu cầu người dùng cấp quyền. Theo mặc định, ứng dụng Docker không có quyền truy cập vào phần còn lại của hệ thống tập tin và không chạy với quyền quản trị, do đó máy chủ an toàn hơn nhiều so với trường hợp của Windows.
Tuy nhiên, kẻ tấn công vẫn có toàn quyền kiểm soát ứng dụng/container Docker và thậm chí có thể backdoor nó bằng cách gắn và sửa đổi cấu hình của ứng dụng, điều này không cần bất kỳ sự chấp thuận nào của người dùng.
Lỗ hổng này không ảnh hưởng đến phiên bản Linux vì Linux sử dụng một named pipe trên hệ thống tập tin của máy chủ, thay vì dựa vào một TCP socket cho Docker Engine’s API.
Cách dễ nhất để khai thác lỗ hổng này là thông qua một container độc hại do kẻ tấn công kiểm soát. Tuy nhiên, một lỗ hổng server-side request forgery (SSRF) có thể được sử dụng như một vectơ tấn công thay thế.
Dugre nói: “Lỗ hổng này cho phép kẻ tấn công proxy các yêu cầu thông qua ứng dụng dễ bị tấn công và tiếp cận Docker socket, tác động của nó khác nhau đặc biệt tùy thuộc vào tính khả dụng của các phương thức yêu cầu HTTP (hầu hết SSRF chỉ cho phép các yêu cầu GET, nhưng một số trường hợp thích hợp cho phép sử dụng các phương thức POST, PATCH, DELETE)”.
Giải thích thuật ngữ:
- Container: Một môi trường ảo hóa, cho phép đóng gói và chạy ứng dụng cùng với tất cả các phụ thuộc của nó.
- Docker Engine: Phần mềm cốt lõi của Docker, chịu trách nhiệm xây dựng, chạy và quản lý các container.
- Docker Socket: Một cổng giao tiếp mà Docker Engine sử dụng để nhận lệnh và tương tác với các container.
- CVSS Score: Một hệ thống tính điểm tiêu chuẩn để đánh giá mức độ nghiêm trọng của các lỗ hổng bảo mật.
- PoC (Proof of Concept): Một đoạn mã hoặc một quy trình chứng minh rằng một lỗ hổng bảo mật có thể bị khai thác.
- SSRF (Server-Side Request Forgery): Một lỗ hổng cho phép kẻ tấn công gửi các yêu cầu HTTP từ máy chủ web đến một đích đến khác.