テック技報最新号へ →
セキュリティ

OpenSSH+musl で「パスワード禁止」のアカウントに長いパスワードが通る(*sshole)

Alpine など musl libc 上で PAM なしの OpenSSH を動かしていると、shadow に * だけが書いてある「ログイン不可」アカウントに、257〜1024 文字の任意のパスワードで入れる。OpenSSH 10.6p2 へ更新するか、パスワード認証を切る。

@yousukezan · 2026-11-06
#openssh#alpine#musl#ssh#authentication#cve

いつ使うか

  • Alpine Linux・OpenWrt・Buildroot・Yocto、および musl ベースの Docker イメージで openssh-server を動かしているとき
  • 公開鍵専用の deploy ユーザーや、Alpine 公式の AWS/Azure イメージの初期ユーザー(doas がパスワードなし)を置いているとき

何が起きるか

  1. musl の crypt() は 256 バイトを超えるパスワードを拒否し、失敗時に "*" を返す。
  2. パスワード禁止アカウントの shadow 欄も "*" なので、文字列比較が一致してしまう。
  3. OpenSSH は「存在しないユーザー」とのタイミング差を埋めるため、別アカウントのソルトでハッシュする処理があり、その結果が * と比較される経路で上記が認証成功になる。
  4. 条件はおおむね次のすべて: musl 上の sshd、PAM 未使用(Alpine の既定など)、PasswordAuthentication が有効、* のアカウントと本物のパスワードを持つ別アカウントが両方あること。

対応

  1. まず OpenSSH を 10.6p2 以降へ更新する(Alpine なら apk upgrade openssh)。
  2. すぐ更新できない場合はパスワード認証を止める。
    echo "PasswordAuthentication no" > /etc/ssh/sshd_config.d/00-no-passwords.conf
    rc-service sshd restart   # 環境に合わせた再起動コマンドで
  3. 侵害の有無は、パスワード欄が * のアカウントへの「パスワード成功」ログを探す(調査用リポジトリ: github.com/oz9un/sshole )。該当があれば鍵の入れ替えとセッション確認を行う。

追記(2026-11-10):国内でも警告、侵入成功を観測

  • JPCERT/CC が CyberNewsFlash を出し、悪用の試行、観測用環境での侵入成功(侵入後のコマンド実行や C2 エージェント設置まで)、PoC の公開を伝えた。国内でも Alpine Linux ベースの商用製品が使われていることを確認している。
  • 対策は OpenSSH 10.6p2 への更新。ログで、本来パスワードログインできないアカウントへの Accepted password for 記録がないかを確認する。
  • 出典: @MalwareBibleJP · 2026-11-09 、@MalwareBibleJP · 2026-11-09

注意

  • Debian/Ubuntu/Fedora など glibc+PAM の一般的な構成、Dropbear、OpenBSD は対象外。
  • 「パスワードを無効にしたつもり」の cloud イメージや鍵専用ユーザーが、実は * でこの穴に当たる。更新か PasswordAuthentication no のどちらかを必ず入れる。

出典

X の元の投稿を開く