OpenSSH 10.6p2、Alpine Linuxのパスワード回避の脆弱性を修正
OpenSSH 10.6p2とAlpine Linux(アルパイン・リナックス)は11月5日、パスワードなしでSSHログインできる不具合を修正しました。Tech AI Wireが5つのAlpineイメージで、影響を受ける条件を確かめました。
4 分で読めます
英語の原文から機械翻訳したものです。原文はClaire Whitmoreが事実確認と編集を行いました。内容に相違がある場合は英語版が優先されます。 編集方針

数字で見る
- バイト:回避が通るパスワードの長さ
- 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.21 | 3.21.9(10月21日) | 9.9_p2-r1 | 9.9_p2-r1 | OpenSSH_9.9p2 |
| 3.22 | 3.22.7(10月21日) | 10.0_p1-r11 | 10.0_p1-r11 | OpenSSH_10.0p2 |
| 3.23 | 3.23.7(10月21日) | 10.2_p1-r1 | 10.2_p1-r1 | OpenSSH_10.2p1 |
| 3.24 | 3.24.3(10月21日) | 10.3_p1-r2 | 10.3_p1-r2 | OpenSSH_10.3p1 |
| edge | 3.25.0_alpha20260805(8月6日) | 10.6_p2-r0 | 10.6_p2-r0 | OpenSSH_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チームは、当面はリリースの頻度を上げるとも述べています。
出典
- Security advisory: openssh-server password authentication bypass - Alpine Linux
- OpenSSH 10.6p2 release notes - OpenSSH
- sshhole - sshhole.com
- Critical OpenSSH Flaw Could Let Attackers Bypass Password Authentication on Alpine Linux Servers - Cyber Security News
- Alpine Linux 3.21.10, 3.22.8, 3.23.8 and 3.24.4 Patches Critical SSH Password Bypass - Linux Compatible
関連記事

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

OpenSSH 10.6、ポスト量子署名を追加しリリースを高速化
10月6日に公開されたOpenSSH 10.6は、ポスト量子(post-quantum)署名方式を追加し、LZ77圧縮をオフにしました。AIによるバグ報告が殺到するなか、修正をより早く届けると約束しています。

gzip 1.15、誤ったファイルを削除する競合状態を修正
gzip 1.15は75週間分の119コミットを取り込んだ。誤ったファイルを削除しうる競合状態(レースコンディション)と、.lzh展開時のバッファオーバーフローを修正している。