OSコマンド・インジェクションとは
攻撃者のリクエストにより、不正なOSコマンドが実行されてしまう脆弱性である。
脆弱性の原理
ウェブページの入力欄やURLのクエリストリングなどに攻撃者がOSコマンドを含めることにより、意図しないOSコマンドを実行させることにつながる。
このとき、ウェブアプリケーション側がシェルに実行可能な形で入力を受け渡すことがOSコマンドの不正な実行に繋がっており、直接的な原因となっている。
脆弱性が悪用された際の影響
OSコマンド・インジェクションによるOSコマンドの実行はサーバ側に大きな影響があるばかりでなく、他システムへの攻撃にもつながってしまう。
- サーバ内のファイルを不正に操作される。
- 不正にシステムを操作される。
- 不正なプログラムがダウンロード、実行される。
- 他システムへの攻撃の踏み台にされる。
検査方法
ウェブアプリケーションの入力欄、URL中のクエリストリングにOSコマンドを入力し、実行されるかどうかを調べればいよい。
入力可能な欄に &/windows/system32/ping -n 21 127.0.0.1
と入力しリクエストを送信した際、20秒程度の遅延が発生した場合、脆弱性がある。
対策方法
対策の方針としてはシェルに入力値をそのままの形で引き渡さないことである。
プログラミング言語中には、ファイルの操作など、OSコマンドの機能を実装したメソッドを持っている場合が多いので、そうしたメソッドで代用することでシェルに入力値を引き渡す危険性はなくなる。
どうしてもシェルに入力値を引き渡す場合は、適切にエスケープ処理を行い、同時に複数のOSコマンドを実行できないようにする必要がある。