Skip to main content
サイバーセキュリティ

OSコマンドインジェクションとは?悪用手法、影響、対策

OSコマンドインジェクション(CWE-78)は、攻撃者が未サニタイズ入力を介して任意のコマンドを実行できる脆弱性です。悪用手法、実際のCVE、対策について解説します。

著者 SentinelOne
OSコマンドインジェクションとは?悪用手法、影響、対策

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コマンドインジェクション攻撃は以下の手順で進行します:

  1. 攻撃者がフォームパラメータ、HTTPヘッダ、Cookie、URLクエリ文字列など、サーバ側コマンドに入力されるフィールドを特定します。
  2. 攻撃者がシェルメタキャラクタと悪意のあるコマンドを組み合わせてその入力に注入します。
  3. アプリケーションが無加工の入力をOSシェルに渡します。
  4. シェルがメタキャラクタを解釈し、アプリケーションプロセスと同じ権限で注入されたコマンドを実行します。アプリケーションが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
JavaRuntime.exec()
C / C++system(), exec(), ShellExecute()
Pythonexec(), eval(), os.system(), os.popen(), subprocess.Popen(), subprocess.call()
PHPsystem(), shell_exec(), exec(), proc_open(), eval(), passthru()
Node.jschild_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掲載コマンドインジェクションCVEに対して KEVタイムラインが課されています。

これらのカテゴリにおける悪用データは、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コマンドインジェクションのタイムラインと歴史

  1. 1988年~1998年:CGI時代。初期のWebサーバは、無加工のユーザー入力でシェルスクリプトを呼び出し、最初のOSコマンドインジェクション攻撃面を生み出しました。 MIT Lincoln LaboratoryのDARPA侵入検知評価データセットは、この時期のCGIベース攻撃やsendmail悪用を記録しています。
  2. 1999年:正式分類。CVE-1999-0067は、パイプ(|)メタキャラクタを無害化せずに電話帳プログラムを呼び出すCGIプログラムという、最初期のコマンドインジェクション事例を記録しました。MITREのCWE-78が脆弱性クラスを定義しました。
  3. 2014年:Shellshock。CVE-2014-6271は、インターネット規模の大規模悪用を達成した最初のOSコマンドインジェクション脆弱性となりました。
  4. 2017年:エンタープライズへの影響。CVE-2017-5638によるEquifax侵害は、アプリケーションフレームワークに組み込まれたコマンド実行プリミティブが、エンタープライズ規模で直接的なOSコマンドインジェクションと同等の影響を持つことを示しました。
  5. 2021年:インジェクションカテゴリの統合。OWASP Top 10:2021は、すべてのインジェクションタイプをA03 Injectionカテゴリに統合しました。Log4Shell(CVE-2021-44228)は、このパターンを広範なロギングライブラリに拡張しました。
  6. 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手法を記載しています:

  1. 直接出力インジェクション:& echo uniquestring &を注入し、レスポンスに文字列が現れるか確認
  2. ブラインド時間ベースインジェクション:& sleep 10 &を注入し、応答遅延を測定
  3. アウトオブバンド(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入力内のシェルメタキャラクタ(;、|、&、バッククォート、$())や一般的な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サーバプロセスが予期しないシェルを生成した場合、カーネルレベルでの振る舞い分析が最後の防御線となります。

Callout Background Image Gradient

AIを活用したサイバーセキュリティの実現

リアルタイムの検知、マシンスピードのレスポンス、デジタル環境全体の可視化により、セキュリティ態勢を強化します。

関連する脆弱性

OSコマンドインジェクションは、ユーザーデータと実行命令の分離失敗という共通の根本原因を持つインジェクション脆弱性ファミリーに属します。いくつかの関連脆弱性クラスは、CWE-78と連鎖したり重複したりすることがあります。

  • SQLインジェクション(CWE-89):OSシェルではなくSQLデータベースエンジンを標的とします。SQLインジェクションは、xp_cmdshellなどのデータベース機能を介してOSコマンドインジェクションに連鎖することがあります。
  • コードインジェクション(CWE-94):アプリケーション自身の言語ランタイム(PHP eval()、Python exec())を標的とします。コードインジェクションは、攻撃者が自身のコードを追加し、アプリケーションによって実行されることを可能にし、注入コードが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-78OSシェル直接
SQLインジェクションCWE-89SQLエンジン間接(xp_cmdshell経由)
コードインジェクションCWE-94アプリケーションランタイム間接(システムコール経由)
引数インジェクションCWE-88OSシェル引数パーサ直接(呼び出しコマンドを操作)
SSTICWE-1336テンプレートエンジンしばしばOSコマンドにエスカレート
ELインジェクションCWE-917式言語パーサしばしばOSコマンドにエスカレート

上記の表は、複数の脆弱性クラスがOSレベル実行への直接または間接経路を提供することを示しており、すべてのインジェクションタイプに対する多層防御が不可欠であることを示しています。

関連するCVE

CVE ID説明深刻度影響製品年

CVE-2026-33718

git diff APIエンドポイントのコマンドインジェクションによりエージェント実行制御をバイパスクリティカルOpenHands AI Platform2026

CVE-2026-25857

curlパラメータ経由のWAN診断機能におけるOSコマンドインジェクションクリティカルTenda G300-F Router2026

CVE-2026-0631

VPNモジュールにおけるOSコマンドインジェクション;認証済み隣接攻撃者高TP-Link Archer BE2302026

CVE-2025-64127

ICS通信デバイスにおける認証不要のOSコマンドインジェクションクリティカルZenitel Devices2025

CVE-2025-34041

EDR管理プラットフォームにおける認証不要のOSコマンドインジェクション;積極的に悪用クリティカルSangfor EDR2025

CVE-2025-11730

DDNS CLI構成における認証後コマンドインジェクション高Zyxel ATP/USG FLEX Firewalls2025

CVE-2025-65791

image.phpのexec()に渡される未サニタイズ入力によるコマンドインジェクションクリティカルZoneMinder v1.36.342025

CVE-2025-54123

ミドルウェアAPIエンドポイントにおける認証不要のRCE(コマンドインジェクション)クリティカルHoverfly API Simulator2025

CVE-2024-20399

NexusスイッチにおけるCLIコマンドインジェクション;Velvet Antキャンペーンによる悪用中Cisco NX-OS2024

CVE-2024-10443

Task Managerコンポーネントにおける認証不要のOSコマンドインジェクションクリティカルSynology BeePhotos/Photos2024

CVE-2024-29972

remote_help-cgiエンドポイントにおける認証不要のコマンドインジェクションクリティカルZyxel NAS326/NAS5422024

CVE-2024-40890

CGIプログラムのHTTP POST経由の認証後コマンドインジェクション;CISA KEV高Zyxel VMG1312-B10A2024

CVE-2024-12828

CGIリクエストコマンドインジェクションによるrootレベルコード実行クリティカルWebmin2024

CVE-2023-20273

Web UI経由のrootレベルコマンドインジェクション;積極的に悪用;CISA KEVクリティカルCisco IOS XE2023

CVE-2023-2868

悪意のある.tarファイル名によるコマンドインジェクション;積極的に悪用;CISA KEVクリティカルBarracuda ESG2023

CVE-2023-27992

HTTPリクエスト経由の認証前OSコマンドインジェクション;CISA KEVクリティカルZyxel NAS326/540/5422023

CVE-2023-35138

show_zysync_server_contents関数における認証不要のコマンドインジェクションクリティカルZyxel NAS326/NAS5422023

CVE-2023-51385

ユーザー名またはホスト名のシェルメタキャラクタによるOSコマンドインジェクション中OpenBSD OpenSSH2023

CVE-2022-44877

ログインインターフェースにおける認証不要のシェルメタキャラクタインジェクション;CISA KEVクリティカルControl Web Panel 72022

CVE-2022-2068

c_rehashスクリプトにおける悪意のある証明書ファイル名によるコマンドインジェクションクリティカルOpenSSL2022

CVE-2021-4039

Web管理インターフェースにおける認証不要のOSコマンドインジェクションクリティカルZyxel NWA1100-NH2021

CVE-2020-8515

ルータファームウェアにおける認証前コマンドインジェクション;CISA KEVクリティカルDrayTek Vigor Routers2020

CVE-2020-9054

weblogin.cgi経由の認証前コマンドインジェクション;root権限昇格;CISA KEVクリティカルZyxel NAS3262020

CVE-2020-10987

goform/setUsbUnloadのdeviceNameパラメータによるコマンドインジェクション;CISA KEVクリティカルTenda AC15 Router2020

結論

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以上となることが一般的です。

はい。SANSによるCVE-2024-40891の報告では、「完全なシステム侵害、データ流出、またはネットワーク侵入」と明確に記載されています。侵害されたアプリケーションが昇格された権限で実行されている場合、攻撃者は同等のOSレベルのアクセス権を取得します。

確認されている影響には、ランサムウェアの展開、ラテラルムーブメント、持続的なバックドアのインストールが含まれます。

SASTツールはソースコード内の危険なAPI呼び出しを確実に検出しますが、実行時のみ発生する脆弱性は見逃します。DASTツールは悪用可能なインジェクションポイントを検出し、特にOAST技術を用いたブラインドインジェクションに有効です。 

WAFルールは既知のパターンを検出しますが、エンコーディングによる回避が可能です。プロセスレベルでの挙動可視化が最も信頼性の高い実行時識別を提供します。すべてのバリアントを検出できる単一のツールは存在しないため、多層的な対策が必要です。

重要インフラおよび通信業界が最も高いリスクに直面しています。CISAの勧告文書では、中国の国家支援による通信およびルーターインフラへの悪用が報告されています。 

連邦政府機関にはKEV対応の義務的な期限があります。インターネットに公開されたネットワーク機器や組み込みファームウェアを使用するすべての業界が潜在的な標的となります。

さらに詳しく見る サイバーセキュリティ

Decorative background gradient

最先端のサイバーセキュリティプラットフォームを体験

世界で最もインテリジェントで自律型のサイバーセキュリティプラットフォームが、現在そして将来にわたって組織をどのように保護できるかをご覧ください。
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text