コマンドインジェクション
コマンドインジェクション とは何ですか?
コマンドインジェクションユーザー入力をサニタイズせずに OS シェルへ渡し、攻撃者が指定したコマンドをアプリケーションに実行させる攻撃。
コマンドインジェクション(OS コマンドインジェクション)は、アプリケーションが信頼できない入力を連結してシステムコマンドを組み立て、その結果をシェルに引き渡すときに発生します。;・&・|・$()・バッククォートといったメタ文字を使うと、攻撃者はアプリケーションプロセスの権限で動作する追加のコマンドを連結して実行できます。被害には、任意ファイルの読み書き、ラテラルムーブメント、リバースシェル、サーバーの完全な乗っ取りが含まれます。OWASP Top 10 では「インジェクション」(A03:2021)に分類され、CWE-78 として登録されています。
根本原因は入力そのものではなくシェルのメタ文字インタプリタにあります。したがって決定的な分かれ目は、シェルを呼び出すこと(system()、os.system、Runtime.exec("sh -c ...")、バッククォート)と、引数ベクタを指定して対象バイナリを直接呼び出すこと(execve、subprocess.run([...], shell=False)、ProcessBuilder)の違いにあります。引数配列型の API は各トークンをリテラルとして渡すため、メタ文字がパーサに到達することはありません。関連する亜種として引数インジェクションがあり、シェルがまったく呼び出されない場合でも、プログラム自身のフラグを悪用します(例:git・curl・ssh に --output や -o ProxyCommand を紛れ込ませる)。
現実の被害はネットワークのエッジ機器で特に深刻です。CVE-2024-3400(CVSS 10.0)は Palo Alto Networks PAN-OS の GlobalProtect 機能における未認証の OS コマンドインジェクションで、2024 年 4 月からゼロデイとして、Volexity が UTA0218 として追跡している攻撃者によって悪用され、リバースシェルの設置とファイアウォール設定の窃取に使われました。Ivanti Connect Secure の CVE-2024-21887 は、認証バイパスの CVE-2023-46805 と組み合わされることで未認証のコマンド実行を許し、2024 年初頭に大規模に悪用されました。2014 年の Shellshock 脆弱性(CVE-2014-6271)は、Bash が解析する細工された環境変数を通じて攻撃者がコマンドを注入できるもので、CGI・DHCP・SSH 経由で到達可能でした。
対策:引数配列型 API を用いてシェルを完全に避ける、期待される値を厳格に許可リスト方式で検証する、危険なフラグやメタ文字を除去する、サンドボックス/コンテナ内で最小権限ユーザーとしてサービスを実行する、そして侵入の足がかりが外部と通信できないようエグレスフィルタリングを適用する。
flowchart TD
A[ユーザー入力: hostname] --> B{コマンドに組み込み}
B -->|"os.system('ping ' + host)"| C[シェルがメタ文字を解釈]
C --> D["host = 127.0.0.1; cat /etc/shadow"]
D --> E[攻撃者のコマンドがアプリのユーザーとして実行]
E --> F[リバースシェル / データ窃取 / 乗っ取り]
B -->|"subprocess.run(['ping', host], shell=False)"| G[引数をリテラルトークンとして渡す]
G --> H[シェルによる解析なし - インジェクション無効化]
style F fill:#c0392b,color:#fff
style H fill:#27ae60,color:#fff● 例
- 01
ホスト名パラメータを連結する ping ユーティリティで、127.0.0.1; cat /etc/shadow によりパスワードハッシュが流出する。
- 02
ImageMagick を呼び出す画像処理エンドポイントで、細工されたファイル名を介して攻撃者の任意コマンドが実行される。
● よくある質問
コマンドインジェクション とは何ですか?
ユーザー入力をサニタイズせずに OS シェルへ渡し、攻撃者が指定したコマンドをアプリケーションに実行させる攻撃。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
コマンドインジェクション とはどういう意味ですか?
ユーザー入力をサニタイズせずに OS シェルへ渡し、攻撃者が指定したコマンドをアプリケーションに実行させる攻撃。
コマンドインジェクション からどのように防御しますか?
コマンドインジェクション に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
コマンドインジェクション の別名は何ですか?
一般的な別名: OS コマンドインジェクション, シェルインジェクション。