ニュース

四半世紀以上気付かれずにいた脆弱性、EmbarcaderoのC/C++ランタイムライブラリで発見

特定条件下でバッファーオーバーフローの可能性

同社が提供するパッチのうち、重要な部分

 米Embarcadero Technologiesは7月24日(現地時間)、同社のC/C++ランタイムライブラリ(RTL)にバッファーオーバーフローの脆弱性があることを明らかにした。この問題は1997年に実装されたコードに起因しているという。実装されてから現在に至るまで悪用された事例はないとのこと。

 本脆弱性は、以下のメソッドに影響する。おもに現在の作業ディレクトリを取得するPOSIX関数「getcwd」を「wchar_t」(UNICODE)や「_TCHAR」(ANSI/UNICODE)にマップしたメソッドやマクロだ。

  • _wgetcurdir
  • _wsearchstr
  • _tgetdcwd
  • _tgetcwd

 これらのメソッドはバッファーとして「null」が渡されたとき、自分でバッファーを確保しようとするが、Unicodeビルドでは必要な領域の半分しか割り当てない。そのため、現在の作業ディレクトリ名の一部がバッファの境界を超えて書き込まれる可能性がある。

 影響範囲は、以下の開発環境でビルドしたアプリケーションだ。「C++Builder」および「RAD Studio」の将来のバージョンでは、あらかじめ修正済みのRTLが適用されるため、この問題は発生しない。

  • 「C++Builder Community Edition」の過去バージョン
  • 無償版「C++ Compiler」の過去バージョン
  • 「C++Builder」v12.1を含む過去バージョン

 上述したメソッドやマクロを使用している場合のほかにも、Windows向けクラシックWin32 Clang(bcc32c)、および古いWin64 Clang(Clang v5)ツールチェーン(bcc64)でC++プロジェクトをビルドしている場合にも影響するとのことなので注意したい。

 同社は、以下の軽減策をとるよう呼び掛けている。

  • 問題となるメソッドやマクロが使われていればパッチを適用してRTLを再構築する
  • 事前に割り当てられたバッファーをメソッドに渡す
  • Windows APIの「GetCurrentDirectory」に置き換える

 なお、STLや64bit版Windows 64の新しいモダンC++ツールチェーン(bcc64x)でビルドされたアプリケーションには影響しない。「C++Builder」や「RAD Studio」のIDE本体にも脆弱性はない。