汚染されたポインターの使用
セキュリティで保護されないソースに由来するポインターは NULL であるか不明なメモリを指している可能性がある
説明
この欠陥は、以下の場合に発生します。
汚染された NULL ポインター — セキュリティで保護されていないソースから取得したポインターが NULL に対し検証されていない。
汚染されたサイズ ポインター — セキュリティで保護されていないポインターが指しているメモリ ゾーンのサイズが検証されていない。
メモ
単一のポインターについて、コードに汚染されたポインターの使用、汚染されたオフセットによるポインターのデリファレンス、汚染された NULL 文字列または非 NULL 終端文字列の各インスタンスが含まれることがあります。Bug Finder では、最初に見つかった汚染されたポインターの欠陥のみが報告されます。
リスク
攻撃者は、予期しないメモリ位置を指すポインターをプログラムに与えることが可能です。ポインターのデリファレンスにより書き込みを行う場合、攻撃者は次のことができます。
重要なプログラムの状態変数を変更する。
プログラムをクラッシュさせる。
望ましくないコードを実行する。
ポインターのデリファレンスにより読み取りを行う場合、攻撃者は次のことができます。
機密データを読み取る。
プログラムをクラッシュさせる。
プログラム変数を予期しない値に変更する。
修正方法
外部ソースに由来するポインターの使用を避けます。
または、外部ソースを信頼する場合、デリファレンスする前にポインターをサニタイズします。個別のサニタイズ関数で以下を実行します。
ポインターが NULL ではないことをチェック。
メモリ位置のサイズをチェック (可能な場合)。この 2 番目のチェックは、ポインターが指すデータのサイズがプログラムに必要なサイズと一致するかどうかを検証します。
サニタイズ関数の本体には、この欠陥がまだ表示されます。ただし、サニタイズ関数を使用する場合は、欠陥は複数回ではなく 1 回だけ表示されます。後のレビューでコード注釈を使用して、この欠陥を正当化し非表示にできます。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
チェッカーの拡張
既定では、Polyspace® は外部ソースからのデータは汚染されていると仮定します。Polyspace 解析での汚染のソースを参照してください。Polyspace 解析の現在のスコープ以外から発生したすべてのデータを汚染されたものと見なすには、コマンド ライン オプション [-consider-analysis-perimeter-as-trust-boundary] を使用します。
例
結果情報
| グループ: 汚染されたデータ |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: TAINTED_PTR |
| 影響度: Low |
バージョン履歴
R2015b で導入