重要情報 advisory名: - Microsoft SQL Server における複数のバッファ・オーバーフローおよびフォーマット文字列の脆弱性 公開日: - 2001年12月20日 対象アプリケーション: - Microsoft SQL Server 7.0および2000 プラットフォーム: - Microsoft Windows NT 4.0、2000およびXP 深刻度: - データベース・ユーザーが任意のコードを実行するか、サーバーのサービス拒否(DoS)を引き起こすことができる 著者: - Chris Anley [chrisanley@hushmail.com] および Chris Wysopal [cwyso@atstake.com] ベンダーの状況: - ベンダーが注意喚起とパッチを公開している CVE候補番号: - CAN-2001-0542 参考文献: - http://www.atstake.com/research/advisories/2001/a122001-1.txt 概要 本注意喚起では、Microsoft SQL Server 7.0および2000における複数の脆弱性を説明しています。これらの脆弱性により、攻撃者はSQL Serverが実行されているアカウント(通常は管理者)のコンテキスト内で任意のコードを実行することができます。 詳細説明 SQL Serverは、エラーメッセージをフォーマットするためにCスタイルの書式指定子に基づく組み込み関数を提供しています。これらの組み込み関数はすべてのユーザーに対してアクセス可能です。これらの関数に対して悪意を持って作成された入力を与えると、SQL Serverプロセス内で攻撃可能なエラー状態が発生します。この攻撃を開始するには、攻撃者は直接実行するか、またはSQLコマンド注入の脆弱性を悪用してSQLクエリを実行する権限を持っている必要があります。 raiserror()関数はすべてのユーザーにアクセス可能であり、過大な長さ指定子を指定することができます。これにより、攻撃可能なオーバーフローが発生します。さらに、フォーマット文字列の指定子を使用することで、攻撃者はメモリ内の任意のアドレスを上書きすることが可能になります。これにより、任意のコードの実行につながる可能性があります。 formatmessage()組み込み関数はすべてのユーザーにアクセス可能です。特定に作成されたメッセージを作成することで、任意のユーザーがメッセージ内に含まれる悪意のあるコードの連続実行を引き起こすことができます。 xp_sprintf拡張ストアド・プロシージャ(デフォルトではパブリック・ロールからアクセス可能)では、過大な長さ指定子を指定することができます。これにより、攻撃可能なオーバーフローが発生します。 提案 ベンダーのパッチを適用する 信頼できないユーザーがSQL Serverに直接接続することを許可しない。これを実現するための方法として以下のものが挙げられます: - SQL Serverネットワークユーティリティを使用して、使用されていない接続「プロトコル」をすべて削除する - ファイアウォールなどのネットワーク・パケットフィルタリング装置を使用する - Windows 2000のIPセキュリティ・フィルタを構成し、信頼できる接続のみを許可する