セキュリティ研究者のOzgun Kultekin氏は、OpenSSHプロトコルにおける新しい脆弱性を明らかにしました。「*sshole」と名付けられたこの脆弱性は、パスワードによるログインを防止するように特別に設定されたLinuxアカウントへのログインを攻撃者に許可するものです。この脆弱性は、特にmusl Cライブラリに依存するシステムで顕著であり、Alpine LinuxやOpenWrtなどの有名なディストリビューションを危険にさらしています。
脆弱性の技術的な仕組み
Linuxシステムにおける従来の保護策は、パスワードによるログインを防ぐために、/etc/shadowファイル内のパスワードハッシュをアスタリスク(*)に置き換えることに依存しています。2016年に発生したユーザー名列挙(Username Enumeration)の脆弱性を回避するため、OpenSSHの開発者は、アカウントの状態に関わらずサーバーが統一した応答を返すように、有効なハッシュを持たないアカウントに対してもハッシュ化処理を行うようシステムを修正しました。
問題は、musl Cライブラリ、特にcrypt()関数が、ハッシュ化プロセスに失敗した際にアスタリスク(*)を値として返すことです。これは、入力されたパスワードの長さが256バイトを超えた場合に発生します。これにより、誤った試行から得られた値が無効化されたアカウントの/etc/shadowに保存されている値と一致してしまい、OpenSSHを欺いてログインを許可させてしまいます。
なぜこのニュースが重要なのか?
真の危険性は、この脆弱性がクラウドコンピューティング環境において完全なルート(Root)権限へのアクセスにつながる可能性があることです。研究者は、AWSやAzureプラットフォームで使用される公式のAlpine Linuxイメージには、パスワードなしでdoas権限を持つ「alpine」という名前のデフォルトアカウントが含まれており、攻撃者がこの脆弱性を悪用してサーバーを完全に制御できる可能性があると警告しています。
悪用の条件と影響を受けるシステム
この脆弱性はすべてのシステムに影響を与えるわけではありません。glibcライブラリに依存するシステム(Debian、Ubuntu、Fedoraなど)や、PAM認証を使用しているシステムは安全なままです。悪用に成功するには、以下の条件を満たす必要があります:
- muslライブラリを使用するシステム(Alpine Linux、OpenWrt、Buildroot、またはYoctoなど)でOpenSSHが動作していること。
- PAM認証が無効化されていること(これはAlpine Linuxのopenssh-serverパッケージにおけるデフォルト設定です)。
- SSH設定でパスワード認証(Password Authentication)が有効になっていること。
- アスタリスク(*)を使用してパスワードが無効化されたアカウントが少なくとも1つ存在すること。
保護と確認方法
OpenSSHの開発者は、この脆弱性を最終的に解決するバージョン10.6p2をリリースしました。システム管理者は、直ちにOpenSSHパッケージを更新することをお勧めします。即時の更新が不可能な場合は、設定ファイルでPasswordAuthentication noに設定してパスワード認証を無効にし、サービスを再起動することでリスクを軽減できます。
システムが侵害されている可能性を確認するには、Alpine Linuxで次のコマンドを使用して、無効であるはずのアカウントへのログイン成功の有無を認証ログで確認できます:
grep "Accepted password" /var/log/messages