-
09/04/2020
-
128
-
1.694 bài viết
Lỗ hổng mới trong OpenSSH có thể khiến tiến trình SSH sập chỉ với một gói tin
Một lỗ hổng bảo mật nghiêm trọng vừa được phát hiện trong bản vá GSSAPI Key Exchange của OpenSSH, cho phép kẻ tấn công đánh sập các tiến trình con của SSH chỉ bằng một gói tin mạng duy nhất. Lỗ hổng này được theo dõi dưới mã định danh CVE-2026-3497, do chuyên gia bảo mật Jeremy Brown tìm ra, gây ảnh hưởng trực tiếp đến hàng loạt bản phân phối Linux phổ biến đang sử dụng gói OpenSSH có áp dụng bản vá GSSAPI.
Lỗ hổng được phát hiện bởi nhà nghiên cứu bảo mật Jeremy Brown và liên quan đến cơ chế trao đổi khóa GSSAPI trong OpenSSH. Phân tích cho thấy vấn đề bắt nguồn từ tệp kexgsss.c, thành phần xử lý quá trình trao đổi khóa ở phía máy chủ.
Cụ thể, trong nhánh xử lý lỗi của chương trình, mã nguồn đã gọi hàm sshpkt_disconnect() thay vì ssh_packet_disconnect(). Hai hàm này có hành vi khác nhau. Hàm ssh_packet_disconnect() sẽ dừng tiến trình ngay lập tức, còn sshpkt_disconnect() chỉ gửi thông báo ngắt kết nối rồi tiếp tục thực thi chương trình.
Do tiến trình không dừng lại như dự kiến, chương trình tiếp tục chạy sang đoạn mã phía sau và đọc một biến trên stack chưa được khởi tạo có tên recv_tok. Nội dung của biến này sau đó được chuyển qua kênh giao tiếp nội bộ tới tiến trình monitor trong mô hình privilege separation của OpenSSH. Tiến trình monitor chạy với quyền cao hơn.
Tại đây, dữ liệu được chuyển vào hàm gss_release_buffer(), hàm này có thể gọi free() trên một con trỏ không hợp lệ. Kết quả là bộ nhớ heap bị hỏng và tiến trình con của SSH bị sập.
Theo phân tích của Brown, lỗi này thuộc hai nhóm điểm yếu phổ biến gồm truy cập con trỏ chưa khởi tạo và sử dụng tài nguyên chưa được khởi tạo. Trong thử nghiệm thực tế, việc kích hoạt lỗ hổng khá đơn giản. Chỉ cần một gói tin SSH được chế tạo khoảng 300 byte là đủ gây lỗi và không yêu cầu thông tin xác thực.
Trên các hệ thống x86_64, việc khai thác CVE-2026-3497 thường khiến tiến trình SSH dừng đột ngột với tín hiệu SIGABRT hoặc SIGSEGV. Sau khi tiến trình bị sập, dịch vụ SSH có thể bị khóa tạm thời khoảng 90 giây. Các thử nghiệm cho thấy tỷ lệ làm sập tiến trình đạt 100% trong những cấu hình được kiểm tra.
Lỗ hổng cũng có thể ảnh hưởng tới cơ chế privilege separation của OpenSSH. Dữ liệu chưa khởi tạo có thể được gửi qua kênh IPC tới tiến trình monitor chạy với quyền root. Trong một số trường hợp, lượng dữ liệu heap được chuyển qua ranh giới đặc quyền có thể lên tới 127 KB.
Mức độ ảnh hưởng của CVE-2026-3497 khác nhau giữa các bản phân phối Linux do sự khác biệt trong tùy chọn biên dịch. Ví dụ, khi biên dịch bằng Clang với tùy chọn -O0, con trỏ thu được có giá trị 0xfffbe600 với độ dài 4 byte. Trong khi đó, với GCC biên dịch ở mức -O2 và tùy chọn -fno-stack-protector, biến này có thể chứa địa chỉ heap hợp lệ với độ dài lên tới 127.344 byte.
Các hệ thống chạy máy chủ OpenSSH trên Ubuntu và Debian với tùy chọn GSSAPIKeyExchange yes đã được xác nhận có nguy cơ bị ảnh hưởng. Do nhiều phiên bản của bản vá GSSAPI KEX đang tồn tại trong hệ sinh thái Linux, phạm vi tác động thực tế có thể rộng hơn.
Bản vá cho CVE-2026-3497 đã được phát hành. Việc khắc phục khá đơn giản: thay thế ba lời gọi sshpkt_disconnect() bằng ssh_packet_disconnect() tại các điểm gọi phía máy chủ trong tệp kexgsss.c. Bản vá đã được đưa vào các gói cập nhật của Ubuntu. Quản trị viên nên cập nhật OpenSSH lên phiên bản đã được vá thông qua các gói bảo mật của bản phân phối Linux. Trong trường hợp chưa thể cập nhật ngay, có thể tạm thời vô hiệu hóa tùy chọn GSSAPIKeyExchange để giảm nguy cơ bị khai thác.
Theo Cyber Security News