マイクロソフトは6月13日,SQL Server 2000に含まれるコンポーネント「SQLXML」にセキュリティ・ホールがあることを明らかにした。Internet Information Server/Services(IIS)経由でSQL Serverに直接クエリーを送信できるシステムを構築している場合,ある細工が施されたクエリー(リクエスト)を受信すると,IISサーバー上で任意のコード(プログラム)を実行される恐れがある。併せて,SQLXMLにはクライアントが影響を受けるセキュリティ・ホールも見つかっている。いずれも,パッチを適用すれば回避できる。
SQLXMLは,SQL ServerへのクエリーやSQL Serverからの結果をXMLで送受信できるようにするモジュール(機能)。SQL Server 2000の一部としてインストールされる。SQLXMLを使うことで,IISを経由させて,WebブラウザからSQL Serverへクエリーを送信できるとともに,その結果をブラウザに表示させることができる。ただし,IISを経由させるためには,IISマシンに「SQLXML HTTP コンポーネント」というISAPIエクステンションをインストールし,IISの設定を変更する必要がある。
今回のセキュリティ・ホールは,このISAPIエクステンションが原因である。このISAPIエクステンションには,バッファ・オーバーフローの不具合があるために,細工が施されたリクエストを送信されると,任意のコードを実行させられたり,IISのサービスを停止させられたりする。任意のコードはLocalSystem権限で実行される。
米Microsoftが公開する情報によれば,IISとSQL Serverを同じマシンにインストールしても,デフォルトではSQLXMLは使用可能にはならないので影響を受けないという。また,IIS経由でSQL Serverに直接クエリーを送信できるようなシステムは,通常イントラネットに構築されるので,外部から攻撃を受けることはないとしている。
上記に加えて,もう一つSQLXMLのセキュリティ・ホールが同時に公開された。悪用されると,SQLXMLを使用するSQL Server 2000サーバーのユーザー(クライアント)が被害を受ける恐れがある。具体的には,インターネット上のサーバーから送り送り込まれたスクリプトを,「インターネット・ゾーン」のセキュリティ設定ではなく,「イントラネット・ゾーン」などの設定で実行させられる恐れがある。
原因は,XMLでやり取りされるデータに含まれるあるパラメータを,SQLXMLがきちんとチェックしないこと。あるパラメータについては,その値としてスクリプトを含めてしまう。そのため,クロス・サイト・スクリプティングと同様の攻撃が可能となる(クロス・サイト・スクリプティングについては,マイクロソフトの「クロスサイト スクリプティングのセキュリティ上の脆弱性に関する情報」など に詳しい)。
まず攻撃者は,自分が細工したWebページへユーザーを誘導する。そのページには,クエリーと上述のパラメータとスクリプトを,SQLXMLを使用しているSQL Server(正確には,IIS)へ送信するようなリンクを用意しておく。ユーザーがそのリンクをクリックすると,クエリーとスクリプトがSQL Serverへ送信され,SQL Serverからは,結果とスクリプトがIISを経由してユーザーへ送信される。
ユーザーが受信した結果とスクリプトは,ブラウザ上に表示される。このとき,スクリプトはIISサーバーに対するセキュリティ設定で解釈される。つまり,スクリプトが置かれていた攻撃者のページがインターネット上にあったとしても,IISサーバーがイントラネットにある場合には,「インターネット・ゾーン」よりも制限が緩い「イントラネット・ゾーン」のセキュリティ設定で,スクリプトは実行されてしまう。
ただしこの攻撃を成功させるには,攻撃者はSQLXMLを使用しているサーバーを知らなければならず,また,そのサーバーへのアクセス権限を持つユーザーを誘導しなければならない。
上記2つのセキュリティ・ホールは,いずれもパッチを適用すれば回避できる。なお,SQLXMLのバージョンによって適用すべきパッチが異なる。マイクロソフトの情報を参照して,バージョンを確認してから適用する必要がある。
◆MS02-030 に関する情報(要約情報およびパッチ,マイクロソフト)
◆Unchecked Buffer in SQLXML Could Lead to Code Execution (Q321911)(英語情報,米Microsoft)
◆SQLXML の未チェックのバッファによりコードが実行される (Q321911) (MS02-030)(マイクロソフト)