
2026/11/05 23:44
アルパイン Linux セキュリティ情報:OpenSSH サーバーパスワード認証バイパスの脆弱性
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
OpenSSH の重大なセキュリティ欠陥は、Alpine Linux リリース 3.16 から 3.24、および旧版のサポート終了済みエディションに影響し、デフォルトのクラウドイメージや標準のキーのみユーザーも含まれます。この脆弱性により、PAM を使用せずにシステムが構築されている場合(
UsePAM no)で、「*」(または空欄/非常に長いパスワードフィールド)を持つアカウントと、少なくとも SHA-256 ($5) または SHA-512 ($6) を使用する 1 つのアカウントがペアになっている場合、攻撃者はパスワードなしでログインできます。根本原因は、保存されたパスワードフィールドが短すぎる場合、システムが別のアカウントの塩(salt)を再利用する論理エラーであり、これにより crypt() 関数が空のパスワードフィールドに対して攻撃者が提供する長い文字列を誤って一致させることになります。この攻撃は単一の接続で、最小限のネットワークトラフィックで成功します。
影響を受けるシステムには、PAM を使用せずに
openssh-server または openssh-server-pam を実行するものがあり、UsePAM yes、パスワード認証が無効化されている(PasswordAuthentication no)、またはアカウントがロックされている(/etc/shadow の「!」)システムは影響を受けません。脆弱なユーザーには通常、「root」アカウント(ログインが許可されている場合)、adduser または usermod -p '*' で作成されたキーのみユーザー、musl-nscd を通じてディレクトリサービスから来るユーザー、および公式の tiny-cloud イメージ内の alpine ユーザーが含まれます。
組織は即座に脆弱なパッケージをパッチ適用済みバージョン(edge では
10.6_p2-r0、stable ブランチでは特定のリリース;例:3.16 用は 9.0_p1-r6 から 3.24/edge 用までの 10.6_p2-r0)にアップグレードする必要があります。アップデートが不可能な場合、管理者は /etc/ssh/sshd_config.d/00-no-passwords.conf を作成し、/etc/ssh/sshd_config を修正してパスワード認証を無効化し、sshd を再起動するべきです。専門家らは、root アカウントを侵害される前に積極的な搾取試みを検出するために、システムログ(例:/var/log/messages)を監視し、「Accepted password」のエントリを確認することを推奨しています。この脆弱性は OpenSSH 10.6p2 で修正され、stable ブランチにバックポートされました。報告当時、CVE ID は割り当てられていませんでした。クレジットは Özgün Kültekin(発見者)、Damien Miller と Darren Tucker(修正/リリース)、Timo Teräs(分析)、Natanael Copa(パッケージビルド)にいきます。本文
Alpine Linux OpenSSH 脆弱性情報 (CVE 未割り当て)
🚨 重要:対応の必要性
Alpine Linux で
sshd を運用されている場合は、必ず以下の対応を実施してください。
- 推奨:
パッケージを最新へアップデートし、openssh-server
を再起動する。sshd - 代替案: アップデートが不可能な場合でも、パスワード認証を無効化すること(脆弱性の解消となる)。
🔍 問題の説明
攻撃者が SSH ポートにアクセスできれば、パスワードを知らずにログインできる可能性がある深刻な脆弱性です。
- 即座の突破: パスワードフィールドに
が設定されているアカウントが 1 つあれば十分。* - 攻撃手法:
- 攻撃者はパスワードを持たないアカウント(例:
)と、マシン上の他のアカウント(ハッシュ付き)を照合する。root:* - ユーザーが設定しているパスワード(最大 1024 バイト)を送信し、すべての
パスワードを持つアカウントに対して即座にログイン成功させる。*
- 攻撃者はパスワードを持たないアカウント(例:
- 現状: 脆弱性識別番号 (CVE ID) はまだ割り当てられていません。詳細は OpenSSH 10.6p2 リリースノート を参照ください。
🎯 影響を受ける範囲
以下の条件すべてを満たすシステムが影響を受けます。
- PAM 設定:
- PAM を使用していない (
に/etc/ssh/sshd_config
または指定なし) の場合。UsePAM no
を使用しているが、openssh-server-pam
と指定している場合。UsePAM no- (※
の場合は影響を受けません)UsePAM yes
- PAM を使用していない (
- 認証設定:
になっている場合(デフォルト値)。PasswordAuthentication yes - パスワードフィールド:
が設定されているアカウントが存在する場合:*- root ユーザ: Alpine 3.16 以降のベースイメージに初期状態で含まれています。
の場合、root アクセスは制限されますが、他ユーザーから root に昇格可能な場合には不十分です。PermitRootLogin prohibit-password
- キー認証用ユーザ:
でパスワードなしで作成、またはadduser
を使用したユーザ。usermod -p '*' - ディレクトリサービス連携:
(nslcd, winbind, sssd 等) 経由で提供され、shadow エントリを持たないユーザ。musl-nscd - 公式 tiny-cloud イメージ:
ユーザ。alpine
- root ユーザ: Alpine 3.16 以降のベースイメージに初期状態で含まれています。
- 要件: マシン上に少なくとも 1 つのローカルアカウントが
または$5
形式のパスワードハッシュを持っていること。$6
✅ 影響を受けないシステム
以下の条件のいずれかを満たす場合は、影響を受けません。
- コンテナ環境で sshd を起動していない場合 (Docker 等)。
に設定されている場合。PasswordAuthentication no
で動作しているUsePAM yes
の場合。openssh-server-pam
のパスワードフィールドに/etc/shadow
が記載され、ロックされているアカウントの場合。!- アカウントが
スタイルのパスワードハッシュを持っていない場合。$- - cloud-init 構成により
に書き込まれているクラウドイメージ。PasswordAuthentication no
🔧 修正方法
1. パッケージアップデート (推奨)
以下のコマンドで最新版へのアップグレードを行います。
apk upgrade -U -a
アップデート後の必須動作: sshd を再起動してください。 パッケージ更新のみでは動作中のデーモンは更新されないため、手動での再起動が必須です。
rc-service sshd restart
修正済みバージョン情報
| ブランチ | OpenSSH バージョン | Alpine リリース |
|---|---|---|
| edge | | - |
| 3.24 | | 3.24.4 |
| 3.23 | | 3.23.8 |
| 3.22 | | 3.22.8 |
| 3.21 | | 3.21.10 |
| 3.20 | | - |
| 3.19 | | - |
| 3.18 | | - |
| 3.17 | | - |
| 3.16 | | - |
注釈: Alpine 3.21.10, 3.22.8, 3.23.8, 3.24.4 は修正済みパッケージをリリースしています。
2. アップデートができない場合:パスワード認証の無効化
アップデートできないシステム、サポート終了版などでは、
を設定してください。PasswordAuthentication no
⚠️ 安全対策: 変更前には、SSH キーによるログインが動作することを確認し、新しいテスト用セッションを開いておいてください。以下のコマンドは
で実行します。root
手順
- ドロップイン設定ファイルの作成:
Alpine 3.19 以降は
を優先的に読み込みます(以前は無視)。/etc/ssh/sshd_config.d - グローバル設定へのパッチ適用:
をすべてPasswordAuthentication yes
に変更し、行がない場合は先頭に追加します。no - 設定の検証と再起動:
# 1. ドロップインディレクトリ確保 mkdir -p /etc/ssh/sshd_config.d # 2. 新しい優先設定ファイルを作成 (パスワード認証禁止) echo 'PasswordAuthentication no' > /etc/ssh/sshd_config.d/00-no-passwords.conf # 3. グローバル設定から "yes" を全て "no" に置換 (Match ブロック内も対象) # または行が存在しない場合は先頭に追加し、バックアップも取る sed -i.bak -e '1i PasswordAuthentication no' \ -e 's/^\(\s*PasswordAuthentication[^y#]*\)yes/\1no/i' \ /etc/ssh/sshd_config # 4. 設定構文チェックとサービス再起動 sshd -t && rc-service sshd restart # 5. 設定確認 (出力が 'passwordauthentication no' であるべき) sshd -T | grep -i passwordauthentication
元に戻す方法
を削除。/etc/ssh/sshd_config.d/00-no-passwords.conf- バックアップファイルを元の設定に上書きコピー (
)。mv /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
🌩️ クラウドイメージ (tiny-cloud) への注意
公式 tiny-cloud イメージ (3.18.11 〜 3.24.3 など) は、起動直後は安全ですが、以下のいずれかの条件で脆弱性が発生します。
- 原因: 管理ユーザーがコンソールパスワードを設定したり、ハッシュ付きパスワードを持つユーザを追加した場合。
- リスク:
ユーザにalpine
doas` を通じた root 昇格が可能になります。$6$ ハッシュが設定されれば、攻撃者はシェル取得および
対応: 脆弱性のあるイメージ (3.21.10 以前など) で稼働している場合、全インスタンスでアップデートまたは認証無効化を即時に行ってください。
🔎 侵害の有無を確認する
/var/log/messages を確認し、以下のログを探す必要があります。
- パスワードを持たないアカウント (
,alpine
, キー認証用ユーザ) に対し、root
と表示されている行。Accepted password
の異常な使用状況。doas- 最近作成されたユーザやファイル。
- 変更された
。authorized_keys
ログ解析が困難で不確実な場合、そのマシンは侵害済みとして扱い、隔離・対応を行ってください。
🔬 技術的な原因
PAM を使用しない sshd ビルドにおける仕様により発生しました。
- ハッシュ化の仕組み: 入力されたパスワードを
(C ライブラリ) でハッシュ化し、保存フィールドと比較する。crypt() - ショートカット問題: 保存フィールドが短すぎる場合 (塩素/salt が足りない)、sshd は他のアカウントの塩を借用してハッシュ化する。
- musl の挙動:
libc のmusl
は、キー長が 256 バイトを超える場合にエラーとして文字列crypt()
を返す。* - 攻撃の隙間:
が設定されていない場合、このPasswordAuthentication no
がパスワードを持たないアカウント (*
など) のフィールドに一致し、ログイン成功する。root:*
OpenSSH 10.6p2 および上記の Alpine パッチはこの問題を回避しています。
🙏 クレジット
今回の脆弱性の発見および修正には以下の皆様への感謝を申し上げます。
- 報告者: Wakefield の Özgün Kültekin 氏
- 技術協力: OpenSSH プロジェクトの Damien Miller 氏、Darren Tucker 氏(パッチ作成・問題分析)
- パッケージビルド: Natanael Copa 氏(修正パッケージの構築・公開)