Skip to main content

Command Palette

Search for a command to run...

CVE-2025-62725: Khi một lệnh ‘vô hại’ trong Docker Compose biến thành backdoor toàn hệ thống

Một lỗ hổng nghiêm trọng đã được phát hiện trong Docker Compose, cho phép kẻ tấn công kiểm soát hệ thống máy chủ một cách dễ dàng.

Updated
6 min read
CVE-2025-62725: Khi một lệnh ‘vô hại’ trong Docker Compose biến thành backdoor toàn hệ thống

Đôi nét về Docker Compose

Với những ai chưa biết thì Docker Compose là một công cụ đi kèm với Docker, giúp người dùng định nghĩa và quản lý nhiều container trong một ứng dụng chỉ bằng một tệp cấu hình duy nhất. Có thể hiểu đơn giản là thay vì phải chạy nhiều lệnh docker run phức tạp để khởi động từng container, Docker Compose cho phép người dùng:

  • Mô tả toàn bộ kiến trúc ứng dụng (web server, database, cache, message queue, v.v.) trong một file YAML.

  • Khởi động, dừng, và quản lý tất cả container chỉ bằng một lệnh duy nhất

Và đương nhiên với những tính năng như vậy thì Docker Compose có nhiều ưu điểm nổi bật:

  • Triển khai nhanh ứng dụng nhiều thành phần.

  • Dễ quản lý cấu hình nhờ file YAML duy nhất.

  • Tái sử dụng môi trường - rất phù hợp cho dev hoặc test.

  • Tích hợp tốt với Docker Swarm, CI và CD pipelines.

Bối cảnh lỗ hổng

Chính vì những ưu điểm vượt trội của Docker Compose mà những kẻ tấn công cũng như các chuyên gia bảo mật luôn muốn tìm cách khai thác các điểm yếu của Docker Compose. Vừa qua một lỗ hổng vô cùng nghiêm trọng đã được phát hiện với mã định danh: CVE-2025-62725 đặt ra mối đe dọa cho hàng triệu người dùng cũng như cộng đồng DevOps và bảo mật toàn cầu. Lỗi này cho phép kẻ tấn công ghi đè tệp tùy ý trên hệ thống máy chủ thông qua các gói OCI được chế tạo đặc biệt, thậm chí không cần khởi chạy bất kỳ container nào.

Điểm đáng lo ngại là ngay cả khi người sử dụng chỉ chạy các lệnh “nhìn” (read-only) như docker compose ps hay docker compose config, mà không khởi động container, vẫn có thể bị khai thác - vì quá trình xử lý bản include từ artifact remote cũng kích hoạt đoạn mã bị lỗi. Vì vậy, lỗ hổng này có ý nghĩa lớn trong môi trường DevOps/CI/CD, nơi Docker Compose được dùng phổ biến, và chứng minh: việc “chỉ include YAML từ remote” cũng có thể dẫn tới “system compromise”.

Phiên bản ảnh hưởng

  • Lỗ hổng lần này ảnh hưởng đến tất cả các phiên bản Docker Compose trước v2.40.2

Mô tả lỗ hổng

  • Mã lỗ hổng: CVE-2025-62725

  • Điểm CVSS: 8.9/10, cho thấy mức độ nghiêm trọng cao.

  • Cơ chế tấn công: Lỗ hổng này có khả năng cho phép kẻ tấn công thực thi Path Traversal, tiết lộ thông tin nhạy cảm hoặc làm hỏng dữ liệu.

  • Hậu quả:

    • Rò rỉ thông tin và hỏng dữ liệu: Kẻ tấn công có thể xem các tệp nhạy cảm hoặc chèn nội dung độc hại vào các tệp đó

    • Thực thi Path Traversal

Chi tiết cách khai thác

Như đã đề cập thì lỗ hổng này tồn tại do tính năng mới được Docker Compose chia sẻ trong thời gian vừa qua, tính năng này hỗ trợ OCI-based Compose artifacts, cho phép nhà phát triển tải và sử dụng tệp Compose từ kho lưu trữ từ xa để tăng tính linh hoạt và di động. Tuy nhiên chính vì điều này mà kẻ tấn công có thể tạo một Tiny OCI Registry PoC (một HTTP server rất nhỏ mô phỏng API registry /v2) trả về một manifest dạng OCI/Compose artifact có một layer chứa annotation com.docker.compose.file trỏ tới một path traversal ("../../../../../../../tmp/pwnd").

Sau khi đã tạo một registry OCI giả mạo chứa Compose artifact, kẻ tấn công sẽ lừa người dùng chạy lệnh Compose bất kỳ trong thư mục có docker-compose.yaml chỉ định include tới artifact độc hại.

Khi lệnh chạy, CLI sẽ tải artifact từ registry kẻ tấn công - hé lộ IP của nạn nhân tới attacker - rồi ghi một fragment YAML ngoài thư mục cache, ví dụ vào ~/.ssh/authorized_keys, inject public key của attacker để mở quyền SSH tới host, mà không cần container nào thực sự được khởi động. Tại đây kẻ tấn công có thể duy trì RCE trên hệ thống mục tiêu hoặc duy trì backdoor.

Cuối cùng khi đã khai thác lỗ hổng thành công, kẻ tấn công có thể dễ dàng thực hiện các hành vi:

  • Ghi file tùy ý ngoài vùng cache

  • Cài backdoor

  • Chiếm quyền tài khoản chạy Compose (local privilege escalation)

  • Tiếp cận thông tin nhạy cảm (confidential data access)

  • Lateral movement (di chuyển ngang trong mạng)

  • Chuỗi cung ứng DevOps bị ô nhiễm

Kết luận

Lỗ hổng CVE-2025-62725 một lần nữa nhắc chúng ta rằng trong thế giới DevOps, mối nguy không chỉ đến từ mã độc, mà còn từ những dòng cấu hình tưởng chừng vô hại. Một lệnh đơn giản như docker compose ps – vốn chỉ dùng để quan sát trạng thái container nhưng lại có thể trở thành điểm khởi đầu cho việc chiếm quyền toàn bộ hệ thống, nếu nằm trong tay kẻ tấn công tinh vi.
Vụ việc này cho thấy ranh giới giữa “tiện ích” và “rủi ro” trong tự động hóa hạ tầng ngày càng mong manh. Bảo mật không chỉ là cập nhật bản vá, mà còn là tư duy phòng thủ chủ động: kiểm soát nguồn gốc artifact, giới hạn quyền thực thi, và giám sát mọi hành vi bất thường dù nhỏ nhất.

Khuyến nghị

  1. Cập nhật phiên bản

    • Bắt buộc nâng cấp lên Docker Compose ≥ v2.40.2 (đã vá lỗ hổng).

      • Kiểm tra phiên bản hiện tại

      • Nếu < 2.40.2, nâng cấp:

      • Trên môi trường CI/CD (Jenkins, GitLab, GitHub Actions, v.v.): cập nhật image hoặc runner base image sang bản có Compose mới.

  2. Chạy Docker Compose với quyền hạn tối thiểu

    • Không chạy Compose với sudo trừ khi bắt buộc.

    • Tạo user riêng cho Docker (không thuộc root group).

    • Dùng --env-file hoặc .env chỉ đọc, không để ghi đè từ artifact.

    • Nếu hệ thống có thể, dùng SELinux/AppArmor profile để giới hạn Compose CLI ghi ra ngoài thư mục cho phép.

  3. Hạn chế “remote include”

    • Không include YAML từ Internet hoặc registry không kiểm soát.

    • Dùng artifact nội bộ hoặc mirror registry đã xác thực checksum.

    • Thiết lập whitelist registry trong cấu hình CI/CD, ví dụ chỉ cho phép domain nội bộ.

    • Nếu buộc phải include remote, hãy:

      • Sử dụng HTTPS + kiểm tra chữ ký artifact (signature validation).

      • Dùng script kiểm định hash SHA256 của YAML trước khi chạy.

  4. Đào tạo nhận thức bảo mật

    • Huấn luyện DevOps & Developer:

      • Không tin cậy YAML/Compose file tải từ GitHub hoặc Pastebin.

      • Chỉ sử dụng compose file từ repo nội bộ hoặc đã qua kiểm định.

    • Giải thích rằng lệnh “docker compose ps” hay “docker compose config” cũng có thể khai thác lỗ hổng, chứ không chỉ “docker compose up”.

Tham khảo

  1. CVE-2025-62725: From “docker compose ps” to System Compromise | Imperva

  2. poc_oci_registry.py · GitHub

  3. CVE-2025-62725 - Red Hat Customer Portal

Newsletters

Part 1 of 50

More from this blog

F

FPT IS Security

761 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.