OSコマンドインジェクションとは?
OSコマンドインジェクションは、攻撃者が脆弱なアプリケーションを介してサーバ上で任意のオペレーティングシステムコマンドを実行できる脆弱性です。MITREによってCWE-78に分類されており、アプリケーションが外部から提供された入力を適切に特殊文字を無害化せずにOSコマンドの構築に使用する場合に発生します。その結果、基盤となるオペレーティングシステムへの直接的かつ不正なアクセスが可能となります。
この脆弱性クラスは、2014年のShellshock大規模悪用から、CISA勧告で記録された継続的なネットワークアプライアンスターゲティングまで、主要なサイバー攻撃と関連付けられています。CWE-78はMITRE Top 25にランクインしており、アウトオブバウンズ書き込み、 クロスサイトスクリプティング、 SQLインジェクションと並んでいます。
OWASP Top 10では、より広範なインジェクションカテゴリがCWE-77およびCWE-78の両方にマッピングされています。シェルレベルでこの脆弱性がどのように機能するかを理解することが、対策の第一歩です。
OSコマンドインジェクションの仕組み
OSコマンドインジェクションは、アプリケーションがユーザー制御の入力をデータと制御命令を分離せずにOSシェルコマンドへ直接渡すという根本的な欠陥を悪用します。
MITREはOSコマンドインジェクションの2つのサブタイプを特定しています。
サブタイプ1:直接型(コマンドセパレータインジェクション)
アプリケーションは単一の固定プログラムを実行することを意図し、外部入力は引数としてのみ使用されます。攻撃者はコマンドセパレータ(;、|、&&、||、または改行)を注入し、追加のコマンドを付加します。
DNSルックアップを行うWebアプリケーションを例に考えます:

攻撃者がexample.com; cat /etc/passwdをドメインパラメータとして入力すると、シェルはnslookup example.comとcat /etc/passwdの両方を実行し、サーバのパスワードファイルを返します。
サブタイプ2:間接型(完全コマンド制御)
アプリケーションが入力によって実行するプログラム全体を決定します。攻撃者はコマンド全体を制御でき、引数だけでなくコマンド自体も操作可能です:

攻撃者がSCRIPTNAMEプロパティを制御できれば、システム上の任意の実行ファイルを指定できます。
攻撃の流れ
典型的なOSコマンドインジェクション攻撃は以下の手順で進行します:
- 攻撃者がフォームパラメータ、HTTPヘッダ、Cookie、URLクエリ文字列など、サーバ側コマンドに入力されるフィールドを特定します。
- 攻撃者がシェルメタキャラクタと悪意のあるコマンドを組み合わせてその入力に注入します。
- アプリケーションが無害化されていない入力をOSシェルに渡します。
- シェルがメタキャラクタを解釈し、アプリケーションプロセスと同じ権限で注入されたコマンドを実行します。アプリケーションがrootで動作している場合、攻撃者も同じ権限を得ます。
これらの各ステップは、シェルが特定の文字を制御命令として解釈することに依存しています。この動作を可能にする演算子はプラットフォームによって異なります。
一般的なインジェクション演算子とメタキャラクタ
OSコマンドインジェクションは、オペレーティングシステムがコマンド文字列を解釈する方法を変更するシェルメタキャラクタに依存します。攻撃者が利用できる演算子はターゲットプラットフォームによって異なります。
コマンドセパレータとインライン実行
| 演算子 | 機能 | プラットフォーム |
| ; | コマンドを順次実行 | Unix |
| & | 2番目のコマンドをバックグラウンドで実行 | UnixおよびWindows |
| && | 最初のコマンドが成功した場合のみ2番目を実行 | UnixおよびWindows |
| || | 最初のコマンドが失敗した場合のみ2番目を実行 | UnixおよびWindows |
| | | 最初のコマンドの出力を2番目にパイプ | UnixおよびWindows |
| ` (バッククォート) | インライン実行;出力が式に置換 | Unix |
| $() | インライン実行;バッククォートと同等 | Unix |
| 0x0a (改行) | 一部のシェルで新しいコマンドを開始 | Unix |
ユーザー入力が元のコマンド内の引用符で囲まれた文字列内に入る場合、攻撃者はまず引用符("または')を閉じてからセパレータを有効にする必要があります。URLエンコーディング、二重エンコーディング、Unicode正規化などのエンコーディング手法も、これらの文字をリテラルでチェックするフィルタを回避できます。これらの演算子がシェルに到達するのは、ユーザーデータとコマンド構文を分離できていない特定のコーディングパターンが原因です。
OSコマンドインジェクションの原因
OSコマンドインジェクションは、ユーザー入力が十分な制御なしにシステムシェルに到達するコーディング手法に起因します。主な原因は5つあります。
不十分な入力バリデーション
これが最も直接的な原因です。 OWASPガイドによれば、フォーム、Cookie、HTTPヘッダなどの安全でないユーザー入力が無害化されずにシステムシェルに渡されると、コマンドインジェクション攻撃が可能になります。ユーザーが期待通りの値を入力すると信頼している場合、バリデーションを完全に省略することがあります。
言語ネイティブAPIではなくシェル実行を使用
system()、exec()、shell_exec()、os.system()の呼び出しは、OSシェルを仲介として呼び出します。シェル呼び出しごとにインジェクションの表面が生まれます。 OWASPチートシートは主要言語における危険なAPIを特定しています:
| 言語 | 危険なAPI |
| Java | Runtime.exec() |
| C / C++ | system(), exec(), ShellExecute() |
| Python | exec(), eval(), os.system(), os.popen(), subprocess.Popen(), subprocess.call() |
| PHP | system(), shell_exec(), exec(), proc_open(), eval(), passthru() |
| Node.js | child_process.exec(), execSync(), spawn() |
ブラックリストフィルタへの依存
許可されるものを定義するのではなく、特定の危険な文字をブロックしようとする場合があります。このアプローチは CWE-184(不完全なブラックリスト)として分類され、常に失敗します。OWASPはPHPのescapeshellcmd()が追加コマンドの実行を防ぐものの、引数インジェクションは許可することを明記しています。攻撃者はコマンドセパレータを使わずとも--output-document=のようなフラグを注入してファイル書き込みを実現できます。
環境変数の操作
アプリケーションが実行ファイルの絶対パスを指定せず、環境変数をクリアしない場合、攻撃者は$PATHを悪意のあるバイナリにリダイレクトできます。アプリケーションがsetuid root権限で動作している場合、攻撃者のバイナリがroot権限で実行されます。
最小権限の原則違反
アプリケーションが昇格したシステム権限で動作していると、インジェクションの脆弱性が拡大します。コマンドインジェクションがwww-dataユーザーで動作するアプリケーションに対して行われた場合、攻撃者はそのユーザーの権限に制限されます。同じインジェクションがrootレベルのプロセスに対して行われた場合、システム全体の制御が可能となります。これらの原因が未対策の場合、影響は脆弱なアプリケーションを超えて広がります。
OSコマンドインジェクションの影響とリスク
OSコマンドインジェクションは、脆弱性分類システムで常に最上位のスコアを記録します。 OWASP Top 10:2021は、インジェクションを主要かつ持続的なリスクカテゴリとして特定しています。機能的な影響は直接的であり、攻撃者は侵害されたアプリケーションプロセスと同じ権限でサーバ上で任意のコマンドを実行できるようになります。
影響カテゴリ別の深刻度
| 影響 | 証拠 |
| リモートコード実行 | CVE-2024-3400 |
| システム全体の侵害 | SANSレポート:「システム全体の侵害、データ流出、またはネットワーク侵入」 |
| ラテラルムーブメント | CISA勧告:パストラバーサルと組み合わせたOSコマンドインジェクションによる多段階侵入 |
| ボットネット勧誘 | Mirai亜種 |
| ランサムウェア配信 | CISA勧告; CISA勧告 |
CVSSスコアだけでは全体像は分からない
CVE-2024-20399(Cisco NX-OS)は比較的控えめなCVSSスコアで、ローカルアクセスと管理者権限が必要です。しかし、CISAは中国系Velvet Antキャンペーンによる悪用を確認後、Known Exploited Vulnerabilitiesカタログに追加しました。
この事例は、CVSSスコアだけでは運用上のリスクを反映できないことを示しています。KEVカタログ掲載、国家レベルの悪用、デバイスのネットワーク上の位置は、ベーススコアをはるかに上回る独立したリスク要因です。攻撃者が使用する具体的な手法を理解することで、なぜ悪用が頻発するのかが説明できます。
攻撃者によるOSコマンドインジェクションの悪用手法
攻撃者は、発見からブラインドインジェクション、脆弱性連鎖まで、OSコマンドインジェクションを発見・確認・悪用するための一連の手法を用います。
発見と列挙
攻撃者は、サーバ側システムコマンドと連携する入力フィールドを特定し、すべてのパラメータ、HTTPヘッダ(User-Agent、Referer)、Cookie、URLクエリ文字列、構造化データ入力(JSON、XML、SOAP)をテストします。
直接出力インジェクション
攻撃者はコマンドセパレータの後に既知の出力コマンドを注入します:

レスポンスに実行中プロセスのユーザー名が含まれていれば、インジェクションが確認され、攻撃者はさらに破壊的なコマンドを実行できます。
タイムディレイによるブラインドインジェクション
コマンド出力がHTTPレスポンスに現れない場合、攻撃者はタイムディレイコマンドを注入し、応答遅延を測定します。Linuxターゲットに& sleep 10 &を注入すると、コマンドが実行された場合に測定可能な遅延が発生します。
アウトオブバンド(OAST)による情報流出
攻撃者は、自身が管理するインフラへのDNSコールバックを引き起こすコマンドを注入します:

攻撃者のサーバにDNSクエリが到達すれば、出力やタイミング差が観測できなくてもコード実行が確認できます。 PortSwigger OASTは、Burp Collaboratorが従来特定できなかったブラインドOSコマンドインジェクション脆弱性の発見を可能にしたと指摘しています。
認証バイパス連鎖
CVE-2024-21887(Ivanti Connect Secure)は認証済み管理者アクセスが必要ですが、攻撃者はCVE-2023-46805(認証バイパス)と組み合わせてその要件を完全に排除しました。CISA勧告によれば、中国の国家支援攻撃者はこの連鎖パターンをIvanti、Cisco、その他のネットワークアプライアンスで体系的に使用しました。
引数インジェクションバイパス
防御側がコマンドセパレータ(;, |, &&)をフィルタする場合、攻撃者は 引数インジェクション(CWE-88)に切り替えます。-や--で始まるフラグやオプションを注入することで、新たなコマンドを導入せずに既存プログラムの動作を操作します。OWASPは、PHPのescapeshellcmd()がコマンドセパレータをブロックしてもこの攻撃経路を許すことを文書化しています。これらの手法の幅広さにより、影響は単一のアプリケーションタイプや業界に限定されません。
OSコマンドインジェクションの影響を受ける対象
OSコマンドインジェクションは、アプリケーションコードがユーザー入力をOSシェルに渡すすべてのシステムに影響します。特定のアプリケーションタイプや業界は、確認された悪用データに基づき、特に高いリスクを持ちます。
最も脆弱なアプリケーションタイプ
- ネットワークアプライアンスおよびSSL-VPNデバイス:このカテゴリは CISA KEVカタログにおけるCWE-78の確認済み悪用エントリの最も高い集中を示します。CVE-2023-44221(SonicWall SMA100)、CVE-2024-8190(Ivanti Cloud Services Appliance)、CVE-2024-40891(Zyxel CPE)、CVE-2023-28771(Zyxel Firewall/VPN)はいずれも、管理インターフェースが入力をOSレベルのコマンド実行に直接渡すものです。
- IoTおよび組み込みファームウェア:QNAP NASデバイス(CVE-2023-47218)、TP-Linkルータ(CVE-2023-1389)、WavlinkルータはいずれもCWE-78脆弱性が確認されています。 Mirai亜種は、複数のルータおよびIoTファームウェアプラットフォームでOSコマンドインジェクションCVEを体系的に武器化し、ボットネット勧誘に利用しました。
- サーバ側システムコールを持つWebアプリケーション: OWASP Top 10の標準シナリオは、JavaアプリケーションがRuntime.getRuntime().exec()で文字列連結によりOSコマンドを構築するケースを説明しています。
- エンタープライズ管理インターフェース: CISA勧告は、Ivanti Cloud Service Application管理インターフェースに対する連鎖型コマンドインジェクションの悪用を記録しています。
最もリスクの高い業界
- 重要インフラおよび通信:CISA勧告は、ネットワークアプライアンスを標的としたコマンドインジェクションの国家支援型悪用を記録しています。
- 連邦政府:CISA KEVエントリは「連邦エンタープライズに重大なリスクをもたらす」と明記しています。連邦機関は KEVタイムラインに従い、KEV掲載コマンドインジェクションCVEへの対応が求められます。
これらのカテゴリにおける悪用データは、OSコマンドインジェクションがコードレベルの欠陥から組織規模の被害へと直結することを示しています。
OSコマンドインジェクションの実例
確認されたOSコマンドインジェクション事例は、オープンソースソフトウェアの大規模悪用から、ネットワークインフラを標的とした国家レベルのキャンペーンまで多岐にわたります。
Shellshock(CVE-2014-6271)、2014年
GNU Bashバージョン4.3まで、環境変数内の関数定義後の文字列を処理することで、 細工された値によるシェルコマンド注入が可能でした。この脆弱性はCGIスクリプト、DHCPクライアント、SSH ForceCommand構成を通じて悪用可能であり、単一のOSコマンドインジェクション脆弱性がインターネット規模の攻撃面を持つことを示しました。
Equifax侵害(CVE-2017-5638)、2017年
Apache Struts 2はContent-Typeヘッダ経由でOGNL式を注入可能であり、任意コード実行を許しました。 下院報告書によれば、Apacheは2017年3月7日にパッチを公開し、3日後の3月10日に攻撃者がEquifaxネットワークで脆弱性を初めて悪用しました。この侵害は7億ドルの和解と経営陣の辞任につながりました。
Log4Shell(CVE-2021-44228)、2021年
Apache Log4j2のJNDIメッセージルックアップ機能により、細工されたログメッセージ経由で認証不要のリモートコード実行が可能となり、 CVSS 10.0を記録しました。 CISA勧告によれば、APT攻撃者は未パッチのVMware HorizonサーバでLog4Shellを悪用し、ラテラルムーブメントと機密データの流出を実現しました。 LockBit関係者や 北朝鮮グループもこの脆弱性を悪用しました。
Velvet Ant / CVE-2024-20399、2024年
Sygniaレポートは、中国系スパイグループがCisco NX-OS CLIコマンドインジェクション脆弱性を悪用した事例を記載しています。比較的低いCVSSスコアにもかかわらず、グループはNexusスイッチの基盤Linux OS上で悪意のあるコードを実行しました。CISAはこれをKEVカタログに追加し、運用リスクがCVSS評価を上回ることを強調しました。
Zyxelファイアウォール悪用(CVE-2023-28771)、2023年
Zyxelファイアウォールファームウェアの不適切なエラーメッセージ処理により、認証不要のリモートOSコマンド実行が可能となり、 CVSS 9.8を記録しました。Cybersecurity Diveは、 事前活動なしで1日での積極的な標的化を報告しています。
これらの事例は、Webアプリケーションの黎明期から続く広範なパターンの一部です。
OSコマンドインジェクションのタイムラインと歴史
- 1988年~1998年:CGI時代。初期Webサーバは無害化されていないユーザー入力でシェルスクリプトを呼び出し、最初のOSコマンドインジェクション攻撃面を生み出しました。 MIT Lincoln LaboratoryのDARPA侵入検知評価データセットは、この時期のCGIベース攻撃やsendmail悪用を記録しています。
- 1999年:正式分類。CVE-1999-0067は、パイプ(|)メタキャラクタを無害化せずに電話帳プログラムを呼び出すCGIプログラムという、最初期のコマンドインジェクション事例を記録しました。MITREのCWE-78が脆弱性クラスを定義しました。
- 2014年:Shellshock。CVE-2014-6271は、インターネット規模の大規模悪用を達成した最初のOSコマンドインジェクション脆弱性となりました。
- 2017年:エンタープライズへの影響。CVE-2017-5638によるEquifax侵害は、アプリケーションフレームワークに組み込まれたコマンド実行プリミティブが、エンタープライズ規模で直接的なOSコマンドインジェクションと同等の影響を持つことを示しました。
- 2021年:インジェクションカテゴリ統合。OWASP Top 10:2021はすべてのインジェクションタイプをA03 Injectionカテゴリに統合しました。Log4Shell(CVE-2021-44228)は、このパターンを広範なロギングライブラリに拡張しました。
- 2023年~2026年:ネットワークアプライアンスターゲティング。 攻撃面はネットワーク境界アプライアンスへと大きくシフトしました。CISA勧告によれば、中国の国家支援攻撃者は2021年から2025年にかけてネットワークデバイスでコマンドインジェクションを体系的に悪用しました。OWASP Top 10:2025はCWE-88(引数インジェクション)を明示的にマッピングされた弱点として追加しました。
悪用が継続しているため、早期発見はアプリケーションライフサイクル全体で優先事項となっています。
OSコマンドインジェクションの検出方法
OSコマンドインジェクションの発見には、事前テストと実行時可視性を組み合わせた多層的アプローチが必要です。
静的アプリケーションセキュリティテスト(SAST)
OWASP Top 10によれば、ソースコードレビューがインジェクション脆弱性発見の最良手法です。SASTツールは、ユーザー制御入力を受け取るsystem()、exec()、popen()、shell_exec()などの危険なAPI呼び出しを検出します。フラグ対象の主なパターンは、文字列連結でOSコマンド実行関数に入力するケースや、PHPでescapeshellcmd()を使用し、より安全なescapeshellarg()を使っていない場合です。
SASTはCI/CDパイプラインで実行し、デプロイ前にインジェクション脆弱性を検出すべきです。主な制限は、実行時のみ発現する脆弱性は検出できない点です。
動的アプリケーションセキュリティテスト(DAST)
DASTは、実際に悪用可能なものを実行中アプリケーションでテストします。 Web Security Academyは3つのDAST手法を記載しています:
- 直接出力インジェクション:
& echo uniquestring &を注入し、レスポンスに文字列が現れるか確認 - ブラインド時間ベースインジェクション:
& sleep 10 &を注入し、応答遅延を測定 - アウトオブバンド(OAST)インジェクション:DNSコールバックコマンドを注入し、管理サーバへの外部リクエストを監視。ブラインドインジェクションで最も信頼性の高い手法です。
プロセスレベルでの振る舞い可視化
ホストレベルでは、 NIST SP 800-53(情報システム監視)が振る舞い異常識別の枠組みを定めています。SOCは以下の指標を監視すべきです:
- Webサーバプロセス(
apache、nginx、tomcat)がシェルプロセス(bash、sh、cmd.exe、powershell)を生成 - Webアプリケーションプロセスコンテキストからの予期しない
execve()やsystem()呼び出し - アプリケーションプロセスによる外部IPへのアウトバウンドネットワーク接続
Webアプリケーションファイアウォール(WAF)ルール
OWASP ModSecurity Core Rule Setは、HTTP入力内のシェルメタキャラクタ(;, |, &, backticks, $())や一般的なOSコマンド(whoami、cat /etc/passwd、nslookup)を検出します。WAFルールはエンコーディングや大文字小文字の変化で回避可能なため、完全な制御ではなく一つのシグナルソースとして扱うべきです。
手法の比較
| 手法 | タイミング | ブラインドインジェクション検出 | 主な制限 |
| SAST | デプロイ前 | N/A(静的) | 実行時のみの問題は検出不可 |
| DAST | デプロイ前/後 | 可(OAST経由) | 複雑なフローは見逃す可能性 |
| 振る舞い可視化 | 本番環境 | 可 | ベースライン調整が必要 |
| WAF | 本番環境 | 部分的 | 回避可能、根本原因は解決しない |
脆弱性の発見だけでは不十分です。予防にはコードとアーキテクチャの根本原因の排除が必要です。
OSコマンドインジェクションの予防方法
予防は、ユーザー制御入力による直接的なOSシェル呼び出しの排除に重点を置きます。シェル呼び出しを除去できない場合は、多層的な制御で攻撃面を縮小します。
主な防御策:OSコマンドの完全排除
PortSwiggerによれば、最も強力な予防策はアプリケーション層コードからOSコマンド呼び出しを一切行わないことです。ほとんどの場合、より安全なプラットフォームネイティブAPIで必要な機能を実装できます。メール送信にはSMTPライブラリ、DNS解決にはDNSライブラリを使用し、シェルを介在させないでください。
パラメータ化コマンドAPIの使用
OSコマンド実行が不可避な場合は、データとコマンドの分離を強制する構造化メカニズムを使用してください。Pythonでは、subprocess.run()のリスト形式を使用します:

リスト形式は、引数内のメタキャラクタをシェルが解釈するのを防ぎます。
ホワイトリストによる入力バリデーション
OWASPチートシートは、ホワイトリストベースのバリデーションを第2防御層として推奨しています。許可される文字と最大文字列長を厳格な正規表現で定義してください。OWASPは^[a-z0-9]{3,10}$の例を示し、すべてのメタキャラクタと空白を除外しています。
PortSwiggerは明確に警告しています:シェルメタキャラクタのエスケープによる入力無害化は絶対に試みないでください。この手法はエラーが発生しやすく、熟練した攻撃者に回避されます。ホワイトリスト方式が常に推奨されます。
最小権限の適用(NIST AC-6)
NIST SP 800-53は最小権限の原則の適用を義務付けています。コマンドインジェクション防御のためには:
- Webアプリケーションプロセスを専用の非特権サービスアカウントで実行
- サービスアカウントの権限を必要なファイルシステムパスのみに制限
- Webアプリケーションサービスアカウントへのシェルアクセス
(/bin/sh, /bin/bash)を拒否 - Linuxでは
seccompプロファイルで利用可能なシステムコールを制限
サンドボックス化とコンテナ化の実装
読み取り専用ルートファイルシステム、Linuxネームスペースとcgroups、強制アクセス制御プロファイル(AppArmorまたはSELinux)によるコンテナ分離は、インジェクション発生時の被害範囲を縮小します。これらの制御はNIST CM-7の最小機能原則に合致します。
PHP固有の制御
PHPでシェルコマンドを呼び出す必要がある場合は、escapeshellcmd()ではなくescapeshellarg()を使用してください。これにより入力が単一パラメータに限定され、引数インジェクションを防止します。
これらのコーディングおよびアーキテクチャ制御が基盤となりますが、ツールによる可視化が大規模運用での強制に不可欠です。
OSコマンドインジェクションの検出・防止ツール
効果的な防御には、アプリケーションセキュリティテスト、実行時保護、エンドポイント可視化をカバーするツールが必要です。OSコマンドインジェクションを対象とした CISAおよびFBI合同警告は、コマンドと引数を分離する組み込みライブラリ関数、入力パラメータ化、すべてのユーザー入力のバリデーションを推奨しています。
アプリケーションセキュリティテストツール
- SASTツールは、ユーザー入力を受け取る危険なAPI呼び出しをソースコードから検出します。CI/CDパイプラインに統合し、デプロイ前にインジェクション脆弱性を検出できます。
- DASTツール(例:Burp Suite)は、実行中アプリケーションの悪用可能なインジェクションポイントをテストします。Burp SuiteのOAST機能は、出力が見えないブラインドコマンドインジェクションの検出に特に有効です。
実行時およびネットワーク保護
- WAFソリューションは、OWASP ModSecurity Core Rule Setを用いてシェルメタキャラクタや一般的なインジェクションペイロードのネットワーク層フィルタリングを提供します。これらは多層防御の一部ですが、根本原因の修正に代わるものではありません。
- RASPソリューションは、実行時にアプリケーションをインストゥルメントし、アプリケーションコンテキスト全体でインジェクション試行をブロックできます。レガシーアプリケーションの補完的制御として有効です。
エンドポイントおよび振る舞い可視化
エンドポイントセキュリティプラットフォームは、プロセス生成、親子関係、コマンドライン引数を監視し、ポストエクスプロイト活動の検出に不可欠です。Webサーバプロセスが予期しないシェルを生成した場合、カーネルレベルでの振る舞い分析が最後の防御線となります。
関連する脆弱性
OSコマンドインジェクションは、ユーザーデータと実行命令の分離失敗という共通の根本原因を持つインジェクション脆弱性ファミリーに属します。いくつかの関連脆弱性クラスはCWE-78と連鎖したり、重複したりします。
- SQLインジェクション(CWE-89):OSシェルではなくSQLデータベースエンジンを標的とします。SQLインジェクションは、
xp_cmdshellなどのデータベース機能を介してOSコマンドインジェクションに連鎖可能です。 - コードインジェクション(CWE-94):アプリケーション自身の言語ランタイム(PHP
eval()、Pythonexec())を標的とします。コードインジェクションは、注入コードがsystem()やexec()を呼び出すことでOSコマンドインジェクションに発展することがあります。 - 引数インジェクション(CWE-88):CWE-78の派生型です。セパレータによる新規コマンド注入ではなく、-や--で始まるフラグで既存プログラムの引数を操作します。コマンドセパレータフィルタがあっても成功します。
- サーバ側テンプレートインジェクション(CWE-1336):テンプレートエンジン(Jinja2、FreeMarker)を標的とします。SSTIは、テンプレートエンジンが基盤言語ランタイムにアクセスできるため、しばしばOSコマンドインジェクションに発展します。
- 式言語インジェクション(CWE-917):Webフレームワークの式言語パーサ(OGNL、Spring SpEL)を標的とします。Log4Shell(CVE-2021-44228)が代表例で、しばしばOSコマンド実行に連鎖します。
| 脆弱性 | CWE | 対象インタプリタ | OS実行への直接経路 |
| OSコマンドインジェクション | CWE-78 | OSシェル | 直接 |
| SQLインジェクション | CWE-89 | SQLエンジン | 間接(xp_cmdshell経由) |
| コードインジェクション | CWE-94 | アプリケーションランタイム | 間接(システムコール経由) |
| 引数インジェクション | CWE-88 | OSシェル引数パーサ | 直接(呼び出しコマンドを操作) |
| SSTI | CWE-1336 | テンプレートエンジン | しばしばOSコマンドに発展 |
| ELインジェクション | CWE-917 | 式言語パーサ | しばしばOSコマンドに発展 |
上記の表は、複数の脆弱性クラスがOSレベル実行への直接または間接経路を提供することを示しており、すべてのインジェクションタイプに対する多層防御が不可欠であることを示しています。
関連するCVE
| CVE ID | 説明 | 深刻度 | 影響製品 | 年 |
| git diff APIエンドポイントのコマンドインジェクションによりエージェント実行制御をバイパス | クリティカル | OpenHands AI Platform | 2026 | |
| WAN診断機能のcurlパラメータ経由のOSコマンドインジェクション | クリティカル | Tenda G300-F Router | 2026 | |
| VPNモジュールのOSコマンドインジェクション;認証済み隣接攻撃者 | 高 | TP-Link Archer BE230 | 2026 | |
| ICS通信デバイスの認証不要OSコマンドインジェクション | クリティカル | Zenitel Devices | 2025 | |
| EDR管理プラットフォームの認証不要OSコマンドインジェクション;積極的に悪用 | クリティカル | Sangfor EDR | 2025 | |
| DDNS CLI構成の認証後コマンドインジェクション | 高 | Zyxel ATP/USG FLEX Firewalls | 2025 | |
| image.phpのexec()に渡される未無害化入力によるコマンドインジェクション | クリティカル | ZoneMinder v1.36.34 | 2025 | |
| ミドルウェアAPIエンドポイントの認証不要RCE(コマンドインジェクション) | クリティカル | Hoverfly API Simulator | 2025 | |
| NexusスイッチのCLIコマンドインジェクション;Velvet Antキャンペーンによる悪用 | 中 | Cisco NX-OS | 2024 | |
| Task Managerコンポーネントの認証不要OSコマンドインジェクション | クリティカル | Synology BeePhotos/Photos | 2024 | |
| remote_help-cgiエンドポイントの認証不要コマンドインジェクション | クリティカル | Zyxel NAS326/NAS542 | 2024 | |
| CGIプログラムのHTTP POST経由の認証後コマンドインジェクション;CISA KEV | 高 | Zyxel VMG1312-B10A | 2024 | |
| CGIリクエストコマンドインジェクションによるrootレベルコード実行 | クリティカル | Webmin | 2024 | |
| Web UI経由のrootレベルコマンドインジェクション;積極的に悪用;CISA KEV | クリティカル | Cisco IOS XE | 2023 | |
| 悪意のある.tarファイル名によるコマンドインジェクション;積極的に悪用;CISA KEV | クリティカル | Barracuda ESG | 2023 | |
| HTTPリクエスト経由の認証不要OSコマンドインジェクション;CISA KEV | クリティカル | Zyxel NAS326/540/542 | 2023 | |
| show_zysync_server_contents関数の認証不要コマンドインジェクション | クリティカル | Zyxel NAS326/NAS542 | 2023 | |
| ユーザー名またはホスト名のシェルメタキャラクタによるOSコマンドインジェクション | 中 | OpenBSD OpenSSH | 2023 | |
| ログインインターフェースの認証不要シェルメタキャラクタインジェクション;CISA KEV | クリティカル | Control Web Panel 7 | 2022 | |
| c_rehashスクリプトの悪意のある証明書ファイル名によるコマンドインジェクション | クリティカル | OpenSSL | 2022 | |
| Web管理インターフェースの認証不要OSコマンドインジェクション | クリティカル | Zyxel NWA1100-NH | 2021 | |
| ルータファームウェアの認証不要コマンドインジェクション;CISA KEV | クリティカル | DrayTek Vigor Routers | 2020 | |
| weblogin.cgi経由の認証不要コマンドインジェクション;root権限昇格;CISA KEV | クリティカル | Zyxel NAS326 | 2020 | |
| goform/setUsbUnloadのdeviceNameパラメータによるコマンドインジェクション;CISA KEV | クリティカル | Tenda AC15 Router | 2020 |
結論
OSコマンドインジェクションは、アプリケーションが安全でない入力をシェルインタプリタに渡すことで、攻撃者に直接OSレベルの実行を許します。OSコマンド呼び出しを可能な限り排除し、必要な場合はパラメータ化APIを使用し、ホワイトリストバリデーションを徹底することで、リスクを低減できます。
予防に失敗した場合でも、エンドポイントでの振る舞い可視化により、シェル生成や外部接続などの悪用兆候を迅速に検出できます。
FAQ
OSコマンドインジェクション(CWE-78)は、アプリケーションが未サニタイズの外部入力を使用してOSコマンドを構築する際に発生する脆弱性です。攻撃者はシェルメタ文字(;, |, &&)を挿入し、OSシェルがアプリケーションの権限で悪意のあるコマンドを実行できるようにします。
根本原因は、入力をシェルインタプリタに渡す前にユーザーデータとコマンド構文を分離しないことです。
はい。OSコマンドインジェクションは、OWASP Top 10:2021およびOWASP Top 10:2025の両方でInjectionカテゴリに分類されています。CWE-77およびCWE-78の両方が明示的に含まれています。
2025年版ではCWE-88(引数インジェクション)も追加されています。
はい。CISA KEVカタログにおける大半のCWE-78脆弱性は認証不要でリモートから悪用可能です。CVE-2014-6271(Shellshock)、CVE-2023-28771(Zyxel)、 CVE-2024-3400はいずれも認証不要のリモート悪用を許します。
ファイアウォール、VPNコンセントレーター、エンタープライズスイッチなどのネットワークアプライアンスは、確認されたCWE-78悪用事例が最も多く発生しています。NASデバイスやルーターを含むIoTおよび組み込みファームウェアは、ボットネットへの勧誘を目的として体系的に標的とされています。
サーバー側のシステムコマンドを呼び出すWebアプリケーションやエンタープライズ管理インターフェースも、リスクが高いとされています。
攻撃者は、入力フィールド、HTTPヘッダー、Cookie、URLパラメータにシェルメタ文字と診断用コマンドを挿入して調査します。ブラインドインジェクションの場合、sleep 10などの時間遅延や、攻撃者管理のサーバーへのDNSコールバックを利用します。
スキャナーやファジングツールは、すべての入力ベクトルを体系的にテストします。
主な指標として、Webサーバープロセス(apache, nginx, tomcat)が予期しないシェルプロセス(bash, sh, cmd.exe)を生成することが挙げられます。他にも、アプリケーションプロセスから不審なIPへの外部ネットワーク接続や、Webアプリケーションプロセスコンテキストからの異常なexecve()やsystem()呼び出しが兆候となります。
OSコマンドインジェクションは、攻撃者に直接OSレベルのアクセスを与えるため、非常に深刻な脆弱性クラスです。つまり、ホストOSがサポートする任意のコマンドを実行可能となります。
CWE-78はMITREのソフトウェア脆弱性カテゴリの上位に位置し、確認されたCVEはCVSSスコア9.0以上となることが一般的です。
SASTツールはソースコード内の危険なAPI呼び出しを確実に検出しますが、実行時のみ発生する脆弱性は見逃します。DASTツールは悪用可能なインジェクションポイントを特定し、特にOAST技術を用いたブラインドインジェクションの検出に有効です。
WAFルールは既知のパターンを検出しますが、エンコーディングによる回避が可能です。プロセスレベルでの挙動可視化が最も信頼性の高い実行時識別を提供します。すべてのバリアントを検出できる単一のツールは存在しないため、多層的な対策が必要です。
重要インフラおよび通信業界が最も高いリスクに直面しています。CISAの勧告文書では、中国の国家支援による通信・ルーターインフラへの悪用が報告されています。
連邦政府機関にはKEV対応の義務的な期限があります。インターネットに公開されたネットワーク機器や組み込みファームウェアを使用するすべての業界が潜在的な標的となります。


