OSコマンド呼び出しの際に発生する脆弱性
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
OSコマンド呼び出しの際に発生する脆弱性
Webアプリケーションの開発に用いる言語の多くはシェル経由でOSコマンドの実行が可能。シェル経由でOSコマンドを実行する場合や、開発に用いた機能が内部的にシェルを用いて実装されている場合、意図しないOSコマンドまで実行可能になる場合がある
この現象をOSコマンド・インジェクションと呼ぶ
OSコマンド・インジェクション
脆弱性が生まれる原因
- シェル経由でOSコマンドを呼び出す際に、シェルのメタ文字がエスケープされていない場合
- シェル機能を呼び出せる関数を使用している場合
OSコマンド・インジェクション脆弱性が生まれる条件は、以下の3つをすべて満たしている場合
- シェルを呼び出す機能のある関数(system, openなど)を利用している
- シェル呼び出しの機能のある関数にパラメータを渡している
- パラメータ内に含まれるシェルのメタ文字をエスケープしていない
対策
- OSコマンド呼び出しを使わない実装方法を選択する
- 設計フェーズで対策方針を決定する
- シェル呼び出し機能のある関数の利用を避ける
- シェルを経由しない関数の使用
- 外部から入力された文字列をコマンドラインのパラメータに渡さない
- OSコマンドに渡すパラメータを安全な関数によりエスケープする