CVE-2025-59951: Lỗ hổng Termix Docker cho phép truy cập SSH không cần xác thực

Theo Cyberpress, Docker image chính thức của Termix tồn tại một cấu hình sai nghiêm trọng, tạo điều kiện cho việc truy cập trái phép vào thông tin đăng nhập SSH. Khi triển khai cùng Nginx reverse proxy, backend của Termix nhận diện sai toàn bộ yêu cầu đến như thể đều xuất phát từ localhost.

Hệ quả là endpoint API nội bộ vốn lưu trữ thông tin máy chủ SSH bao gồm địa chỉ, tài khoản và mật khẩu có thể bị truy cập trực tiếp mà không cần cơ chế xác thực, tạo ra rủi ro bảo mật đặc biệt nghiêm trọng.

637f9d18-ef26-4f61-8861-79c701509d91

Phân tích kỹ thuật

Backend của Termix được xây dựng trên framework Express, sử dụng đoạn mã:

const ip = req.ip || req.connection?.remoteAddress

Trong khi Nginx proxy lưu lượng HTTP/1.1 tới dịch vụ Termix tại 127.0.0.1:8081 và đã chèn đầy đủ các header như X-Real-IP, X-Forwarded-For, Termix lại không dùng các header này mà chỉ dựa vào req.ip. Kết quả luôn trả về 127.0.0.1, tức địa chỉ proxy.

Do đó, điều kiện kiểm tra isLocalhost luôn đúng, dẫn đến endpoint /ssh/db/host/internal được mở ra mà không cần bất kỳ cơ chế xác thực hay phân quyền nào.

Điều này có nghĩa là chỉ cần cấu hình Nginx mặc định, bất kỳ ai có thể kết nối tới proxy đều có thể truy cập toàn bộ cơ sở dữ liệu SSH host. Ví dụ cấu hình:

location /ssh/ {
    proxy_pass http://127.0.0.1:8081;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Vì Termix và Nginx thường chạy trong cùng container hoặc VM, các request đến endpoint này hoàn toàn bỏ qua lớp xác thực.

Nhiều nhà nghiên cứu đã xác minh bằng cách quét hạ tầng và tái hiện thành công lỗ hổng. Kết quả cho thấy dữ liệu phản hồi chứa thông tin SSH ở dạng rõ ràng: hostname, port, username và password.

Ảnh hưởng

Tất cả các bản Docker image chính thức từ release-0.1.1-tag đến release-1.6.0-tag đều bị ảnh hưởng.

Lỗ hổng được định danh CVE-2025-59951, thuộc nhóm CWE-284 (Thiếu kiểm soát truy cập)CWE-348 (Tin cậy nguồn không an toàn để xác thực). Điều này xuất phát từ việc dịch vụ dựa vào thông tin IP không đáng tin cậy và không có rào chắn bảo vệ endpoint nhạy cảm.

Kẻ tấn công chỉ cần có quyền truy cập mạng tới proxy là có thể thu thập toàn bộ thông tin đăng nhập SSH, từ đó chiếm quyền kiểm soát hạ tầng và thực hiện lateral movement trong mạng doanh nghiệp.

Giải pháp

  • Về phía Termix: cần thay đổi logic kiểm tra IP, thay req.ip bằng cách xác thực đúng các header X-Real-IP hoặc X-Forwarded-For, đồng thời bổ sung xác thực và phân quyền cho endpoint /ssh/db/host/internal.
  • Về phía vận hành: quản trị viên nên hạn chế truy cập endpoint này ở tầng proxy, siết chặt ACL (Access Control List), đồng thời rebuild lại Docker image sau khi áp dụng bản vá.

Một Proof-of-Concept (PoC) cho thấy chỉ cần gửi một HTTP GET tới endpoint, máy chủ sẽ trả về danh sách SSH host dưới dạng JSON mà không cần bất kỳ chứng thực nào:

GET /ssh/db/host/internal HTTP/1.1
Host: 192.168.31.163:8080
Connection: close

Các tổ chức được khuyến nghị khẩn trương rà soát triển khai Termix, thu hồi và thay mới toàn bộ SSH keys, mật khẩu có nguy cơ lộ lọt, đồng thời cập nhật ngay khi bản vá được phát hành.

  • CVE ID: CVE-2025-59951
  • Phiên bản ảnh hưởng: release-0.1.1-tag → release-1.6.0-tag
  • Điểm yếu: Improper Access Control (CWE-284); Use of Less Trusted Source (CWE-348)
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận