最近、sshhole.comというウェブサイトで強調されたセキュリティ上の発見により、musl Cライブラリの変更に起因する脆弱性が特定されました。Alpine LinuxのデフォルトCライブラリであるmuslライブラリは、`crypt()`関数の動作を変更しました。以前、この関数はエラーが発生した場合にNULLを返していました。しかし、更新された実装では、失敗時にNULLの代わりに単一の文字を返すようになっています。この変更は、NULLの返り値を適切にチェックしないプログラムに対応するために行われたと報告されていますが、特定の構成においてセキュリティリスクを引き起こします。

この動作は、特にPluggable Authentication Modules(PAM)を使用していないシステムに影響を与えます。これらの環境では、システムは`crypt()`関数の出力を保存されたパスワードハッシュと比較することでユーザーの認証を試行する場合があります。攻撃者が`crypt()`関数の失敗を引き起こすパスワードを提供した場合、関数は現在、単一の文字を返します。もしその文字が保存されたハッシュの最初の文字と一致した場合、認証チェックが成功する可能性があります。これは、ハッシュの最初の文字が予測可能なターゲットとなる長いパスワードを使用しているシステムにおいて特に重要です。Hacker Newsのコメントでは、多くのシステムが認証処理にPAMを使用している一方で、特定の構成、特にDockerコンテナ内では依然として脆弱である可能性があることが指摘されています。

この発見の実際的な影響は、Alpine Linux上に構築された膨大なDockerコンテナのエコシステムにおいて最も顕著です。これらのコンテナのうち、PAMなしでパスワード認証を有効にしたOpenSSHを実行しているのはごく一部かもしれませんが、Alpineベースのイメージの総数が膨大であるため、わずかな割合であっても多数の脆弱なターゲットが存在することを意味します。この問題を修正するために、ユーザーはSSH設定で`PasswordAuthentication=no`を設定してパスワード認証を無効にするか、システムを修正済みのバージョンにアップデートすることが推奨されます。この発見はまた、コアな暗号化関数において、muslの開発者が厳格なPOSIX標準の遵守よりも「利便性」を優先した決定に関する議論を巻き起こしています。