任意のメモリ書き込み

任意のメモリ書き込み

説明

利用者が制御する値でメモリの書き込み先ポインターを選ぶと、攻撃者が意図しないアドレスを上書きできる可能性があります。

想定される影響

  • メモリ破損、権限昇格、サービス拒否、コード実行につながるおそれがあります。

対処方法

外部から指定されたアドレスを書き込み用ポインターに使わないでください。アプリケーションが所有するオブジェクトやバッファーを選び、書き込みサイズがその範囲内に収まることを確認してください。

例

変更前

呼び出し元がrequest->destinationの書き込み先ポインターを直接指定できるものとします。

c
int *where = request->destination;
*where = 1;

変更後

c
int value = 0;
int *where = &value;
*where = 1;

変更前はリクエストが指定したポインターを検証せずに参照して書き込みます。変更後は、関数が所有するローカル変数だけを書き込み先にします。

参考資料