最終更新日:
OSコマンドインジェクションとは、外部から入力された値の扱いの不備を突いて、Webサーバーの上でOSのコマンドを不正に実行させる攻撃と、その原因となる脆弱性です。
Webアプリケーションが、利用者の入力をそのまま外部のプログラムやシェル(コマンドを解釈する仕組み)に渡していると、入力に紛れ込ませた記号やコマンドが実行されてしまうことがあります。IPAの「安全なウェブサイトの作り方」は、外部のプログラムを呼び出せる関数を使うWebアプリケーションであれば、運営する主体やサイトの性質を問わず注意が必要としています。
悪用されると、サーバーの中のファイルの閲覧・改ざん・削除、利用者のアカウントの追加、不正なプログラムの設置、ほかへの攻撃の踏み台にされることなどが起こりえます。IPAは根本的な対策として、シェルを起動できる機能を使わず、別の関数で代わりの処理をすることを挙げています。
どうしてもシェルを使う場合は、渡す値を事前に検査し、許可した文字の組み合わせだけを通す方式(ホワイトリスト方式)が勧められています。危険な記号を並べて拒む方式は、漏れが生じるおそれがあるとされています。
関連する用語
- SQLインジェクションWebアプリケーションの入力欄などに細工した文字列を入れ、データベースを不正に操作する攻撃です。
- ディレクトリトラバーサルファイル名を指定する値の扱いの不備を突いて、サーバーの中の公開していないファイルを読み出したり書き換えたりする攻撃と、その原因となる脆弱性です。
- 脆弱性ソフトウェアや設定にある、攻撃に悪用されうるセキュリティ上の弱点です。
- セキュアコーディング脆弱性を作り込まないように、決まった書き方や確かめ方に沿ってプログラムを書くことです。
- WAFWebアプリケーションへの通信の中身を調べ、攻撃とみられる要求を止める仕組みです。