rootは取られていない、しかしSSHホスト鍵と/etc/shadowは漏れた|CVE-2026-46333(ssh-keysign-pwn)の正体と運用手順

HOMEリナックスマスター.JP 公式ブログLinux情報・技術・セキュリティ > rootは取られていない、しかしSSHホスト鍵と/etc/shadowは漏れた|CVE-2026-46333(ssh-keysign-pwn)の正体と運用手順
宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「rootを取らずに、rootのファイルを読まれる」

そう聞かされた瞬間、頭の中で「うちのサーバーで誰か一般アカウントを取られていたら、もう ssh のホスト鍵も /etc/shadow も漏れている」という絵が浮かびました。

2026年5月14日、Qualys Threat Research Unit が Linux カーネルの脆弱性を security@kernel.org に報告し、同日中に Linus Torvalds が修正コミット 31e62c2ebbfd を mainline に push しました。翌5月15日に CVE-2026-46333 として採番、各 stable 系列でも修正版が公開されています。公開エクスプロイトの呼称は「ssh-keysign-pwn」。

やっかいなのは、これが「rootを取られる」タイプの脆弱性ではないことです。攻撃者は root にはなりません。ですが ssh のホスト秘密鍵を読まれ、/etc/shadow を読まれます。実害として「root を取られた」と何が違うのか、と問われると、答えに詰まる程度には深刻です。本稿では現役のサーバー管理者の視点で、今週中に本番機で何を確認・実行すべきかを書きます。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

ssh-keysign-pwn(CVE-2026-46333)とは何か

3行でまとめると、こうなります。

・Linux カーネルの ptrace アクセスチェックに、プロセス終了処理のレース条件が残っていた
・終了中の SUID-root プロセスから、非特権ユーザーがオープン済みファイル記述子(fd)を奪える
・標的は ssh-keysign(SSH ホスト秘密鍵を読む)と chage(/etc/shadow を読む)

公式情報の整理は以下のとおりです。

・CVE番号: CVE-2026-46333
・通称: ssh-keysign-pwn(公開された2つのエクスプロイトのうち1つの名称が定着)
・報告者: Qualys Threat Research Unit(security@kernel.org 経由)
・公開日: 2026-05-14(Qualys 開示・Linus mainline push) / 2026-05-15(CVE 採番・各 stable 系列でパッチ公表)
・mainline 修正コミット: 31e62c2ebbfd
・CVSS: NVD は2026-05-18時点で「assessment not yet provided」(未評価)
・NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-46333

攻撃の前提は「同じUIDで動く非特権プロセスが既にホスト上に存在すること」です。SSH 総当たり、Web 経由 RCE、委託作業者の作業端末経由、入口は何でもあり得ます。そこから root に直接昇格はしませんが、ssh ホスト鍵と /etc/shadow を抜かれます。

ssh ホスト秘密鍵を抜かれたサーバーは、別ホストからの中間者攻撃に対する暗号学的な安全性を完全に失います。/etc/shadow を抜かれたサーバーは、オフラインで root を含む全ユーザーのパスワードハッシュ解析にかけられます。「rootは取られていません」と説明できても、影響範囲としてはローカルrootと差がない、というのが現場の感覚です。

なぜ ptrace の競合で root の fd が奪えるのか

ここは技術的な話を書きます。読まなくても運用は回せますが、「なぜこれが直しにくいバグだったのか」を理解しておくと、似たクラスの脆弱性が今後出たときに早く動けます。

Linux カーネルでプロセスが終了するとき、do_exit() というコードパスを通ります。順序は次のとおりです。

・exit_mm() … メモリ記述子(task の mm ポインタ)を切り離して NULL にする
・exit_files() … fd テーブルを閉じる

mm が先に消え、その後で fd が閉じられます。この「mm はもう NULL なのに fd はまだ生きている」窓が、ほんの一瞬ですが存在します。

一方、__ptrace_may_access() という関数があり、ある task に対する ptrace 系操作の可否を判定しています。判定要素のひとつに「dumpable」(ダンプ可能か)チェックがあり、SUID 昇格直後のプロセスは原則として非特権ユーザーから dumpable ではない、という設計です。ところが、このチェックは「task の mm が NULL のときは省略する」実装になっていました。背景は「mm がないカーネルスレッドはdumpable概念が当たらない」程度の意図だったようです。

ここに pidfd_getfd(2) が組み合わさります。Linux 5.6 で導入された比較的新しいシステムコールで、pidfd 経由で他プロセスの fd を自プロセスにコピーできます。内部的に ptrace_may_access() を呼ぶので、上の dumpable チェックの抜けがそのまま効いてきます。

結果として、攻撃者は次の流れで rootオーナーの fd を抜けます。

・同一UIDで動くSUID-rootバイナリ(ssh-keysignやchage)が起動・終了するタイミングを狙う
・ターゲットが終了処理に入り mm == NULL になった、ごく短い窓を pidfd_getfd で叩く
・「mm が NULL だから dumpable チェックは省略」というロジックで素通り、root所有の fd がコピーされる
・コピーした fd を read() で読むと、ssh_host_*_key や /etc/shadow が手に入る

攻撃成功確率は1回あたりは低いものの、Qualysと複数の解析記事の報告では100~2000回のリトライで実用的に成立するとされています。乱数頼みのレースですが、ループで回せばよいので「ほぼ確実に踏める」と考えるべきです。

ちなみに同種の修正案は2020年に Jann Horn 氏が提出していました。当時はマージされず、6年近く放置されてきたバグです。AI 監査ツールの台頭で「眠っていた未マージパッチが掘り起こされる」事案が、ここ1か月で4本目(Copy Fail → Dirty Frag → Fragnesia → ssh-keysign-pwn)。受講生に「現場の感覚として、これは続きますか」と聞かれて、続きますとしか答えられませんでした。

PR / カーネル内部を理解したい方へ

絵で見てわかるLinuxカーネルの仕組み 市川 正美・大岩 尚宏・島本 裕志・武内 覚 ほか / 翔泳社 / 2023年

ptrace・プロセス終了処理・SUID といったカーネル内部の挙動を、図解で押さえたい方向け。今回の exit-race のような「なぜそうなるのか」を腹落ちさせる土台になります。

影響を受けるディストロと修正カーネル一覧

「うちは大丈夫だろう」と思っているサーバーが、ほぼ確実に該当します。歴史的混入が古く、上流の stable 系列でも 5.10 以降は基本影響圏内です。各ディストロが2026-05-15~17に出した修正状況をまとめます。本番に当てる前には、必ず各ディストロ公式のセキュリティ通告で最新状態を再確認してください。

系列・ディストリ 修正済の最初のバージョン(出典の主張)
mainline commit 31e62c2ebbfd(2026-05-14 Linus push)
stable 5.10系 5.10.256
stable 5.15系 5.15.207
stable 6.1系 6.1.173
stable 6.6系 6.6.139
stable 6.12系 6.12.89
stable 6.18系 6.18.31
stable 7.0系 7.0.8
Debian 11 bullseye linux 5.10.251-5(fixed)
Debian 12 bookworm linux 6.1.172-1(fixed)
Debian 13 trixie linux 6.12.88-1(fixed)
AlmaLinux 8 kernel-4.18.0-553.124.4.el8_10(ALSA-2026:A008、公開PoCでは再現しないが脆弱性は存在)
AlmaLinux 9 kernel-5.14.0-611.54.6.el9_7(ALSA-2026:A009)
AlmaLinux 10 kernel-6.12.0-124.56.5.el10_1(ALSA-2026:A010)
Ubuntu 22.04 / 24.04 / 26.04 影響あり、執筆時点で USN 番号は未確定。Ubuntu Security Notices で随時確認
RHEL / SUSE / Oracle Linux 各ベンダー公式アドバイザリで最新状況を確認(access.redhat.com / suse.com)
LTS を真面目に使っているほど、走っているカーネルは 5.15 / 6.1 / 6.6 のどこかに該当する可能性が高いです。Ubuntu 22.04 / 24.04 LTS、Debian 12、AlmaLinux 9、Rocky 9、いずれも影響圏内と考えてください。「公開PoCで再現しない」と書かれていても、それは攻撃が成立しないという意味ではなく、ロジック自体に欠陥が残っているということです。パッチ自体は当てる前提で組みます。

自社サーバーが踏むか確認する3コマンド

長い話を読んでもらった後で恐縮ですが、これは今日中に済ませてほしい確認です。所要時間は1台あたり1~2分です。

1. uname -r で現行カーネルを確認する

まず走っているカーネルのバージョンです。

$ uname -r 6.1.0-21-amd64

この出力を、前セクションの修正済バージョン表と突き合わせます。Debian 系であれば apt changelog linux-image-$(uname -r) で「CVE-2026-46333」をgrepするのが確実です。

$ apt changelog linux-image-$(uname -r) 2>/dev/null | grep -i "CVE-2026-46333"

ヒットしなければ未対応カーネルが走っています。RHEL 系は rpm -q --changelog kernel | grep -i "CVE-2026-46333" で同様に確認できます。

2. pidfd_getfd の利用状況とSUID-rootバイナリを把握する

攻撃の中心は pidfd_getfd(2) と SUID-root バイナリです。両方の実態をまず把握します。

# システム上のSUID-rootバイナリを一覧 $ sudo find / -xdev -perm -4000 -uid 0 -type f 2>/dev/null # ssh-keysign と chage の存在・SUID設定を確認 $ ls -l /usr/lib/openssh/ssh-keysign /usr/bin/chage 2>/dev/null

ssh-keysign は HostbasedAuthentication(ホストベース認証)でしか使わないため、ホストベース認証を使っていない環境では SUIDを外しても実害は小さいです。chage はパスワード有効期限を一般ユーザーが自分で確認するのに使うので、SUIDを外すと一般ユーザーの chage -l が壊れます。

3. ptrace_scope の現状値を確認する

緩和策の中心となる Yama の ptrace_scope を確認します。

$ sysctl kernel.yama.ptrace_scope kernel.yama.ptrace_scope = 1

意味は次のとおりです。

・0: 何でもアタッチ可(古い動作)
・1: 親子関係があるプロセスにのみアタッチ可(Ubuntu / Debian の標準)
・2: root のみアタッチ可
・3: 誰もアタッチ不可(再起動するまで戻せない)

標準の 1 は今回の攻撃を完全には防げません。後述の緩和策で 2 または 3 への引き上げを検討します。

当日打てる緩和策

恒久対策はカーネル更新と再起動です。これは前提として、再起動枠が即決できない本番機で当日打てる手を、優先順に3つ並べます。

1. ptrace_scope=2 で運用に最小影響

ptrace を root のみに制限します。一般ユーザーの gdb -p / strace -p は壊れますが、root の調査作業は引き続き使えます。

$ sudo sysctl -w kernel.yama.ptrace_scope=2 $ echo 'kernel.yama.ptrace_scope = 2' | \ sudo tee /etc/sysctl.d/99-cve-2026-46333.conf

設定ファイルに書いておけば、再起動後も維持されます。/etc/sysctl.d/99-cve-2026-46333.conf という名前にしておくと、後で「あの脆弱性対応で入れた設定」と分かって剥がすときに迷いません。

2. ptrace_scope=3 で完全停止(最も強い手)

業務上 ptrace を一切使っていない本番DBサーバー、配信サーバーなど、ptrace を切り捨ててよい環境は 3 まで上げきります。

$ sudo sysctl -w kernel.yama.ptrace_scope=3

ptrace_scope=3 は一度上げると、再起動するまで戻せません。これは仕様で、攻撃者が root 権限を奪っても戻せない、という保険の設計です。私自身は本番のフロントWebサーバーには 3 を選びました。ステージングや踏み台では 2 で運用しています。

3. ssh-keysign の SUID 除去(限定環境のみ)

HostbasedAuthentication を使っていない環境では、ssh-keysign の SUID を外しておくと攻撃の標的のひとつを潰せます。

# 現状確認 $ stat -c '%a %n' /usr/lib/openssh/ssh-keysign # SUID除去(4755 → 0755) $ sudo chmod u-s /usr/lib/openssh/ssh-keysign # /etc/ssh/sshd_config で HostbasedAuthentication が no になっていることを確認 $ sudo sshd -T | grep -i hostbased

HostbasedAuthentication yes になっている環境では、絶対に外さないでください。鍵交換が壊れて該当ホスト経由のログインが落ちます。chage 側は SUID を外すと一般ユーザーの chage -l が壊れるので、こちらは原則として触らない方が運用上は安全です。

恒久対策と再起動運用

ここまでの緩和策は時間稼ぎです。本筋はカーネル更新と再起動。各ディストロでのコマンドを並べます。

# Debian / Ubuntu $ sudo apt update $ apt list --upgradable 2>/dev/null | grep linux-image $ sudo apt install --only-upgrade linux-image-generic linux-headers-generic # RHEL / Rocky / AlmaLinux $ sudo dnf clean metadata $ sudo dnf check-update kernel $ sudo dnf upgrade kernel kernel-core # Amazon Linux 2023 $ sudo dnf update kernel # 再起動 $ sudo reboot

新しいカーネルがインストールされた時点では、メモリ上はまだ旧カーネルが走っています。再起動して初めて新カーネルに切り替わる、というのは Linux 運用の基本ですが、緊急対応では飛ばしがちな点です。再起動後に uname -r で目的のバージョンに切り替わっていることを必ず目視してください。

再起動枠が四半期に1回しか取れない本番機には、Ubuntu Pro の Livepatch、RHEL の kpatch、SUSE の kGraft といった無停止カーネル更新の導入を真面目に検討する時期だと思います。私自身、今回 Livepatch を入れていた本番1台と、入れていなかった本番3台で対応スピードに大きな差が出ました。受講生に「Livepatch は課金して元が取れますか」と聞かれたら、最近は「今回のような緊急対応が年1本でもあれば十分に元が取れます」と答えています。

あと、構造的な学びとして、SUID-root バイナリの棚卸しを年に1度はやる運用に格上げすべきです。ssh-keysign や chage は攻撃の入口として浮上した、というだけで、SUID-root バイナリは他にも多数あります。/usr/bin/passwd、/usr/bin/sudo、/usr/bin/mount。これらが本当にすべて必要かどうかは、業務環境次第で答えが変わります。「とりあえずデフォルトのまま」のSUIDが、こうした脆弱性が出るたびに延々と効いてきます。

ssh-keysign-pwn は「6年放置されていたバグが2026年に掘り起こされた」事例です。Copy Fail、Dirty Frag、Fragnesia と合わせて、ここ1か月で4本目。AI 監査ツールによる「眠っていたバグの掘り起こし」が常態化する前提で、運用ルール側で再起動の頻度・無停止更新・SUID棚卸しを組み直す。脆弱性が出てから動くのではなく、出る前提で組む。これがこの1か月の総括だと思います。

参考

・NVD CVE-2026-46333: https://nvd.nist.gov/vuln/detail/CVE-2026-46333
・Debian Security Tracker: https://security-tracker.debian.org/tracker/CVE-2026-46333
・AlmaLinux 公式アドバイザリ: https://almalinux.org/blog/2026-05-15-ssh-keysign-pwn-cve-2026-46333/
・CloudLinux 技術解説: https://blog.cloudlinux.com/ptrace-exit-race-cve-2026-46333-mitigation-and-kernel-update
・Red Hat CVE ページ: https://access.redhat.com/security/cve/cve-2026-46333

PR / あわせて読みたい本

プロセス・ファイル記述子・SUID・ptrace といった「カーネルとユーザー空間の境界」を、コードを書きながら身につけたい方向けの2冊。脆弱性報告を「自分の言葉で読める」レベルに引き上げる土台になります。

「脆弱性が出るたびに走り回る運用」から卒業したい方へ

uname -r、apt changelog、sysctl ptrace_scope、SUID棚卸し。記事を読むだけでなく、検証機で繰り返し手を動かすことで初めて身につきます。
ネットの切れ端の情報を集めるのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。


Linux無料マニュアル(図解60P) 名前とメールで30秒登録