汚染されたモジュロ演算子
残余演算 (%) のオペランドがセキュリティで保護されないソースに由来
説明
この欠陥は、残余演算 (%) 内の整数オペランドの一方または両方がセキュリティで保護されていないソースから取得された場合に発生します。
リスク
2 番目の残余オペランドが 0 である場合、残余演算は失敗し、プログラムはクラッシュします。
2 番目の残余オペランドが
-1である場合、オーバーフローし得る除算演算を基に残余演算が実装されていると、その残余演算はオーバーフローする可能性があります。オペランドの 1 つが負である場合、演算の結果は不確定になります。C89 ではモジュロ演算は標準化されていないため、負のオペランドによる結果は処理系定義となります。
こうしたリスクは、攻撃者によってプログラムあるいはターゲット一般へのアクセスに利用される場合があります。
修正方法
モジュロ演算を実行する前に、オペランドの値を検証します。2 番目のオペランドの値が 0 や -1 かどうかをチェックします。両方のオペランドの値が負の値かどうかをチェックします。
チェッカーの拡張
既定では、Polyspace® は外部ソースからのデータは汚染されていると仮定します。Polyspace 解析での汚染のソースを参照してください。Polyspace 解析の現在のスコープ以外から発生したすべてのデータを汚染されたものと見なすには、コマンド ライン オプション [-consider-analysis-perimeter-as-trust-boundary] を使用します。
例
結果情報
| グループ: 汚染されたデータ |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: TAINTED_INT_MOD |
| 影響度: Low |
バージョン履歴
R2015b で導入