Nguy hiểm: Lỗ hổng CVE OpenSSH RCE từ ProxyCommand
Các nhà nghiên cứu bảo mật đã phát hiện một **lỗ hổng CVE** nghiêm trọng trong tính năng ProxyCommand của OpenSSH, có khả năng bị khai thác để đạt được **remote code execution** trên các hệ thống client. Lỗ hổng này, được theo dõi với mã định danh CVE-2025-61984, phát sinh từ việc lọc không đầy đủ các ký tự điều khiển trong tên người dùng khi mở rộng chuỗi ProxyCommand.
Một mã khai thác (proof-of-concept exploit) minh họa cho lỗ hổng này trong Bash và các shell khác đã được công bố, làm dấy lên những lo ngại cấp bách cho các quản trị viên sử dụng cấu hình proxy SSH phức tạp.
Tổng quan về Lỗ hổng CVE-2025-61984
Vấn đề này bắt nguồn từ cách lệnh ssh(1) xử lý chỉ thị ProxyCommand trong tệp cấu hình ~/.ssh/config. Khi sử dụng token %r để bao gồm tên người dùng từ xa, các ký tự điều khiển như ký tự xuống dòng (newline) không bị loại bỏ.
Điều này cho phép kẻ tấn công chèn các ký tự xuống dòng, làm gián đoạn lệnh exec và thực thi các lệnh tùy ý trên phía client. Bằng cách gây ra lỗi cú pháp trong shell built-in, dòng exec bị sai cú pháp sẽ bị hủy bỏ, và quá trình thực thi sẽ tiếp tục trên dòng tiếp theo, nơi các mã độc hại có thể chạy.
Cơ chế khai thác lỗ hổng
Lỗ hổng CVE-2025-61984 tận dụng việc mở rộng chuỗi ProxyCommand không được kiểm soát chặt chẽ. Cụ thể, khi một tên người dùng độc hại chứa ký tự xuống dòng được chuyển qua token %r, nó sẽ phá vỡ cấu trúc lệnh dự kiến.
Thay vì chạy một lệnh ProxyCommand duy nhất, shell sẽ phân tích cú pháp ký tự xuống dòng như một dấu phân cách lệnh, cho phép kẻ tấn công chèn và thực thi các lệnh khác sau lệnh exec ban đầu.
Chi tiết Proof-of-Concept (PoC) và Exploit
Mã proof-of-concept đã được phát hành đã chứng minh khả năng khai thác trên các shell Bash, fish và csh. Mỗi shell có một kỹ thuật riêng để kích hoạt lỗi cú pháp và cho phép thực thi mã.
Kỹ thuật khai thác trong Bash
Trong Bash, việc chèn $[*] vào một lời gọi exec sẽ tạo ra một lỗi cú pháp, làm dừng lệnh exec nhưng vẫn cho phép các lệnh tiếp theo chạy. Ví dụ:
# Tên người dùng độc hại: 'user'
# Kẻ tấn công gửi chuỗi: 'usern$(echo compromised)'
# Lệnh ProxyCommand bị biến đổi:
exec ssh -W %h:%p 'usern$(echo compromised)'@proxy.example.com
# Khi được shell xử lý, nó thành:
exec ssh -W %h:%p 'user'
$(echo compromised)
# Kết quả:
# Lệnh 'exec ssh -W %h:%p 'user'' sẽ báo lỗi cú pháp do có ký tự xuống dòng không mong muốn.
# Lệnh '$(echo compromised)' sẽ được thực thi.
Ví dụ trên sẽ in ra dòng “compromised” sau lỗi ban đầu. Đây là một minh họa rõ ràng về cách kẻ tấn công có thể chèn và thực thi lệnh tùy ý thông qua **lỗ hổng CVE** này.
Kỹ thuật khai thác trong Fish và Csh
Các shell khác cũng có hành vi tương tự khi bị khai thác:
- Trong fish: Sử dụng chuỗi
exec cat $p[0]để đạt được việc thực thi. - Trong csh: Sử dụng chuỗi
exec $[để kích hoạt lỗi cú pháp và thực thi mã.
Cần lưu ý rằng shell Zsh không bị ảnh hưởng bởi kỹ thuật cụ thể này, vì các shell phi tương tác của Zsh sẽ tự động hủy bỏ khi gặp lỗi phân tích cú pháp theo mặc định.
Vector Tấn công Phổ biến
Một vector tấn công phổ biến cho **lỗ hổng CVE-2025-61984** là thông qua một URL Git submodule độc hại, tận dụng việc mở rộng token %r. Khi một người dùng clone một repository có chứa một mục .gitmodules đã được chế tạo đặc biệt và cấu hình proxy SSH phù hợp, các ký tự điều khiển được chèn sẽ khiến lệnh proxy thực thi mã tùy ý trước khi thiết lập kết nối.
Điều này có nghĩa là ngay cả trước khi kết nối SSH thực sự được thiết lập, hệ thống client đã có thể bị xâm nhập, cho phép kẻ tấn công chiếm quyền điều khiển hệ thống một cách tinh vi.
Biện pháp Giảm thiểu và Bản vá Bảo mật
Biện pháp khắc phục chính cho **lỗ hổng CVE** này là nâng cấp OpenSSH lên phiên bản 10.1p1 hoặc mới hơn. Trong các phiên bản này, các ký tự điều khiển trong tên người dùng đã bị chặn một cách rõ ràng.
Khuyến nghị Tạm thời
Đối với các quản trị viên không thể nâng cấp ngay lập tức, có thể giảm thiểu rủi ro bằng cách trích dẫn (quoting) token %r trong các cấu hình client SSH hoặc cấu hình lại ProxyCommand để tránh việc mở rộng tên người dùng một cách không an toàn. Một cấu hình mẫu để ngăn chặn việc chèn ký tự xuống dòng là:
ProxyCommand ssh -W %h:%p [email protected] 'nc %h %p'
Cấu hình này giúp ngăn chặn việc chèn ký tự xuống dòng bằng cách không sử dụng token %r trực tiếp hoặc đảm bảo nó được xử lý an toàn. Các biện pháp phòng thủ chuyên sâu bổ sung bao gồm:
- Hạn chế giao thức SSH cho Git submodules thông qua cấu hình Git:
git config --global url."https://github.com/".insteadOf [email protected]:
- Tránh sử dụng các trình xử lý URL truyền tên người dùng SSH không được lọc.
Nhận thức về **lỗ hổng CVE-2025-61984** này đặc biệt quan trọng đối với các môi trường sử dụng proxy SSH, bao gồm các giải pháp cổng đám mây (cloud gateway solutions) như Teleport, nơi thường xuyên tạo các lệnh proxy có chứa token %r. Việc lọc đúng đắn và cập nhật phiên bản kịp thời sẽ bảo vệ hệ thống khỏi phương thức **remote code execution** nguy hiểm này, đảm bảo an toàn thông tin và an ninh mạng.









