Alpine の openssh-server は PAM なしで組まれており、パスワード未設定のアカウント(shadow の欄が *)へ、257〜1024 バイトのパスワードでログインできる。到達可能な SSH に対し、1 接続で毎回成功する。OpenSSH は深刻度を critical とし、CVE 番号は案内の時点で未採番。glibc の Linux、PAM 経由のパスワード検査、非 Linux は対象外。

次をすべて満たすホストが対象。

  • Alpine の openssh-server(PAM なし)、または openssh-server-pam で UsePAM no
  • PasswordAuthentication yes(OpenSSH の既定)
  • パスワード欄が * のアカウントがある。root(PermitRootLogin prohibit-password の既定では root 直接は不可)、パスワードなしで作った鍵ユーザー、musl-nscd 経由のディレクトリユーザー、tiny-cloud イメージの alpine を含む
  • 別のローカルアカウントに $5$ または $6$ のハッシュがある

コンテナ内で sshd を動かさない構成、PasswordAuthentication no、UsePAM yes、パスワード欄が ! のロック、$ 形式のハッシュが一つも無いホスト、cloud-init が PasswordAuthentication no を書いたイメージは対象外。tiny-cloud の 3.18.11 から 3.24.3 は、初回起動時は安全で、コンソールパスワードなど $6$ ハッシュができた時点で alpine と passwordless doas 経由の root に開く。

対処はパッケージ更新のあと sshd の再起動。パッケージ更新だけでは動いているデーモンは置き換わらない。

plaintext
apk upgrade -U -a
rc-service sshd restart

修正パッケージは edge が 10.6_p2-r0、3.24 が 10.3_p1-r2、3.23 が 10.2_p1-r1、3.22 が 10.0_p1-r11、3.21 が 9.9_p2-r1。3.16 までさかのぼって修正パッケージがある。ポイントリリース 3.21.10、3.22.8、3.23.8、3.24.4 に同梱。上流の修正は OpenSSH 10.6p2。

更新できない間は、鍵ログインを確認したうえで PasswordAuthentication no を書き、sshd -t のあと再起動する。/var/log/messages に、パスワード未設定のアカウントへの Accepted password for があれば侵入を疑う。

#参考文献