コマンド・インジェクションとは、脆弱なアプリケーションを介してホスト・オペレーティング・システム上で任意のコマンドを実行することを目的とした攻撃のこと

コマンド・インジェクション攻撃は、アプリケーションが安全でないユーザー提供データ(Form、cookie、HTTPヘッダーなど)をシステムのシェル実行コマンドを送信する

この攻撃では、攻撃者が送信したOSのコマンドが、脆弱なアプリケーションで実行してしまい任意のコードを実行させることが可能。コマンド・インジェクション攻撃は、入力の検証が不十分であることが主な原因となっている

コマンド・インジェクション攻撃は、コード・インジェクションとは異なり、コード・インジェクションでは攻撃者が独自のコードを追加し、そのコードがアプリケーションによって実行される。一方コマンド・インジェクションでは、攻撃者はコードを挿入する必要がなくシステム・コマンドそのものを実行させる。

以下のプログラムは、コマンドライン引数にファイル名を受け取り、そのファイルの内容をユーザーに表示するプログラムとなっている。このプログラムは setuid root で権限設定している。

int main(char* argc, char** argv) {
  char cmd[CMD_MAX] = "/usr/bin/cat ";
  strcat(cmd, argv[1]);
  system(cmd);
 }

このプログラムはroot権限で実行されるため、system()の呼び出しもroot権限で実行される。ユーザーが普通のファイル名を指定した場合、このプログラムは期待通りに動作するが、攻撃者が「;rm -rf /」という形式の文字列を渡すと、system()の呼び出しは、引数がないためにcatの実行に失敗し、その後、rootパーティションの内容を再帰的に削除する「rm -rf」が実行され、ファイルがすべて削除されてしまう。

https://owasp.org/www-community/attacks/Command_Injection

コメントを残す

メールアドレスが公開されることはありません。