コンテンツにスキップ

Improper Input Validation (不適切な入力検証)

ルール ID

MI101

定義

ソフトウェアは入力またはデータを受け取りますが、データを安全かつ正確に処理するために必要な性質を入力が備えているかを検証していない、あるいは検証が不適切です。

サンプル

次のコードは、CWE の該当コード サンプルの 1 つです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#define MAX_DIM 100
/* board dimensions */

int m,n, error;
board_square_t *board;
printf("Please specify the board height: \n");
error = scanf("%d", &m);
if ( EOF == error ){
  die("No integer passed: Die evil hacker!\n");
}
printf("Please specify the board width: \n");
error = scanf("%d", &n);
if ( EOF == error ){
  die("No integer passed: Die evil hacker!\n");
}
if ( m > MAX_DIM || n > MAX_DIM ) {
  die("Value too large: Die evil hacker!\n");
}
board = (board_square_t*) malloc( m * n * sizeof(board_square_t));

このコードは、ユーザーが大きな正の整数を指定してメモリを過剰に消費することがないようにチェックを行っていますが、負の値が指定されるケースをチェックしていません。結果として、攻撃者は、オーバーフローを発生させない 2 つの大きな負値を指定することでリソース消費 (CWE-400) 攻撃を実行し、結果として非常に大きなメモリ割り当て (CWE-789) や、場合によってはシステム クラッシュを発生させることができます。あるいは、攻撃者は整数オーバーフロー (CWE-190) を発生させる大きな負値を指定し、プログラムの他の部分で値がどのように処理されるかによって、予期しない後続の動作を発生させることができます。

参考資料

  • Common Weakness Enumeration: CWE-20