Understanding *sshole: How a Long Password Can Unlock Alpine Linux

*sshole là tên mà nhà nghiên cứu Özgün Kültekin đặt cho một lỗi bỏ qua xác thực mật khẩu trong OpenSSH trên một số hệ thống Linux dùng musl libc. Trong điều kiện cụ thể, kẻ tấn công chỉ cần biết tên tài khoản và gửi một mật khẩu dài từ 257 đến 1.024 byte để đăng nhập vào tài khoản vốn không được phép dùng mật khẩu. OpenSSH 10.6p2 và các gói Alpine Linux đã vá lỗi ngày 5/11/2026.

Vấn đề đáng chú ý không nằm ở một thuật toán mã hóa yếu, mà ở cách ba lựa chọn hợp lý ở ba thời điểm khác nhau tương tác với nhau: ký tự * dùng để khóa mật khẩu, giá trị lỗi của hàm crypt() trong musl và cơ chế chống dò tên người dùng của OpenSSH. Đây là bài học điển hình về rủi ro tại ranh giới giữa các thành phần phần mềm.

How does *sshole work?

Trên Linux, trường mật khẩu trong /etc/shadow thường chứa một chuỗi băm có tiền tố như $6$ cho SHA-512. Với tài khoản chỉ đăng nhập bằng khóa SSH, quản trị viên có thể đặt trường này thành *; vì đây không phải chuỗi băm hợp lệ, về nguyên tắc không mật khẩu nào khớp được.

Trên musl libc, crypt() cũng trả về đúng ký tự * khi việc băm thất bại. Thuật toán SHA-512 crypt của musl giới hạn đầu vào ở 256 byte để tránh tác vụ băm quá tốn tài nguyên. Khi nhận mật khẩu dài hơn giới hạn, hàm trả về *. Nếu OpenSSH so sánh kết quả đó với trường mật khẩu * của tài khoản, hai chuỗi trùng nhau và xác thực có thể thành công.

OpenSSH source code related to salt selection during password authentication
OpenSSH code involved in the chain of conditions behind *sshole. Source: Özgün Kültekin's research at sshhole.com.

Why does OpenSSH hash a password for a locked account?

Năm 2016, OpenSSH sửa CVE-2016-6210, một kênh bên cho phép đo thời gian phản hồi để suy đoán tên người dùng có tồn tại hay không. Để các đường xử lý mất thời gian gần tương đương, sshd vẫn thực hiện phép băm cho người dùng không hợp lệ hoặc tài khoản không có chuỗi băm dùng được, bằng cách mượn salt từ tài khoản khác.

Cơ chế chống dò tên người dùng này không tự nó tạo ra lỗ hổng. Lỗi xuất hiện khi nó gặp đúng hành vi trả về * của musl và tài khoản có trường mật khẩu cũng là *. OpenSSH đánh giá nguyên nhân gốc nằm ngoài sshd, nhưng đã bổ sung biện pháp tránh khai thác trong bản 10.6p2.

Which systems are at risk?

According to Alpine Linux's official advisory, all of these conditions must be true:

  • OpenSSH runs on a musl-based Linux system, most notably Alpine Linux; OpenWrt, Buildroot, and Yocto environments should also verify their actual configuration.
  • PAM bị tắt. Gói openssh-server mặc định của Alpine không dùng PAM; openssh-server-pam với UsePAM yes không bị ảnh hưởng.
  • PasswordAuthentication yes vẫn được bật.
  • Có ít nhất một tài khoản với trường mật khẩu là * và ít nhất một tài khoản khác dùng chuỗi băm $5$ or $6$.

Debian, Ubuntu và Fedora dùng glibc, các máy đi qua PAM, hệ thống đã tắt đăng nhập mật khẩu và container không chạy sshd không nằm trong phạm vi này. Tài khoản có trường ! cũng không chịu cách khai thác trên. Vì vậy, việc chỉ thấy Alpine trong chuỗi cung ứng container chưa đủ để kết luận máy chủ có thể bị tấn công.

Special risk for Alpine cloud images

Các ảnh tiny-cloud chính thức từ Alpine 3.18.11 đến 3.24.3 có tài khoản alpine với trường mật khẩu * và quyền doas không cần mật khẩu. Ảnh mới khởi động vẫn an toàn khi cloud-init tắt xác thực mật khẩu. Tuy nhiên, nếu cấu hình sau đó bật đăng nhập mật khẩu và xuất hiện một chuỗi băm $6$, kẻ tấn công có thể lấy shell của tài khoản alpine rồi nâng quyền lên root.

Alpine says every checked branch from 3.16 through 3.24 and edge was affected in older package versions. The project also issued fixes for some unsupported branches, but administrators should not use that as a reason to postpone an operating-system upgrade.

How to patch and mitigate safely

The preferred response is to update all packages and restart SSH:

apk upgrade -U -a
rc-service sshd restart

Chỉ nâng cấp gói là chưa đủ vì tiến trình sshd đang chạy không tự được thay thế. Các bản Alpine 3.21.10, 3.22.8, 3.23.8 và 3.24.4 đã chứa gói sửa; nhánh edge dùng OpenSSH 10.6_p2-r0.

Nếu chưa thể cập nhật ngay, hãy xác nhận đăng nhập bằng khóa hoạt động, giữ phiên quản trị hiện tại mở, sau đó đặt PasswordAuthentication no, kiểm tra cấu hình bằng sshd -t và khởi động lại dịch vụ. Không nên đóng phiên hiện tại trước khi thử thành công một kết nối SSH mới để tránh tự khóa mình khỏi máy chủ.

How to check for exploitation

Trên Alpine, quản trị viên nên tìm các dòng Accepted password trong /var/log/messages, đặc biệt với alpine, root hoặc tài khoản vốn chỉ dùng khóa. Một lần đăng nhập mật khẩu thành công cho tài khoản có trường * là dấu hiệu nghiêm trọng.

Nếu không thể loại trừ xâm nhập, cần xử lý máy như đã bị chiếm quyền: cô lập, bảo toàn log, rà soát lệnh doas, tài khoản và tệp mới, khóa trong authorized_keys, tiến trình duy trì truy cập và thông tin xác thực có mặt trên máy. Việc vá chỉ chặn lần khai thác tiếp theo, không loại bỏ cửa hậu đã được cài.

A flaw that survived for ten years

Chuỗi nguyên nhân kéo dài từ quyết định của musl năm 2012, bản vá chống dò người dùng của OpenSSH năm 2016 đến cách Alpine dùng * cho tài khoản chỉ dùng khóa từ năm 2022. Nhà nghiên cứu phát hiện sai khác khi thử khoảng 17.600 trường hợp xác thực trên nhiều tổ hợp glibc, musl, PAM và shadow.

When Alpine published its advisory, it said no CVE had been assigned. Some later reports call the issue CVE-2026-123158, but administrators should prioritize Alpine's advisory and the OpenSSH 10.6p2 release notes until official CVE databases are fully synchronized.

Lessons for operations teams

*sshole shows that testing each library in isolation is not enough to secure a complete system. An error value that seems harmless in musl can become a valid authentication result when combined with OpenSSH logic and account data. Operations teams should test real configuration matrices, track differences between libc and PAM, and remove password authentication from key-only servers.

Ưu tiên tức thời là kiểm kê máy Alpine có mở cổng SSH, cập nhật và khởi động lại sshd, xác minh cấu hình hiệu lực bằng sshd -T, rồi rà soát log. Đây là một lỗi có điều kiện khai thác hẹp, nhưng khi các điều kiện hội đủ, tác động có thể là đăng nhập từ xa và chiếm quyền root chỉ trong một kết nối.

VNCyberS compiled from Alpine Linux, OpenSSH, sshhole.com, and BleepingComputer

Contact Us

Email: [email protected]
Phone: +84 903260277