【注意】VCLライブラリの脆弱性[CVE-2014-0993]の影響範囲が広範囲な件
JVNDB-2014-004159 - JVN iPedia - 脆弱性対策情報データベース
エンバカデロ・テクノロジーズ
Embarcadero C++Builder XE6 20.0.15596.9843 本脆弱性は上記のバージョンで報告されました。VCL を含むその他の製品バージョンも影響を受ける可能性があります。 |
「Embarcadero Delphi」と「C++Builder」のVCLに脆弱性(JVN) | ScanNetSecurity (脅威、セキュリティホール・脆弱性のニュース)
Embarcadero Technologiesが提供する「Embarcadero Delphi」と「C++Builder」のVCLにバッファオーバーフローの脆弱性(CVE-2014-0993)が存在すると「Japan Vulnerability Notes(JVN)」で発表した。なお、VCLを含むその他の製品バージョンも影響を受ける可能性がある。
「Embarcadero Delphi XE6 Version 20.0.15596.9843」およびEmbarcadero C++Builder XE6 Version 20.0.15596.9843」に含まれているVCLは、BMPファイルの処理が原因でバッファオーバーフローの脆弱性が存在する。この脆弱性が悪用されると、細工されたBMPファイルを処理することで任意のコードを実行される可能性がある。JVNでは、開発者が提供する情報をもとに各製品をアップデートし、アプリを再構築するよう呼びかけている |
どこのサイトも XE6 の影響にしか言及していない…。
古いバージョンはどうなのか・ω・?
C++Builder XE7 | C++ development for Windows, Mac, iOS and Android
Delphi および C++Builder XE6 以前の製品(RAD Studio XE6以前に含まれる両製品を含む)、およびそれを用いて開発したアプリケーションで VCL の BMP ファイル読み込み処理が影響対象です。なお、FireMonkey アプリケーションならびにDelphi / C++Builder / RAD Studio XE7は影響対象外です。 |
なんか微妙な表現 ・ω・;
Corelabs site Delphi and C++ Builder VCL library Buffer Overflow
Delphi and C++ Builder VCL library Heap Buffer Overflow Advisory | Core Security
調べてみたら言及してるところがあった!
4. Vulnerable Packages
EmbarcaderoR C++BuilderR XE6 Version 20.0.15596.9843 We also found vulnerable applications that were built with the following development tools: Other 32b and 64b versions could be also affected. |
うわぁ、ほとんど全部じゃないですか!
C++Builder での 修正方法
まず、これをプロジェクトごとに指定。
1つ目
Source\vcl を開いて Graphics.pas を コピーしてプロジェクトに追加。
TMetafile.ReadEMFStream を検索して、以下のコードを追加
if
EnhHeader.nBytes < Sizeof(EnhHeader)then
InvalidMetafile;
TMetafile.ReadEMFStream ってことなので、 TMetaFile を EMF ファイルから Streamとして読み込んだ時だけ発現するかなり限定的な脆弱性であることが分かる。
なお、TMetafile.ReadEMFStream は TMetafile.LoadFromStream からも呼ばれる。
TMetafile* f = new TMetafile; TFileStream *fs = new TFileStream("D:\\test\\image2.emf", fmOpenRead); f->LoadFromStream(fs); |
テスト用コード
ちゃんとブレークポイント入ったね・ω・ OK
2つ目はちょっとわかりにくい場所
TBitMap.ReadDIB にコード追加
if
(biClrUsed * DIBPalSizes[OS2Format]) > (256 * SizeOf(TRGBQuad))then
InvalidGraphic({$IFNDEF CLR}
@{$ENDIF}
SInvalidBitmap);
2つ目は TBitmap の LoadFromFile でブレークポイントが発生した。
これはあまり潜在的じゃない。危険だ ・ω・!
というわけで、Bitmap 読み込みだけじゃなく 拡張メタファイル (EMF) を読み込んだ時の脆弱性でもあるようだ。
Comments