用語辞典
RCE(リモートコード実行)とは — なぜ最悪クラスの脆弱性なのか
RCE(Remote Code Execution/リモートコード実行)は、攻撃者がネットワーク越しにサーバー上で任意のプログラムを動かせてしまう脆弱性です。情報を読まれるだけでなく『乗っ取り』に直結するため、CVSSでも最高ランクになりがち。XSSやSQLiとの違い、被害範囲が何で決まるか、そして利用者にできる防御(迅速な更新・CVE監視・最小権限)を、図と表でやさしく解説します。
「CVSS 10.0 の RCE」——脆弱性ニュースで最も緊張が走る言葉です。なぜRCEが“最悪クラス”なのか、他の脆弱性と何が違うのかを、ゼロから解説します。
他の脆弱性と何が違うのか
多くの脆弱性は被害が限定的です。RCEは「サーバー本体でコマンドが動く」ため、桁が違います。代表的な3つと比べてみます。
| 脆弱性 | コードが動く場所 | 主な被害 | 一般的な深刻度 |
|---|---|---|---|
| XSS | 利用者のブラウザ | セッション窃取・画面改ざん | 中〜高 |
| SQLi | データベース | データの読み出し・改ざん | 高 |
| RCE | サーバー本体 | 乗っ取り・横展開・全部 | 最悪(10.0級も) |
なぜ最悪クラスなのか
攻撃者がサーバー上でコマンドを実行できる=そのプロセスができることは何でもできることを意味します。
RCE 成立(任意コード実行)
.env を読んでシークレット窃取被害範囲は「そのプロセスの権限」で決まります。だからこそ、**コンテナ化・最小権限・分離(爆発半径の最小化)**が効きます。root で動かしていれば全部やられ、非特権ユーザー+分離なら被害を閉じ込められます。
多くは「自分のバグ」ではなく「既知の穴」から
RCEは、自分が書いたバグだけでなく、使っているフレームワークやライブラリの既知の穴から起きることが非常に多いです。歴史的な大事故も、その多くがRCEでした。
- Log4Shell(CVE-2021-44228):ログ部品経由のRCE。世界中が震えた。
- Equifax(CVE-2017-5638):未パッチのStruts RCEで1.47億人。
- 放置したCVSS 10.0で踏まれた話:公開済みRCEを数ヶ月放置。
利用者にできる防御
公開済みCVEを放置しない(最大の防御)
CVE を機械で監視(Dependabot / osv-scanner)し、修正版へ迅速に更新する。RCEの大半は「既知の穴の放置」から起きる。
実稼働版で判定する
マニフェストの下限表記ではなく、実際に動いているバージョンで危険を測る。表記を信じると危険度を誤判定する。
爆発半径を最小化する
非特権ユーザーで動かし、コンテナ・ネットワークを分離。万一踏まれても被害を閉じ込める。
入力を実行系に直接渡さない
外部入力をシェルコマンドやデシリアライズ・テンプレート評価へ素通しさせない。自分でRCEを作り込まない基本。
次に読む
- 用語:CVE とは / CVSS とは
- 歴史:Log4Shell — 依存経由のRCE
- 対策:Next.js を安全に運用する(CVE追従)
よくある質問
QRCEとよくある脆弱性(XSSなど)は何が違う?
XSSなどが主に『利用者のブラウザ内』で悪さをするのに対し、RCEは『サーバー本体』で任意のプログラムを動かせます。サーバーの権限・データ・他サービスへ波及しうるため、一般に最も深刻です。
QRCEの被害はどこまで広がる?
『攻撃された時に動いていたプロセスの権限』までです。rootや広い権限で動かしていれば被害は甚大に、非特権ユーザー+コンテナ分離なら被害を閉じ込められます。だから最小権限と分離が効きます。
Q利用者(開発者)側でRCEをどう防ぐ?
自分でRCEバグを書かない工夫(入力を実行系に直接渡さない等)に加え、最大の防御は『使っているフレームワーク/ライブラリの公開済みRCEを放置しない』こと。CVE監視と迅速な更新が要です。