エントリーの編集
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
記事へのコメント1件
- 注目コメント
- 新着コメント
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
operator newの隠れた整数オーバーフローとVisualStudio 2005のVC++ - memologue
void vuln(std::size_t nelem) { int* p = new int[nelem]; std::memset(p, 12345, nelem); }上記の関数... void vuln(std::size_t nelem) { int* p = new int[nelem]; std::memset(p, 12345, nelem); }上記の関数には整数オーバーフローに起因するヒープベースバッファオーバーフローの脆弱性があるんですが、どこがまずいかわかりますか? まずいのはnewしている部分です。C++コンパイラは内部で、nelem * sizeof(int) 、つまりnelem * 0x4U を計算してから、その結果を引数にしてoperator newをcallするんですが*1、もしnelemの値が 0x40000001U だったりしたらどうなるでしょうか?これを4倍した値は0x100000004ですが、33bit目より上は捨てられてしまうので、結局計算値は 4 になります。つまり、vuln(0x40000001U); という呼び出しの中では、ne
2006/03/21 リンク