固定長バッファーのオーバーフロー

固定長バッファーのオーバーフロー

説明

固定長のスタックバッファーに容量を超えるバイト数をコピーしたり読み込んだりすると、隣接するスタックメモリを上書きするおそれがあります。

想定される影響

  • クラッシュ、データ破損、制御フローの乗っ取りにつながる可能性があります。

対処方法

書き込み先バッファーの容量以内の長さを指定し、サイズを自動的に取得するラッパーを使用してください。

例

変更前

c
char buf[8];
memcpy(buf, src, 32);

変更後

c
char buf[8];
memcpy(buf, src, sizeof(buf));

解説:

  • 変更前: 8バイトのバッファーに32バイトをコピーしています。
  • 変更後: 書き込み先の配列サイズでコピー長を制限します。この例は src から8バイト以上を読み取れることを前提とするバイトコピーであり、文字列の終端文字は追加しません。

参考資料