説明
利用者が制御する値でメモリの書き込み先ポインターを選ぶと、攻撃者が意図しないアドレスを上書きできる可能性があります。
想定される影響
- メモリ破損、権限昇格、サービス拒否、コード実行につながるおそれがあります。
対処方法
外部から指定されたアドレスを書き込み用ポインターに使わないでください。アプリケーションが所有するオブジェクトやバッファーを選び、書き込みサイズがその範囲内に収まることを確認してください。
例
変更前
呼び出し元がrequest->destinationの書き込み先ポインターを直接指定できるものとします。
c
int *where = request->destination;
*where = 1;
変更後
c
int value = 0;
int *where = &value;
*where = 1;
変更前はリクエストが指定したポインターを検証せずに参照して書き込みます。変更後は、関数が所有するローカル変数だけを書き込み先にします。