C/C++ランタイムライブラリにバッファオーバーフローの脆弱性、1997年実装のコードに起因

text: XEXEQ編集部


記事の要約

  • C/C++ RTLにバッファオーバーフローの脆弱性
  • Unicodeビルドの特定メソッドに影響
  • パッチ適用またはWindows API利用を推奨

C/C++ランタイムライブラリのバッファオーバーフロー脆弱性と対策

Embarcadero Japan Supportは2024年7月24日、C/C++ランタイムライブラリ(RTL)に潜在的なバッファオーバーフローの脆弱性が存在することを公表した。この問題は1997年に実装されたコードに起因しており、現在まで悪用された事例は報告されていないものの、安全性と公開性を確保するため、問題箇所の開示と修正方法が案内された。[1]

影響を受けるのは、_wgetcurdir、_wsearchstr、および「_t」バリアントの _tgetdcwd と _tgetcwd といったメソッドで、これらは現在の作業ディレクトリを取得する機能を持つ。特にUnicodeビルドにおいて、nullバッファが渡された際に必要な領域の半分しか割り当てられず、ディレクトリ名の一部がバッファの境界を超えて書き込まれる可能性がある。

この脆弱性は、Windows向けのクラシックWin32 Clang(bcc32c)および古いWin64 Clang(bcc64)ツールチェーンでビルドされたC++プロジェクトに影響する。一方で、STLや新しいモダンC++ツールチェーン(bcc64x)でビルドされたアプリケーション、およびC++BuilderやRAD StudioのIDE自体には影響がないことが確認されている。

影響範囲 対策方法 影響を受けないもの
特徴 Unicodeビルド パッチ適用 STL
対象ツールチェーン Win32 Clang, 古いWin64 Clang Windows API利用 新しいモダンC++ツールチェーン
影響を受けるメソッド _wgetcurdir, _wsearchstr等 RTL再構築 C++Builder, RAD Studio IDE

バッファオーバーフローについて

バッファオーバーフローとは、プログラムがバッファ(データを一時的に保存する領域)に割り当てられたメモリ領域を超えてデータを書き込んでしまう現象のことを指しており、主な特徴として以下のような点が挙げられる。

  • メモリ破壊によるプログラムの異常動作や crash の原因となる
  • セキュリティ上の脆弱性として悪用される可能性がある
  • C言語や C++ などの低レベル言語で特に注意が必要

バッファオーバーフローは、プログラマーが適切な境界チェックを行わずにデータをバッファに書き込む際に発生する。この問題は、攻撃者によって悪用されると、任意のコード実行やシステムへの不正アクセスなどの深刻な脅威につながる可能性がある。そのため、開発者はバッファサイズの適切な管理や安全な関数の使用など、プログラミング時に細心の注意を払う必要がある。

C/C++ランタイムライブラリの脆弱性に関する考察

C/C++ランタイムライブラリの脆弱性が長期間にわたって発見されなかったことは、レガシーコードの継続的な検証の重要性を浮き彫りにしている。今後、同様の潜在的な脆弱性が他のライブラリやフレームワークで発見される可能性も否定できず、特に広く使用されているオープンソースプロジェクトにおいては、セキュリティ研究者やコミュニティによる継続的な監査が不可欠になるだろう。

この問題を契機に、開発者コミュニティではメモリ安全性を重視した言語やツールの採用が加速する可能性がある。特にRustのような安全性を重視した言語の採用や、静的解析ツールの積極的な利用が進むことで、同様の脆弱性の早期発見や予防につながると期待される。また、コンパイラベンダーには、より強力な警告やエラー検出機能の実装が求められるようになるだろう。

長期的には、この事例を教訓として、ソフトウェア開発プロセスにおけるセキュリティレビューの重要性が再認識されるはずだ。特に、レガシーコードの定期的な見直しや、新しいセキュリティ知見に基づいたコードのリファクタリングが標準的なプラクティスとして確立されることが望まれる。こうした取り組みにより、ソフトウェアの品質と信頼性の向上につながることが期待される。

参考サイト

  1. ^ Microsoft Teams Blog. 「Windows resiliency: Best practices and the path forward - Microsoft Community Hub」. https://techcommunity.microsoft.com/t5/windows-it-pro-blog/windows-resiliency-best-practices-and-the-path-forward/ba-p/4201550, (参照 24-07-27).

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「プログラミング」に関するコラム一覧「プログラミング」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。