本文へスキップ

OpenSSH 10.6p2、Alpine Linuxのパスワード回避の脆弱性を修正

OpenSSH 10.6p2とAlpine Linux(アルパイン・リナックス)は11月5日、パスワードなしでSSHログインできる不具合を修正しました。Tech AI Wireが5つのAlpineイメージで、影響を受ける条件を確かめました。

著者

4 分で読めます

英語の原文から機械翻訳したものです。原文はClaire Whitmoreが事実確認と編集を行いました。内容に相違がある場合は英語版が優先されます。 編集方針

Alpine Linuxのセキュリティ勧告のスクリーンショット。openssh-serverのパスワード回避の影響を受ける条件として、パッケージ、PasswordAuthentication、パスワード欄が「*」のアカウントが並んでいる。
写真: Alpine Linux

数字で見る

バイト:回避が通るパスワードの長さ
257-1,024
研究者が試したログイン回数。挙動が違ったのはPAMなしのmuslだけ
17,600
修正パッケージが出たAlpineのリリース(edgeも含む)
3.16-3.24

Alpine LinuxとOpenSSHプロジェクトは2026年11月5日、修正を公開しました。一部のAlpineサーバーに、パスワードを知らなくてもSSHでログインできる不具合です。パスワードログインを有効にしたまま、Alpine標準のSSHサーバーを動かしている人は、今日中に更新して再起動するべきです。

Alpineのセキュリティ勧告によると、この欠陥は「接続は1回で済み、毎回成功し、再試行も要らない」ものです。報告したのはWakefieldのÖzgün Kültekin氏です。Alpineの公開時点でCVE番号は割り当てられておらず、どちらのプロジェクトも攻撃を確認していません。

パスワード回避の仕組み

不具合は、OpenSSHとmuslが接する部分にあります。muslは、Alpineがglibcの代わりに使う小さなCライブラリです。問題が起きるのは、SSHサーバーであるsshdがPAMなしで動くときだけです。PAMは、多くのLinuxディストリビューションが使う共通のログインの仕組みです。

PAMがない場合、sshdはパスワードの入力をcrypt()でハッシュにします。そして、その結果を/etc/shadowにあるアカウントの記録と比べます。Alpineの説明では、muslのcrypt()は256バイトを超える鍵に対し、エラーとして*を返します。パスワードのないアカウントには、同じ*が保存されています。そのため、257~1,024バイトのパスワードが「一致」してしまいます。使えるソルトがないアカウントは、別のアカウントのソルトを借ります。ソルトとは、ハッシュを一つずつ違うものにするランダムな文字列です。このため、ローカルアカウントの1つに本物の$5$または$6$のハッシュが必要になります。

OpenSSH 10.6p2のリリースノートは、この更新を「重大なセキュリティ上の回避策」と呼び、根本原因は「sshdの外」にあるとしています。これは、10月にポスト量子署名を加えて公開されたOpenSSH 10.6に続くリリースです。

Kültekin氏の解説は、この不具合を「sshhole」と名付け、2012年8月のmuslの2つのコミットまでさかのぼっています。約17,600回の試験ログインのうち、挙動が違ったのはPAMなしのmuslだけでした。解説はOpenWrt、Buildroot、Yoctoの名前も挙げています。AlpineとOpenSSHは、これらに触れていません。

Alpineの勧告による影響範囲

影響を受けるのは、次の4つの条件がすべてそろったときだけです。

  • sshdが、PAMなしでビルドされたopenssh-serverか、UsePAM noのopenssh-server-pamから来ている。
  • PasswordAuthenticationが既定のyesである。
  • パスワード欄が*のアカウントがある。例はroot、鍵だけで使うユーザー、sssdから来るディレクトリのユーザーです。
  • ローカルアカウントの1つ以上に$5$または$6$のハッシュがある。

sshdを動かしていないコンテナは安全です。!が付いたロック済みのアカウントも安全です。既定のPermitRootLogin prohibit-passwordは、rootのパスワードログインを止めます。ただし、doasでrootになれるアカウントは守れません。Alpineのtiny-cloudイメージの3.18.11から3.24.3は、そうしたalpineユーザーを、*とパスワード不要のdoas付きで出荷しています。

検証:5つのAlpineイメージと既定の設定

Tech AI Wireは11月5日、macOS 26.6.2とDocker 28.4.0で検証しました。公式のalpineイメージに、Alpineの現在のミラーからopenssh-serverを入れました。

ブランチイメージのリリース(ビルド日)入ったパッケージAlpineの修正版sshd -V
3.213.21.9(10月21日)9.9_p2-r19.9_p2-r1OpenSSH_9.9p2
3.223.22.7(10月21日)10.0_p1-r1110.0_p1-r11OpenSSH_10.0p2
3.233.23.7(10月21日)10.2_p1-r110.2_p1-r1OpenSSH_10.2p1
3.243.24.3(10月21日)10.3_p1-r210.3_p1-r2OpenSSH_10.3p1
edge3.25.0_alpha20260805(8月6日)10.6_p2-r010.6_p2-r0OpenSSH_10.6p2

大事な結果は4つです。

  • 新しく入れれば修正版が入るが、イメージは修正より古い。 どのイメージも、修正済みの3.21.10、3.22.8、3.23.8、3.24.4より前のリリースを示します。安定版のブランチは古いOpenSSHのバージョンのまま修正を含んでいます。確認するのはsshd -Vではなく、パッケージのリビジョンです。
  • 既定の設定で3つの条件がそろう。 5つすべてがPasswordAuthentication yesで、root:*を持っています。3.24では、既定のsshdはUsePAM yesを「Unsupported option」として拒みました。openssh-server-pamパッケージの別プログラムsshd.pamは、3.21と3.24でusepam noのままでした。
  • 新しいイメージは4つ目の条件を満たさない。 誰かがパスワードを設定するまで、$5$や$6$のハッシュを持つアカウントはありません。chpasswdを1回実行すると、$6$のハッシュが書き込まれました。
  • 鍵だけのユーザーを使えるようにすると、*のアカウントができる。 3.24では、adduser -D appuserは!を書き込み、sshdはその鍵を拒みました。メッセージは「User appuser not allowed because account is locked」です。BusyBoxのpasswd -uでは!が残りました。usermod -p '*'を実行すると、鍵でのログインが通りました。

Alpineサーバーの確認と修正の方法

3つのコマンドで、サーバーの状態がわかります。3.24での検証結果は次の通りです。

$ apk list -I "openssh-server*"
openssh-server-10.3_p1-r2 aarch64 {openssh} (SSH-OpenSSH) [installed]
openssh-server-common-10.3_p1-r2 aarch64 {openssh} (SSH-OpenSSH) [installed]
$ sshd -T | grep -i passwordauthentication
passwordauthentication yes
$ awk -F: '$2=="*" {print $1}' /etc/shadow
root

パッケージが表の修正版より古ければ、更新が必要です。Alpineは、サポートが終わった3.16から3.20のブランチも修正しました。apk upgrade -U -aを実行し、次にrc-service sshd restartを実行します。勧告は「パッケージを更新するだけでは、動いているデーモンは置き換わらない」と注意しています。

すぐに更新できない場合、Alpineの回避策は/etc/ssh/sshd_config.d/00-no-passwords.confというファイルを作ることです。中身はPasswordAuthentication noです。先に鍵でログインできることを確かめ、今のセッションは開いたままにします。検証では、このファイルで3.21と3.24のsshd -Tがyesからnoに変わりました。そのあと、/var/log/messagesで、パスワードのないアカウントへの「Accepted password for」を探します。

開発者にとっての意味

Dockerfileでopenssh-serverを検索してください。CIランナーやリモート開発のためにsshdを動かすイメージが対象です。docker build --pull --no-cacheで作り直せば、11月5日より前にキャッシュされたレイヤーが古いパッケージを持ち込むことはありません。

鍵だけで足りるAlpineマシンでは、PasswordAuthentication noを既定にしてください。Alpineは、更新するかパスワードログインを止めれば「穴はふさがる」としています。検証は、この設定が大事な理由を示しています。鍵だけのユーザーをログインできるようにする普通の手順が、この不具合に必要な*のアカウントを作るのです。

CVE番号と、OpenWrt、Buildroot、Yoctoの発表を見守ってください。どのビルドが影響を受けるかが焦点です。OpenSSHチームは、当面はリリースの頻度を上げるとも述べています。

出典

  1. Security advisory: openssh-server password authentication bypass - Alpine Linux
  2. OpenSSH 10.6p2 release notes - OpenSSH
  3. sshhole - sshhole.com
  4. Critical OpenSSH Flaw Could Let Attackers Bypass Password Authentication on Alpine Linux Servers - Cyber Security News
  5. Alpine Linux 3.21.10, 3.22.8, 3.23.8 and 3.24.4 Patches Critical SSH Password Bypass - Linux Compatible

関連記事

A rack-mounted server with blinking status lights in a small server room, a laptop with an orange GitLab tanuki sticker on its lid open on a cart in front of it.
開発ツール

GitLabのCVE-2026-97229:Alpineが悪用の試みを報告

Alpine Linuxは、10月20日から21日にかけて、同プロジェクトのGitLab(ギットラボ)サーバーでCVE-2026-97229の悪用が試みられたと発表しました。GitLabのアップグレードだけでは直りませんでした。修正パッチはRuby(ルビー)の側にあります。