2026년 11월 5일, Wakefield의 외즈귄 퀼테킨(Özgün Kültekin)이 sshhole.com에 OpenSSH 버그 하나를 공개했습니다. musl 리눅스에서 PAM 없이 빌드한 sshd가, 비밀번호 칸이 *인 계정에 257~1024자의 아무 비밀번호를 받아들였습니다. 2016년부터 있던 문제이고, 해커뉴스에서 2,924점을 받았습니다. 같은 날 나온 OpenSSH 10.6p2가 고쳤습니다.
걸리는 조건
아래 다섯 가지가 모두 맞아야 합니다(oz9un/sshole README).
| 조건 | 설명 |
|---|---|
| musl을 쓰는 리눅스 | 알파인, OpenWrt, Buildroot, Yocto, postmarketOS, Void(musl) 등 |
| PAM 없이 빌드한 sshd | 알파인의 기본 openssh-server 패키지가 그렇습니다. openssh-server-pam + UsePAM yes는 안전합니다 |
| 비밀번호 로그인 켜짐 | PasswordAuthentication yes, 기본값입니다 |
비밀번호 칸이 *인 계정 | 키로만 들어가는 계정, LDAP 계정, 알파인의 root 등 |
| 진짜 비밀번호가 있는 다른 계정 | 누군가 한 번이라도 passwd를 실행했다면 해당합니다 |
알파인의 공식 AWS·Azure 이미지는 기본 alpine 사용자가 이 상태이고 비밀번호 없는 doas가 있어 root까지 닿습니다. glibc 배포판(데비안, 우분투, 페도라), PAM을 쓰는 sshd, OpenBSD·FreeBSD·macOS, dropbear는 해당하지 않습니다.
왜 열렸나
- 유닉스는 1980년부터 로그인을 막을 계정의 비밀번호 칸에
*를 적었습니다. 해시가 아니니 어떤 비밀번호도 맞을 수 없습니다. - sshd는 없는 계정이나 해시가 없는 계정에도 시간을 똑같이 쓰려고, 다른 계정의 솔트를 빌려 비밀번호를 계산합니다(2016년 CVE-2016-6210 대응).
- musl의
crypt()는 2012년부터 실패하면NULL대신*한 글자를 돌려주고, SHA-512 계산은 256바이트가 넘는 비밀번호를 거절합니다. - 그래서 257자 넘는 비밀번호를 넣으면 계산 결과가
*가 되고, 저장된*와 같다고 판정됩니다.
sshhole.com에는 데비안 상자와 알파인 상자를 나란히 두고 256자와 300자를 넣어 보는 데모가 있습니다. 브라우저 안에서만 돌고 아무것도 보내지 않습니다.
내 서버 확인
저장소의 확인 스크립트는 libc, sshd 버전, PAM, PasswordAuthentication, *인 계정을 보고 걸리는지 알려 줍니다.
curl -sO https://raw.githubusercontent.com/oz9un/sshole/main/check.sh
sudo sh check.sh
남의 스크립트를 root로 돌리기 전에는 내용을 먼저 읽어 보세요. 이미 뚫렸는지는 sshd 로그에서 비밀번호가 없어야 할 계정의 Accepted password 줄을 찾으면 됩니다.
고치기
# OpenSSH 10.6p2 (2026-11-05)
apk upgrade openssh
# 당장 못 올린다면 비밀번호 로그인을 끕니다
echo "PasswordAuthentication no" > /etc/ssh/sshd_config.d/00-no-passwords.conf
rc-service sshd restart
OpenSSH 릴리스 노트는 원인이 sshd 밖(libc)에 있지만 sshd에서 막을 수 있어 고쳤다고 적었습니다. 저장소에는 7.3p1 이상에 쓸 수 있는 원래 패치도 있습니다.
찾은 방법
찾은 사람은 sshd를 glibc·musl, PAM 있음·없음, shadow 있음·없음으로 12가지로 빌드하고, AI 에이전트 여러 개로 이상한 로그인 약 1만 7,600번을 던졌다고 썼습니다. 모든 빌드가 같은 답을 냈는데, musl에 PAM이 없는 빌드만 들어오면 안 될 로그인을 받아들였습니다. OpenSSH 팀도 10.6 릴리스 노트에서 AI로 찾은 보안 보고가 크게 늘었고, 앞으로 고친 버전을 더 자주 내겠다고 밝혔습니다.
오늘 할 일
알파인이나 OpenWrt로 SSH를 열어 둔 서버가 있다면 apk upgrade openssh부터 하세요. 키로만 들어가는 서버라면 비밀번호 로그인을 꺼 두는 편이 이 버그와 상관없이 안전합니다.
쇼츠로 보기
이 글은 비치콤버스 쇼츠 No.76의 짝 글입니다. 짧은 주소 beachcombers.co.kr/s/76.