OpenBSD starting SSH server
写真: Hpott / CC BY-SA 4.0 / Wikimedia Commons

長いパスワードで認証が通る仕組み

OpenSSHとmusl Cライブラリを組み合わせた一部のLinux環境で、257〜1,024バイトのパスワードを送ると、パスワード認証を無効にしたアカウントへログインできる脆弱性が見つかりました。Alpine Linuxでは条件がそろうと、SSHポートへ接続できる攻撃者が認証を突破し、アカウントによってはroot権限に達する可能性があります。

muslはLinuxで使われるCライブラリで、暗号化処理などの基本機能を提供します。PAMは、SSHなどのアプリケーションが利用する認証の仕組みです。今回の問題は、PAMを使わないOpenSSHがmuslのcrypt()関数を呼び出す経路で起きます。

パスワード欄が*のアカウントは、通常のパスワード認証ではログインできません。しかしmuslは、256バイトを超える入力を処理できない場合に*を返し、OpenSSHがその値をアカウントのパスワード欄と比較して、一致と判定することがあります。有効なパスワードハッシュを持つアカウントのパスワードを突破する脆弱性ではありません。

影響を受ける構成とPAM認証

攻撃が成立するには、muslを使うLinux上でOpenSSHが動き、PAM認証が無効で、SSHのパスワード認証が有効である必要があります。さらに、パスワード欄が*のアカウントと、$5$または$6$形式のハッシュを持つ別のアカウントが少なくとも1つ必要です。

Alpine Linuxでは、PAMなしでビルドされたopenssh-serverが対象です。openssh-server-pamを使っていても、設定がUsePAM noなら影響を受けます。一方、openssh-server-pamでUsePAM yesを設定した場合は対象外です。

PAMを有効にした構成では、パスワード検証にPAMの認証経路を使います。問題となる*のアカウントについてmuslのcrypt()を呼び出さないため、この不具合の条件から外れます。影響するのはPAMを使わず、OpenSSHが自らcrypt()の結果と保存済みの値を照合する経路です。Debian、Ubuntu、Fedoraなどglibcを使うシステムや、パスワード認証を無効にした構成も対象外です。

Alpine Linuxで確認すべき環境

Alpine Linuxの公式tiny-cloudイメージでは、3.18.11〜3.24.3に、パスワード欄が*のalpineユーザーと、パスワードなしでdoasを使える設定が含まれます。初回起動時は影響を受けませんが、管理者がコンソール用パスワードを設定するなどして$6$形式のハッシュが加わると、攻撃が成立する条件がそろう場合があります。

影響を受けるリリースは、確認された範囲でAlpine 3.16〜3.24とedgeです。修正版を含むリリースは3.21.10、3.22.8、3.23.8、3.24.4です。これらより前のイメージを使う稼働中のインスタンスには更新が必要です。

コンテナ内でsshdを動かしていないDockerなどの利用環境は対象外です。/etc/shadowのパスワード欄が!のロック済みアカウントも、パスワードでも鍵でもログインできないため影響を受けません。Alpineの公式イメージでは、rootのほか、パスワードを設定していない鍵専用ユーザーも該当することがあります。

修正版への更新と侵入の確認

OpenSSHチームは2026年11月5日にOpenSSH 10.6p2を公開し、PAMを無効にした一部のLinuxシステムで起きるパスワード認証の迂回を防ぐ修正を含めました。Alpine Linuxでは各ブランチ向けの修正版パッケージが提供されています。

Alpineではパッケージ更新後にsshdを再起動する必要があります。パッケージだけを更新しても、稼働中のデーモンは置き換わりません。すぐに更新できない場合は、SSH設定でPasswordAuthentication noを指定し、sshdを再起動する方法が案内されています。

侵入の痕跡を調べるには、/var/log/messagesで、パスワードを持たないはずのユーザーに対するAccepted passwordの記録を確認します。Alpine Linuxのalpineアカウントで成功記録があれば、/etc/shadowの該当欄も照合できます。調査対象には、露出していたマシンでのdoasの利用、最近作成されたユーザー、ファイル、認証鍵も含まれます。