기술

아무 비밀번호나 257자면 통과, 알파인 SSH의 10년 된 구멍 sshhole 확인과 대처

musl 리눅스(알파인·OpenWrt)에서 PAM 없이 돌던 OpenSSH가 2016년부터 비밀번호 칸이 *인 계정에 257자 넘는 아무 비밀번호를 받아들였습니다. 걸리는 조건, 확인 방법, OpenSSH 10.6p2 업데이트를 정리했습니다.

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는 해당하지 않습니다.

왜 열렸나

  1. 유닉스는 1980년부터 로그인을 막을 계정의 비밀번호 칸에 *를 적었습니다. 해시가 아니니 어떤 비밀번호도 맞을 수 없습니다.
  2. sshd는 없는 계정이나 해시가 없는 계정에도 시간을 똑같이 쓰려고, 다른 계정의 솔트를 빌려 비밀번호를 계산합니다(2016년 CVE-2016-6210 대응).
  3. musl의 crypt()는 2012년부터 실패하면 NULL 대신 * 한 글자를 돌려주고, SHA-512 계산은 256바이트가 넘는 비밀번호를 거절합니다.
  4. 그래서 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.

김현빈 Developer & Writer

기술, 포스팅 관련 질문, 프로젝트 협업 등 연락주시면 언제든지 회신 드립니다.

esc

↑↓ 고르기↵ 열기? 단축키

해변에서 주운 것

읽으러 가기 →
guest@beachcombers — zsh

단축키

⌘K 또는 /
글·작업·개발일지 찾기
R
해변 산책 — 아무 글 하나 줍기
`
터미널 열기
←→
쪽 넘기기 (휠·스와이프도 됩니다)
?
이 안내
esc
닫기