この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
そう聞かされた瞬間、頭の中で「うちのサーバーで誰か一般アカウントを取られていたら、もう 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 を取られた」と何が違うのか、と問われると、答えに詰まる程度には深刻です。本稿では現役のサーバー管理者の視点で、今週中に本番機で何を確認・実行すべきかを書きます。
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
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) |
自社サーバーが踏むか確認する3コマンド
長い話を読んでもらった後で恐縮ですが、これは今日中に済ませてほしい確認です。所要時間は1台あたり1~2分です。1. uname -r で現行カーネルを確認する
まず走っているカーネルのバージョンです。$ uname -r 6.1.0-21-amd64
$ apt changelog linux-image-$(uname -r) 2>/dev/null | 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
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
2. ptrace_scope=3 で完全停止(最も強い手)
業務上 ptrace を一切使っていない本番DBサーバー、配信サーバーなど、ptrace を切り捨ててよい環境は 3 まで上げきります。$ sudo sysctl -w kernel.yama.ptrace_scope=3
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
恒久対策と再起動運用
ここまでの緩和策は時間稼ぎです。本筋はカーネル更新と再起動。各ディストロでのコマンドを並べます。# 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
再起動枠が四半期に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 / あわせて読みたい本
- Linuxカーネルプログラミング 第2版 Kaiwan N. Billimoria 著 / 武内 覚・大岩 尚宏 監訳 / オライリー・ジャパン / 2024年
- ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道 青木 峰郎 / SBクリエイティブ / 2017年
プロセス・ファイル記述子・SUID・ptrace といった「カーネルとユーザー空間の境界」を、コードを書きながら身につけたい方向けの2冊。脆弱性報告を「自分の言葉で読める」レベルに引き上げる土台になります。
「脆弱性が出るたびに走り回る運用」から卒業したい方へ
uname -r、apt changelog、sysctl ptrace_scope、SUID棚卸し。記事を読むだけでなく、検証機で繰り返し手を動かすことで初めて身につきます。
ネットの切れ端の情報を集めるのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます