Tellur52の日記: C言語とOpenSSLとCVE-2016-2177とドヤ顔
日記 by
Tellur52
ptrdiff_tにすれば全て解決するだろうみたいな修正パッチが出ているけど、
それってなんか違うんじゃねーの、とか足りないんじゃないの、とか、
真剣にコードレビューしてから出さないとまずいんじゃないの、とか思ったり。
そりゃね、load effective addressした時点でmallocの境界チェックをして
例外で撥ねるようなセキュアな仕掛けが動くんなら、
たしかに明らかにDoS攻撃になるんだろうけど。
CVE-2016-2177の裏には本質的に3つの問題が潜在している。
1つ目はCPUの仕組み上仕方がないけど、ptrdiff_tはunsigned char *や
char *の差について、ビット長の制約により、意味論的に正しい符号の差を
必ずしも表せない点。
2つ目はC言語の問題で、演算のオーバーフローを無視する点。
最後は、OpenSSLの今回問題になっている個所のコードや関数インターフェースの
仕様の問題で、mallocの下位メモリ側のチェックは頑張っているけど、
上位メモリ側のチェックは呼び出し元に任せっぱなしなので、
範囲チェックの妥当性の検証が面倒な点。
そんなこと考えていると、STLの流儀はやや洗練されているよなとか思ったり。
C言語とOpenSSLとCVE-2016-2177とドヤ顔 More ログイン