-
09/04/2020
-
115
-
1.147 bài viết
Cảnh báo Termix Docker: Lỗ hổng CVE-2025-59951 có thể lộ toàn bộ SSH Keys
Một lỗ hổng nghiêm trọng vừa được phát hiện trong image Docker chính thức của Termix, cho phép kẻ tấn công truy cập trái phép vào các thông tin SSH nhạy cảm. Sự cố xuất phát từ một cấu hình sai trong môi trường reverse proxy Nginx, khiến backend của Termix xác định tất cả các yêu cầu đến đều xuất phát từ localhost. Hậu quả là endpoint nội bộ lưu trữ thông tin SSH, bao gồm địa chỉ máy chủ, tên đăng nhập và mật khẩu, có thể bị truy xuất mà không cần xác thực, tạo ra rủi ro bảo mật rất nghiêm trọng.
Lỗ hổng được theo dõi với mã CVE-2025-59951 và thuộc các nhóm CWE-284 về kiểm soát truy cập không đúng và CWE-348 về sử dụng nguồn ít đáng tin cậy. Vấn đề bắt nguồn từ cách Termix xác định địa chỉ IP của client trong backend sử dụng framework Express. Ứng dụng sử dụng biểu thức req.ip || req.connection?.remoteAddress để phân định địa chỉ, nhưng khi triển khai với image Docker chính thức, Nginx chuyển tiếp toàn bộ lưu lượng qua HTTP/1.1 đến dịch vụ Termix tại 127.0.0.1:8081. Mặc dù proxy đã thiết lập header như X-Real-IP và X-Forwarded-For, Termix bỏ qua các header này và dựa hoàn toàn vào req.ip, vốn luôn trả về 127.0.0.1 khi request được proxied nội bộ. Kết quả là điều kiện kiểm tra isLocalhost luôn đúng và endpoint /ssh/db/host/internal có thể trả về dữ liệu nhạy cảm mà không yêu cầu xác thực.
Phần logic xác thực bị lỗi nghiêm trọng trong Termix chỉ dựa vào kiểm tra địa chỉ IP thay vì cơ chế xác thực và phân quyền thực sự. Điều này cho phép kẻ tấn công truy cập và thu thập toàn bộ thông tin SSH lưu trữ, bao gồm địa chỉ máy chủ, cổng kết nối, tên đăng nhập và mật khẩu đăng nhập hệ thống và di chuyển ngang trong mạng doanh nghiệp.
Phiên bản bị ảnh hưởng là các image Docker chính thức từ release-0.1.1-tag đến release-1.6.0-tag. Kẻ tấn công nếu có khả năng tiếp cận proxy có thể trích xuất các thông tin đăng nhập SSH và tận dụng chúng để xâm nhập hạ tầng nội bộ.
Để khắc phục, cần hành động ở cả hai mặt. Ở phía mã nguồn, nhóm phát triển Termix nên ngừng phụ thuộc trực tiếp vào req.ip để phân biệt localhost khi ứng dụng chạy sau proxy và xử lý header proxy một cách an toàn. Cần cấu hình Express tin tưởng proxy hợp lệ và đọc X-Real-IP hoặc X-Forwarded-For từ các proxy đáng tin cậy, đồng thời xác thực và lọc giá trị header trước khi sử dụng. Quan trọng không kém là triển khai cơ chế xác thực và phân quyền chặt chẽ cho endpoint /ssh/db/host/internal để đảm bảo chỉ các yêu cầu đã được xác thực mới được trả về dữ liệu nhạy cảm.
Ở phía nhà vận hành, biện pháp phòng ngừa tức thời bao gồm hạn chế truy cập đến endpoint tại lớp proxy, chỉ cho phép IP nội bộ hoặc VPN, rà soát cấu hình Nginx để không forward nhầm các request nội bộ và áp dụng quy tắc chặn hoặc giới hạn truy cập cho endpoint nhạy cảm. Sau khi sửa mã, cần xây dựng lại image Docker và triển khai bản vá.
Ngoài ra, các tổ chức cần rà soát mọi triển khai Termix trên hạ tầng, kiểm tra log để phát hiện các truy vấn bất thường tới /ssh/db/host/internal và thay đổi các khóa SSH và mật khẩu có khả năng đã bị lộ. Khi bản vá chính thức được phát hành, cần nâng cấp ngay và xác nhận rằng ứng dụng xử lý header proxy đúng cách và không cấp quyền truy cập chỉ dựa trên địa chỉ IP.
Một PoC đơn giản đã cho thấy khả năng khai thác bằng một HTTP GET tới /ssh/db/host/internal, trả về toàn bộ danh sách host mà không cần chứng thực. Các tổ chức sử dụng Termix được khuyến nghị coi CVE-2025-59951 là rủi ro ưu tiên và thực hiện các bước khắc phục và kiểm tra nêu trên.
Mã:
textlocation /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;
}
Phần logic xác thực bị lỗi nghiêm trọng trong Termix chỉ dựa vào kiểm tra địa chỉ IP thay vì cơ chế xác thực và phân quyền thực sự. Điều này cho phép kẻ tấn công truy cập và thu thập toàn bộ thông tin SSH lưu trữ, bao gồm địa chỉ máy chủ, cổng kết nối, tên đăng nhập và mật khẩu đăng nhập hệ thống và di chuyển ngang trong mạng doanh nghiệp.
Phiên bản bị ảnh hưởng là các image Docker chính thức từ release-0.1.1-tag đến release-1.6.0-tag. Kẻ tấn công nếu có khả năng tiếp cận proxy có thể trích xuất các thông tin đăng nhập SSH và tận dụng chúng để xâm nhập hạ tầng nội bộ.
Để khắc phục, cần hành động ở cả hai mặt. Ở phía mã nguồn, nhóm phát triển Termix nên ngừng phụ thuộc trực tiếp vào req.ip để phân biệt localhost khi ứng dụng chạy sau proxy và xử lý header proxy một cách an toàn. Cần cấu hình Express tin tưởng proxy hợp lệ và đọc X-Real-IP hoặc X-Forwarded-For từ các proxy đáng tin cậy, đồng thời xác thực và lọc giá trị header trước khi sử dụng. Quan trọng không kém là triển khai cơ chế xác thực và phân quyền chặt chẽ cho endpoint /ssh/db/host/internal để đảm bảo chỉ các yêu cầu đã được xác thực mới được trả về dữ liệu nhạy cảm.
Ở phía nhà vận hành, biện pháp phòng ngừa tức thời bao gồm hạn chế truy cập đến endpoint tại lớp proxy, chỉ cho phép IP nội bộ hoặc VPN, rà soát cấu hình Nginx để không forward nhầm các request nội bộ và áp dụng quy tắc chặn hoặc giới hạn truy cập cho endpoint nhạy cảm. Sau khi sửa mã, cần xây dựng lại image Docker và triển khai bản vá.
Ngoài ra, các tổ chức cần rà soát mọi triển khai Termix trên hạ tầng, kiểm tra log để phát hiện các truy vấn bất thường tới /ssh/db/host/internal và thay đổi các khóa SSH và mật khẩu có khả năng đã bị lộ. Khi bản vá chính thức được phát hành, cần nâng cấp ngay và xác nhận rằng ứng dụng xử lý header proxy đúng cách và không cấp quyền truy cập chỉ dựa trên địa chỉ IP.
Một PoC đơn giản đã cho thấy khả năng khai thác bằng một HTTP GET tới /ssh/db/host/internal, trả về toàn bộ danh sách host mà không cần chứng thực. Các tổ chức sử dụng Termix được khuyến nghị coi CVE-2025-59951 là rủi ro ưu tiên và thực hiện các bước khắc phục và kiểm tra nêu trên.
Theo Cyber Press