Alpine Linux cảnh báo lỗ hổng vượt xác thực mật khẩu OpenSSH

Phần mềm05 tháng 11, 2026·5 phút đọc

Alpine Linux phát hành bản vá cho lỗ hổng trong OpenSSH-server cho phép kẻ tấn công đăng nhập mà không cần mật khẩu, ảnh hưởng mọi phiên bản từ 3.16 đến 3.24 và edge. Quản trị viên cần nâng cấp gói openssh và khởi động lại sshd, hoặc tắt xác thực bằng mật khẩu ngay lập tức.

Alpine Linux cảnh báo lỗ hổng vượt xác thực mật khẩu OpenSSH
Ảnh minh hoạ do AI tạo

Alpine Linux vừa công bố khuyến cáo bảo mật về một lỗ hổng trong OpenSSH-server cho phép kẻ tấn công vượt qua xác thực mật khẩu và đăng nhập vào hệ thống mà không cần biết mật khẩu. Mọi phiên bản Alpine được kiểm tra — từ 3.21 đến 3.24, bản edge, cùng các bản cũ hơn từ 3.16 đến 3.20 — đều bị ảnh hưởng. Bản vá đã có sẵn, nhưng việc chỉ nâng cấp gói là chưa đủ: tiến trình sshd đang chạy vẫn phải được khởi động lại.

Ai bị ảnh hưởng và mức độ nguy hiểm

Lỗ hổng cho phép kẻ tấn công tiếp cận cổng SSH đăng nhập với bất kỳ mật khẩu nào, chỉ cần một kết nối, hoạt động mỗi lần thử và không cần thử lại.

Điều kiện khai thác gồm hai yếu tố:

  • Kẻ tấn công cần biết tên một tài khoản có trường mật khẩu là * — tức tài khoản không đặt mật khẩu, thường gặp ở các tài khoản chỉ dùng khóa (key-only).
  • Máy phải có ít nhất một tài khoản khác với hàm băm mật khẩu dạng $5$ hoặc $6$.

Kẻ tấn công sau đó gửi một mật khẩu rất dài, từ 257 đến 1024 byte. Chỉ cần một người dùng có mật khẩu là đủ để mọi tài khoản không mật khẩu trên máy trở nên có thể truy cập được.

Chi tiết kỹ thuật nằm trong ghi chú phát hành OpenSSH 10.6p2. Tại thời điểm viết bài, lỗ hổng chưa được cấp mã CVE (mã định danh lỗ hổng bảo mật công khai).

Nguyên nhân: lỗi xử lý salt của crypt()

Khi sshd được biên dịch không có PAM (Pluggable Authentication Modules), nó kiểm tra mật khẩu bằng cách băm chuỗi nhập vào với hàm crypt() — hàm thư viện C chuyển mật khẩu thành dạng băm lưu trữ — rồi so sánh với trường mật khẩu đã lưu.

Với tài khoản có trường lưu trữ quá ngắn để chứa salt (tiền tố ngẫu nhiên của một hàm băm), sshd sẽ mượn salt của một tài khoản khác.

Điểm mấu chốt: crypt() của musl trả về chuỗi * như một dấu hiệu lỗi khi khóa dài hơn 256 byte. Trong khi đó * cũng chính là nội dung trường mật khẩu của mọi tài khoản không đặt mật khẩu — nên "hàm băm" khớp và đăng nhập thành công. OpenSSH 10.6p2 đã xử lý vấn đề này trong sshd; các gói nhánh ổn định của Alpine mang theo bản vá tương ứng.

Cách khắc phục

Các bản phát hành Alpine 3.21.10, 3.22.8, 3.23.8 và 3.24.4 đã chứa gói đã vá. Cần chạy lệnh sau với quyền root và khởi động lại dịch vụ:

rc-service sshd restart

Việc nâng cấp gói không tự khởi động lại sshd đang chạy, nên đây là bước bắt buộc sau khi cập nhật. Trước khi thao tác, hãy chắc chắn đăng nhập bằng khóa SSH vẫn hoạt động và giữ phiên hiện tại mở cho đến khi thử được một phiên đăng nhập mới.

Nếu chưa thể cập nhật ngay, biện pháp thay thế là tắt đăng nhập bằng mật khẩu: đặt PasswordAuthentication no trong cấu hình sshd rồi khởi động lại dịch vụ. Một trong hai cách đều bịt được lỗ hổng.

Alpine cũng hướng dẫn tạo tệp cấu hình phụ trong thư mục /etc/ssh/sshd_config.d/ — từ bản 3.19 trở đi sshd_config mặc định của Alpine đọc thư mục này, còn các bản cũ hơn sẽ bỏ qua. Cần kiểm tra lại cấu hình trước khi khởi động lại, vì lệnh thay thế bằng sed sẽ đổi yes thành no trên mọi dòng PasswordAuthentication trong /etc/ssh/sshd_config, kể cả các dòng nằm trong khối Match. Để hoàn tác, xóa tệp cấu hình phụ và khôi phục bản sao lưu gốc.

Lưu ý với các image tiny-cloud

Các image chính thức tiny-cloud (định dạng qcow2, VHD và AMI) từ 3.18.11 đến 3.24.3 đi kèm tài khoản alpine có trường mật khẩu * và cấu hình doas không mật khẩu. Chúng an toàn ở lần khởi động đầu tiên, nhưng trở nên có thể bị khai thác ngay khi xuất hiện bất kỳ hàm băm $6$ nào trên máy — chẳng hạn khi quản trị viên đặt mật khẩu console, hoặc dữ liệu người dùng (user-data) thêm một tài khoản có hashed_passwd.

Khi đó, kẻ tấn công có thể lấy được shell với tư cách người dùng alpine và dùng doas để leo lên quyền root.

Image được xây từ 3.21.10, 3.22.8, 3.23.8, 3.24.4 trở lên đã có gói vá; các bản trước đó thì chưa. Với mọi instance đang chạy, cần cập nhật openssh hoặc tắt xác thực mật khẩu.

Kiểm tra dấu hiệu bị xâm nhập

Cần tìm trong /var/log/messages các dòng sshd ghi Accepted password cho một tài khoản không có mật khẩu như alpine, root hay bất kỳ người dùng chỉ dùng khóa nào. Đồng thời rà soát việc sử dụng doas, cùng các người dùng, tệp và khóa được ủy quyền mới tạo trên những máy có cổng SSH lộ ra ngoài.

Nếu không thể loại trừ khả năng đã có đăng nhập trái phép, hãy coi máy đó là đã bị xâm phạm.

Bản 3.21 đã hết thời gian hỗ trợ từ ngày 2026-11-01, nhưng Alpine vẫn phát hành gói vá cho từng bản phát hành cũ, kéo dài ngược về tận 3.16.

Góc nhìn

Lỗ hổng này là lời nhắc rõ ràng rằng việc vá phần mềm chưa đủ nếu tiến trình cũ vẫn đang chạy: với OpenSSH, bước khởi động lại sshd là bắt buộc, và các đội vận hành nên đưa nó vào quy trình tự động thay vì nhớ thủ công. Với các dự án dùng container hoặc image đám mây, thói quen dùng tài khoản không mật khẩu kết hợp cấu hình sudo/doas không mật khẩu sẵn có tạo ra bề mặt tấn công lớn — chỉ cần một tài khoản có mật khẩu xuất hiện là toàn bộ hệ thống lộ diện.

Về lâu dài, việc tắt xác thực bằng mật khẩu và chỉ dùng khóa SSH là thực hành nên áp dụng mặc định, vì nó vừa giảm rủi ro vừa cách ly khỏi các lỗi logic trong chính cơ chế xác thực mật khẩu.

Nguồn: alpinelinux.org · Quy trình biên tập

Chia sẻ:FacebookX