UK — The Register
過度に長いパスワードでmuslベースのLinuxシステムのrootを奪取
セキュリティ2分で読めます
musl libc を使う一部の Linux で、256バイトより長いパスワードを送ると、本来ログインできないアカウントに入られてしまう古い脆弱性が見つかりました。OpenSSH では修正済みです。
何が起きたのか
研究者の Özgün Kültekin 氏が、OpenSSH の脆弱性を見つけました。名前は「*sshole」です。条件がそろうと、攻撃者が root(管理者)の権限を得られる可能性があります。この問題は musl libc を使う Linux で、OpenSSH の sshd が PAM を使わず、パスワードログインを許可している場合に起きます。
押さえておきたい数字と事実
- 256バイトより長いパスワードが問題の入り口になります。
- 257〜1,024文字のパスワードで、パスワードを受け付けないはずのアカウントに入れる可能性があります。
- 対象のアカウントは、パスワード欄に「*」(アスタリスク)が入っている必要があります。
- この問題は2016年の OpenSSH の変更にさかのぼります。
なぜこうなったのか
昔の BSD Unix では、パスワード欄の「*」が『パスワードでは入れない』という印でした。musl libc の crypt() は、失敗時に NULL の代わりに「*」を返す設計です。さらに、musl は長いパスワードを 256 バイトで止めていました。OpenSSH は 2016 年に、存在しないユーザー名を見分けられないようにするため、ダミーのハッシュ計算を入れました。この二つが重なって、穴が生まれました。
なぜ重要なのか
musl libc は、組み込み機器や、Alpine Linux のクラウド用イメージで使われています。Alpine は AWS や Azure で公式イメージが提供されているため、その環境の一部は影響を受けるかもしれません。ただし、設定によります。古い問題でも、今も動いているサーバーには残っている可能性があります。
これから注目すべきこと
- OpenSSH の修正版を入れて、サーバーを更新しましょう。
- musl libc を使っているか、また sshd の設定を確認しましょう。
- パスワード欄が「*」のアカウントや、root へのログイン設定を見直しましょう。
用語解説
- OpenSSH
- 離れたコンピューターに安全につなぐためのソフトウェアです。
- musl libc
- Linux で使われる C 言語の基本ライブラリの一つです。軽くて小さいのが特徴です。
- PAM
- Pluggable Authentication Modules の略で、ログイン時の本人確認を組み立てる仕組みです。
- root
- Linux で、すべての操作ができる最高権限のアカウントです。
- Alpine Linux
- 小さく軽い作りの Linux ディストリビューションです。musl libc を標準で使います。
- crypt()
- パスワードをハッシュ(変換した値)にする関数です。ハッシュを作って、保存された値と比べます。