ABV.UNICODE.SELF_MAP
バッファオーバーフロー - 失敗したマッピング関数で配列インデックスが範囲外
ABV.UNICODE.SELF_MAP は、MultiByteToWideChar マッピング関数と WideCharToMultiByte マッピング関数の失敗によって引き起こされるバッファオーバーラン状態をチェックします。通常、このチェッカーは、マッピング関数のソースポインターとターゲットポインターが同じである場合のエラー状態を検出します。
MultiByteToWideChar マッピング関数と WideCharToMultiByte マッピング関数の詳細については、MSDN の Web サイトを参照してください。
脆弱性とリスク
これらのマッピング関数を不適切に使用すると、バッファオーバーフローを引き起こしてアプリケーションのセキュリティが低下する可能性があります。この潜在的な状態を避けるには、バッファが受け取るデータ型に適したバッファサイズを指定することが重要です。
脆弱コード例
コピー
int
foo(void *src, int size) {
WideCharToMultiByte(CP_ACP, 0, (wchar_t)src, -1, src, size, 0, 0);
MultiByteToWideChar(CP_ACP, 0, src, -1, src, 30);
}
Klocwork は、この例の 3 行目と 4 行目の両方について、ソースポインターとターゲットポインターが同じではいけないことを指摘するメッセージを生成します。チェッカーは、WideCharToMultiByte マッピング関数と MultiByteToWideChar マッピング関数の失敗がバッファオーバーラン状態を引き起こしたと検出しました。
関連チェッカー
外部参考資料
- CERT ARR00-C: 配列の仕組みを理解する
- CERT ARR30-C: 範囲外のポインターまたは配列添え字を形成したり使用したりしない
- CERT ENV01-C: 環境変数のサイズについて仮定を行わない
- CWE-119: メモリバッファの範囲内の操作の不適切な制限
- CWE-124: バッファアンダーライト ('バッファアンダーフロー')
- CWE-125: 範囲外の読み取り
- CWE-176: ユニコードエンコーディングの不適切な取り扱い
- CWE-787: 範囲外の作成
- CWE-806: ソースバッファのサイズを使用したバッファアクセス
- STIG-ID:APP3590.1 バッファオーバーフローに脆弱なアプリケーション
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、C/C++ 解析のチューニングを参照してください。