悪用は極めて簡単です。人気の Alpine Linux を含む脆弱な構成の Linux 上で動作する OpenSSH サーバーに、任意の極端に長いパスワードを送信するだけで成立します。
glibc ではなく musl C ライブラリで構築された Linux システム上の OpenSSH サーバーに、深刻な脆弱性が見つかりました。リモートの攻撃者が認証を容易に回避し、パスワード認証が無効化されているはずのアカウントにログインできてしまいます。この欠陥は、クラウド向け Docker コンテナイメージで広く使われる軽量な Alpine Linux や、組み込みシステム向けの Linux ディストリビューションに影響します。
このセキュリティ上のバグは *SSHole と名付けられ、CVE-2026-123158 として追跡されています。セキュリティテスト企業 Wakefield の研究者 Ozgun Kultekin 氏が発見したもので、過去10年間にわたって存在していました。OpenSSH のメンテナーは、このバグは自分たちのコードに原因があるわけではないと主張しているものの、木曜日に公開した緊急アップデート OpenSSH 10.6p2 で、迅速に緩和策を追加しました。
先制型エクスポージャー管理企業 watchTowr の脅威インテリジェンス責任者 Jake Knott 氏は、次のように述べています。「OpenSSH ほど普及した技術の脆弱性に対する『エクスプロイト』が、単に『長いパスワードを送る』、あるいは『大量の A を送る』だけというのは、めったにあることではありません。しかし、それが現実です。影響を受けるシステムでは、257文字から1,024文字のパスワードを送信するだけという、驚くほど単純な手口で攻撃が成立します」
幸い、このエクスプロイトが成立するにはいくつかの前提条件があります。
- Linux ディストリビューションが musl を使用していること。Debian、Ubuntu、Fedora など、多くの一般的なサーバー向けディストリビューションは影響を受けません
- システムが OpenSSH を使用していること。多くの組み込み向けディストリビューションが採用する Dropbear など、別の SSH サーバー実装は対象外です
- OpenSSH が、Linux で最も一般的なログイン基盤である Pluggable Authentication Modules(PAM)のサポートなしで構成されていること
- OpenSSH がパスワードベースの認証を許可していること
- システムレベルでパスワードログインが無効化されているアカウントの名前を、攻撃者が把握していること
これらの条件は、Alpine Linux のデフォルト構成と、組み込みの「alpine」ユーザー名で満たされます。このアカウントでは root としてコマンドを実行できます。Alpine プロジェクトは openssh パッケージの緊急アップデートを公開しました。更新できないユーザーには、OpenSSH の設定でパスワードベースの認証を無効にし、鍵認証を設定するよう勧めています。
単純な攻撃が成立する理由
この欠陥は、それぞれ別の問題を解決するために何年もの間隔を置いて行われた3つの変更が重なって生まれました。2012年、musl の開発者はパスワード長の上限を256バイトに設定しました。ログイン検証の過程でハッシュ化が必要になる長いパスワードを送りつけ、攻撃者がサーバーリソースを占有する事態を防ぐためです。
同時に、ライブラリのパスワードハッシュ関数が失敗した場合にはアスタリスク(*)を返すようにもしました。このアスタリスクは、Unix が1980年代から使ってきた記号と同じです。どのパスワードも一致してはならないアカウント、つまりシステムレベルでパスワードが無効化されたアカウントを示します。
2016年には、OpenSSH がパスワードの検証方法を変更しました。アカウント自体のパスワードフィールドにハッシュ化に使うソルトがない場合、別のアカウントのソルトを借用します。攻撃者がログインを繰り返し試し、サーバーの応答時間を測ることで、実在するユーザー名を推測されるのを防ぐためです。さらに2022年、Alpine は root の鍵による SSH ログインを維持できるよう、root のパスワードフィールドをアスタリスクに切り替えました。
このようなシステムで、攻撃者がパスワード無効化済みアカウントに過度に長いパスワードを送ると、ハッシュ化が失敗してアスタリスクが返ります。sshd はこれをアカウントのパスワードフィールドに保存されたアスタリスクと比較します。両者が一致するため、ログインが成功してしまいます。
主な標的は Alpine Linux のクラウドイメージ
Alpine 標準の OpenSSH パッケージは PAM なしでビルドされており、パスワードログインもデフォルトで有効です。そのため、Alpine サーバーは初期状態で条件を満たします。バージョン 3.18.11 から 3.24.3 の間に公開された公式クラウドイメージでは、alpine という名前のデフォルトユーザーアカウントがパスワード無効化アカウントの一つで、パスワードなしの「doas」権限が付与されています。
その結果、このユーザーとしてログインした攻撃者は root に切り替えられます。この攻撃が成立するには、実際のパスワードを持つ正規のアカウントが存在する必要があります。そのため、管理者がシステム上の任意のアカウントにパスワードを設定した時点で、イメージは危険にさらされます。
2024年の深刻な regreSSHion の欠陥とは異なり、今回の問題は musl 環境に限られます。ただし、エクスプロイトの作り込みはまったく必要ありません。
Knott 氏は次のように述べています。「インターネットに公開された SSH サーバーには、すでに24時間体制でパスワード推測やブルートフォース攻撃が浴びせられています。この脆弱性の悪用とは、同じ攻撃者がブルートフォースのリストに非常に長いパスワードの試行を加えるだけのことです。週末までに、SSH のブルートフォースツールがこの手口を試す様子が確認されなければ、私たちは大いに驚くでしょう」
組織は、この欠陥がすでに自社のサーバーに対して悪用されていないかどうかも確認すべきです。root、鍵認証のみのユーザー、デフォルトの alpine ユーザーなど、パスワードを持たないアカウントについて /var/log/messages に「Accepted password」のエントリがあれば、侵害を強く示唆します。
Alpine は、公開状態のマシンで doas の使用状況、最近作成されたユーザー、ファイルを調べるよう勧めています。また、ログインがなかったと断定できないサーバーはすべて侵害されたものとして扱うべきだとしています。Kultekin 氏は、公開状態のサーバーを特定して危険なアカウントを一覧表示するチェック用スクリプトを GitHub で公開しています。