[FIX] SQL Server で提供している拡張ストアドプロシージャでバッファオーバーフローが発生する

この記事は、以前は次の ID で公開されていました: JP280380
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
SQL Server で提供している一部の拡張ストアド プロシージャの欠陥により、スタックに割り当てられたメモリ バッファが任意のデータで上書きされる場合があります。その結果、攻撃者が SQL Server プロセス空間で任意のコードを実行できる場合があります。この任意のコードが、サーバーの制御に使用される別のプロセスを起動することにより、サーバーをシャットダウンさせるなどの単純な目的で使用される可能性があります。
原因
srv_paraminfo 関数は、呼び出し元から渡されたデータを、拡張ストアド プロシージャ (呼び出し先) が割り当てるメモリ バッファにコピーするために使用されます。呼び出し先がこのバッファをスタックに割り当てた場合、かつ拡張ストアド プロシージャに渡されたデータがこの割り当てられた領域よりも大きい場合、残りのデータがスタックにコピーされることがあります。その結果、関数が戻るときに実行するリターン アドレスを上書きすることがあります。正確な情報を使用して注意深くバッファを構成すると、任意のコマンドをサーバーのメモリに配置して実行できます。
解決方法

SQL Server 2000

この問題を解決するために、SQL Server 2000 の最新の Service Pack の適用をお願いいたします。
最新の SQL Server サービスパックのダウンロードおよびインストールについて詳しくは以下をご覧下さい。
290211 最新の SQL Server 2000 Service Pack の入手方法
: 以下の修正プログラムは、Microsoft SQL Server 2000 Service Pack 1 のリリース前に作成されました。

SQL Server 2000 用の修正ファイルの属性は次のとおりです。ただし、これより新しい修正ファイルがリリースされている可能性もあります。
   バージョン      ファイル名   -------------------------   8.00.0223    Xprepl.dll   8.00.0223    Xpstar.dll   8.00.0223    Xpqueue.dll   8.00.0223    Odsole70.dll

SQL Server 7.0

この問題を解決するために、 SQL Server 7.0 の最新の Service Pack の適用をお願いいたします。
最新の SQL Server サービスパックのダウンロードおよびインストールについて詳しくは以下をご覧下さい。 : 以下の修正プログラムは、Microsoft SQL Server 7.0 Service Pack 4 のリリース前に作成されました。

修正ファイルの属性は次のとおりです。ただし、これより新しい修正ファイルがリリースされている可能性もあります。
   バージョン      ファイル名   ------------------------   7.00.0918    Xprepl.dll   7.00.0918    Xpstar.dll   7.00.0918    Replres.dll
: ファイルの依存関係により、上記のファイルを含む最新の修正プログラムまたは機能がその他のファイルに含まれる場合もあります。修正プログラムをインストールするには、以下の手順に従います。
  1. 次の Web サイトにあるマイクロソフト セキュリティ情報MS00-092 を参照します。
  2. お使いの SQL Server のバージョン、プロセッサのアーキテクチャ、および言語に応じて適切なファイルを選択し、次の場所から修正プログラムをダウンロードします。
  3. ファイルを解凍するには、ダウンロードした自己解凍形式の実行可能プログラムを実行します。解凍処理中に、ファイルの解凍先ディレクトリを指定するよう求められます。ファイルを解凍するための空の一時ディレクトリを選択します。 : 修正プログラムの Alpha、x86 の両バージョンとも、解凍は x86 ベースのシステムで実行する必要があります。

  4. 修正プログラムに含まれている Readme.txt ファイルには、個別のパッケージに対するインストールの詳しい説明があります。その手順に従い、これらのファイルを使用してシステムを更新します。
状況
弊社では、これをこの資料の冒頭に記載したマイクロソフト製品の問題として確認しています。

SQL Server 2000

この問題は Microsoft SQL Server version 2000 Service Pack 1 で修正されています。

SQL Server 7.0

この問題は Microsoft SQL Server version 7.0 Service Pack 4 で修正されています。
詳細
以下は、この問題の影響を受ける拡張ストアド プロシージャの一覧です。
  • SQL Server 7.0
             xp_sqlinventory
  • SQL Server 7.0 および SQL Server 2000
             xp_sqlagent_monitor
  • SQL Server 2000 のみ
             sp_OACreate         sp_OAMethod         sp_OAGetProperty         sp_OASetProperty         sp_OADestroy

この修正プログラムにより、マイクロソフトが同梱しているすべての拡張ストアド プロシージャの脆弱性は修正されます。システムに他のサード パーティの拡張ストアド プロシージャもインストールされていて、それがオープン データ サービス API の srv_paraminfo を使用している場合、それらのプロシージャのいずれかを使用することにより、この攻撃を受けることがあります。サードパーティ製の拡張ストアド プロシージャをインストールしている場合、その製造元に連絡し、それらのプロシージャがこの攻撃に対する脆弱性があるかどうか確認してください。

この脆弱性は、渡されるデータに対して使用しているバッファが小さすぎる点を利用します。渡されるデータの長さを正確に確認するには、まず第 6 パラメータpbDataに NULL を指定して srv_paraminfo を呼び出す必要があります。その結果、この関数はパラメータのデータの正確な長さを返します。適切なサイズのバッファが割り当てられた後で、2 回目の呼び出しが実行され、データを取得できます。srv_paraminfo 関数では、バッファにコピーするデータの最大長を指定することはできません。詳細については、SQL Server Books Online の「srv_paraminfo」を参照してください。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 280380 (最終更新日 2002-04-25) を基に作成したものです。
ods xproc
プロパティ

文書番号:280380 - 最終更新日: 12/05/2015 22:55:44 - リビジョン: 4.5

Microsoft SQL Server 7.0 Service Pack 2, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 7.0 Service Pack 1, Microsoft SQL Server 2000 Standard Edition, Microsoft Data Engine 1.0, Microsoft SQL Server 2000 Desktop Engine (Windows)

  • kbnosurvey kbarchive kbbug kbfix kbsqlserv2000bug kbsqlserv2000sp1fix kbsqlserv700bug KB280380
フィードバック