Microsoft SQL Server:多数の拡張ストアド・プロシージャでのバッファ・オーバーフロー | ScanNetSecurity
2026.01.12(月)

Microsoft SQL Server:多数の拡張ストアド・プロシージャでのバッファ・オーバーフロー

[翻訳:関谷 麻美]
2002年3月16日

国際 海外情報
[翻訳:関谷 麻美]
2002年3月16日

◆概要:
 Microsoft SQL Server は、データベースの範囲外の DLL にある機能を呼び出す能力を提供する。拡張ストアド・プロシージャと呼ばれるそれらの機能は、大いにMicrosoft SQL Server の機能を拡張する。それらの機能はオペレーティング・システム(OS)もしくはネットワークにアクセスする際に使用される。
そして数百本が Microsoft SQL Server に同梱されており、管理者はデータベース用にカスタマイズした拡張ストアド・プロシージャを付け加えることができる。
 Microsoft SQL Server 7 および 2000 にある多数の拡張ストアド・プロシージャは、バッファ・オーバーフローを含む。それらのバッファ・オーバーフローは、いくつかのシナリオを引き起こす。
1- データベース・サーバのクラッシュ
2- スタックに割り当てられたメモリが上書きされる(例外が発生する関数呼び出し戻り番地を含む)。

 それらのバッファ・オーバーフローは、長い文字列のデータをパラメータとして拡張ストアド・プロシージャに渡すと発生する。それらのバッファ・オーバーフローの大部分は、大容量の Unicode バッファを渡したことに起因する。
それらのバッファ・オーバーフローはUnicode 文字列に基づく。しかし、それらを利用することは、"Venetian" 攻略手段のような方法と仮定すると特別に難しいものではない。"Venetian" 攻略手段は、Unicode バッファを使用して任意のシェルコードに書き込むことを可能にする。

◆詳細:
脆弱なシステム:
Microsoft SQL Server 7
Microsoft SQL Server 2000
下記の拡張ストアド・プロシージャは脆弱だ。

xp_controlqueueservice
xp_createprivatequeue
xp_createqueue
xp_decodequeuecmd
xp_deleteprivatequeue
xp_deletequeue
xp_displayqueuemesgs
xp_dsninfo
xp_mergelineages
xp_oledbinfo
xp_proxiedmetadata
xp_readpkfromqueue
xp_readpkfromvarbin
xp_repl_encrypt
xp_resetqueue
xp_sqlinventory
xp_unpackcab

 Cesar Cerrudo (sqlsec@yahoo.com)の発見に基づき、上記に列挙された拡張ストアド・プロシージャは、任意のシェルコードをスタックに挿入することを可能にするバッファ・オーバーフローを含む。

 多数の拡張ストアド・プロシージャはデフォルトで、パブリックグループ権限に認定される。パブリックグループ権限となるそれらのグループは、高い権限を持たないユーザも OS およびデータベースを完全に制御するのを可能にする。デフォルトでパブリックグループ権限にされていない拡張ストアド・プロシージャの場合でも、いくつかの懸念が依然として残る。

1)あるインスタンス用のDBA は そのサーバ上のプログラム、他のインスタンス、そして OS の完全な制御権を所得できる。
2)DBA が高い権限を持たないユーザに対し、それらの拡張ストアド・プロシージャの一つを実行することを許可した場合、そのユーザはシステムの完全な制御権を取得できる。

 渡されるデータタイプやサイズに関して拡張ストアド・プロシージャで仮定しているために、この問題が発生する。拡張ストアド・プロシージャは、他の関数のようにパラメータを直接受け取らない。代わりに、拡張ストアド・プロシージャは、API 関数のセットを用いて渡されるパラメータを受け取る。その中で最も重要なのは、svr_paraminfo だ。下記は、この関数の定義だ。

int srv_paraminfo (
SRV_PROC * srvproc,
int n,
BYTE * pbType,
ULONG * pcbMaxLen,
ULONG * pcbActualLen,
BYTE * pbData,
BOOL * pfNull );

 ストアド・プロシージャはチェックして、渡される各パラメータのデータタイプおよび長さを求める。varchar は 8000 文字に制限され、nvarchar は 4000 文字に制限される。しかし、最大長 2^30 - 1 (1,073,741,823) 文字をもつ ntext データタイプが nvarchar を期待するパラメータに渡され、そして拡張ストアド・プロシージャがそのパラメータをより小さい nvarchar 用に生成されたバッファにコピーする場合、スタックは上書きされる。

 SHATTER チームにより実行された内部バッファ・オーバーフローに関するさらなる調査は、下記の URL で入手可能だ。
http://www.appsecinc.com/resources/alerts/mssql/02-0000.html

◆追加情報:
 Cesar Cerrudo がそれらの脆弱性を発見した。

[情報提供:SecuriTeam]
http://www.securiteam.com/

《ScanNetSecurity》

特集

PageTop

アクセスランキング

  1. 「攻撃者の高い執念が感じられ」る 日本語版 EmEditor Web サイトのリンク改変

    「攻撃者の高い執念が感じられ」る 日本語版 EmEditor Web サイトのリンク改変

  2. EmEditor「公式サイトからダウンロードしたお客様が被害に遭われた点に重い責任を感じて」いる

    EmEditor「公式サイトからダウンロードしたお客様が被害に遭われた点に重い責任を感じて」いる

  3. 埼玉大学で在学生 8,373 名の学籍番号及び GPA 等を含む個人情報が閲覧可能に

    埼玉大学で在学生 8,373 名の学籍番号及び GPA 等を含む個人情報が閲覧可能に

  4. クリックしていないのにアダルトサイトに登録させる「ゼロクリック詐欺」(シマンテック)

    クリックしていないのにアダルトサイトに登録させる「ゼロクリック詐欺」(シマンテック)

  5. 人気米Youtuberが約4億円で購入した「ポケモンカード」、包装に改ざん跡

    人気米Youtuberが約4億円で購入した「ポケモンカード」、包装に改ざん跡

ランキングをもっと見る
PageTop