ABV.UNICODE.FAILED_MAP

バッファオーバーフロー - 失敗したマッピング関数で配列インデックスが範囲外

ABV.UNICODE.FAILED_MAP は、MultiByteToWideChar マッピング関数と WideCharToMultiByte マッピング関数の失敗によって引き起こされるバッファオーバーラン状態をチェックします。通常、このチェッカーは、ソースとターゲットのポインターが同じであるか、または変換された文字列を受け取るバッファを指すポインターが NULL であるが、次のパラメーター (バッファサイズ、文字単位) が 0 にセットされていない状態を検出します。

MultiByteToWideChar マッピング関数と WideCharToMultiByte マッピング関数の詳細については、MSDN の Web サイトを参照してください。

脆弱性とリスク

これらのマッピング関数を不適切に使用すると、バッファオーバーフローを引き起こしてアプリケーションのセキュリティが低下する可能性があります。この潜在的な状態を避けるには、バッファが受け取るデータ型に適したバッファサイズを指定することが重要です。

脆弱コード例 1

コピー
  int
  foo1 (void *src, int size) {
    int res;
    res = WideCharToMultiByte(CP_ACP, 0, src, -1, 0, 3, 0, 0);
    if (res) return res;
    res = WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, size, 0, 0);
    if (res) return res;
    return WideCharToMultiByte(CP_ACP, 0, src, -1, 0, 0, 0, 0);

Klocwork は、変換された文字列を受け取るバッファを指すポインターが NULL であるが、4 行目でサイズのバイト数が 0 ではなく 3 に設定されているため、無効なパラメーターをレポートします。この場合は、バッファサイズのパラメーターは変換された文字列のバッファポインターに対応していません。

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、C/C++ 解析のチューニングを参照してください。