FIX:延伸預存程序可能發生的緩衝區溢位

文章翻譯 文章翻譯
文章編號: 280380 - 檢視此文章適用的產品。
本文曾發行於 CHT280380
BUG #:100932 (SQLBUG_70)
BUG #:100936 (SQLBUG_70)
BUG #:101013 (SQLBUG_70)
BUG #:351188 (SHILOH_bugs)
BUG #:351189 (SHILOH_bugs)
全部展開 | 全部摺疊

在此頁中

徵狀

隨附於 SQL Server 的數個延伸預存程序的缺點,可以讓配置在堆疊上的記憶體緩衝區被任意資料覆寫,可能會使攻擊者可以在 SQL Server 處理序空間中執行任意程式碼。這種任意程式碼可能用於簡單的用途,例如關閉伺服器,或繁衍可能用來控制伺服器的不同處理序。

發生的原因

srv_paraminfo 函式用於將呼叫者傳遞的資料複製到延伸預存程序 (被呼叫者) 配置的記憶體緩衝區中。如果被呼叫者把這個緩衝區配置在堆疊上,而且如果傳遞到延伸預存程序的資料比這個配置的空間大,剩餘的資料會被複製到堆疊上,就有可能覆寫在函式傳回時會執行的傳回位址。使用正確的資訊小心地建構緩衝區之後,就可以把任意指示放入伺服器的記憶體並允許執行。

解決方案

SQL Server 2000

如果要解決此問題,請取得 SQL Server 2000 的最新 Service Pack。如需額外資訊,請按一下下列文件編號以檢視 Microsoft Knowledge Base 中的文件:
290211 INF:How to Obtain the Latest SQL Server 2000 Service Pack
注意:下列 Hotfix 建立時間早於 Microsoft SQL Server 2000 Service Pack 1。

如果是 SQL Server 2000,這個修正程式的英文版應該具有下列 (或更新) 的檔案屬性:
   Version      File name
   -------------------------

   8.00.0223    Xprepl.dll
   8.00.0223    Xpstar.dll
   8.00.0223    Xpqueue.dll
   8.00.0223    Odsole70.dll
				


SQL Server 7.0

若要解決這個問題,請取得 Microsoft SQL Server 7.0 的最新 Service Pack。如需額外資訊,請按一下下列文件編號以檢視 Microsoft Knowledge Base 中的文件:
301511 INF:How to Obtain the Latest SQL Server 7.0 Service Pack
注意:下列 Hotfix 建立時間早於 Microsoft SQL Server 7.0 Service Pack 4。

此修正程式的英文版應該具有以下 (或更新) 的檔案屬性:
   Version      File name
   ------------------------

   7.00.0918    Xprepl.dll
   7.00.0918    Xpstar.dll
   7.00.0918    Replres.dll
				
注意:由於檔案的相依性,包含上述檔案的最新版 Hotfix 或功能也可能會包含其他檔案。若要安裝修補程式,請執行下列步驟:
  1. 閱讀位於下列網站的 Microsoft Security Bulletin MS00-092:
    http://www.microsoft.com/technet/security/bulletin/ms00-092.asp
  2. 您可以選取適合您 SQL Server 版本、處理器架構和語言的檔案,從以下位置下載修補程式:
    XP Security Downloads
  3. 如果要解壓縮檔案,請執行您下載的自動解壓縮執行檔。在解壓縮程序進行當中,您會收到檔案目的目錄位置的提示。請選擇一個空的暫存檔供解壓縮檔案使用。注意:Alpha 和 x86 版本的修補程式都必須在 x86 系統上執行,完成解壓縮的程序。

  4. 修補程式附有 Readme.txt 檔案,其中包含該套件的詳細安裝說明。請依照安裝說明,使用這些檔案更新您的系統。

狀況說明

Microsoft 已確認本文開頭所列產品確實有上述問題。

SQL Server 2000
這個問題已經在 SQL Server 2000 Service Pack 1 中首次獲得修正。

SQL Server 7.0
這個問題已經在 SQL Server 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
    					
這個修正程式會更正所有 Microsoft 隨附延伸預存程式中的問題。如果系統上也安裝了其他協力廠商延伸預存程序,如果系統使用開放式資料服務 (Open Data Services ) API srv_paraminfo,則可能會使用其中一個程序來進行這項攻擊。 如果您有協力廠商安裝的延伸預存程序,請聯絡該廠商以了解他們的程序是否會受到這種攻擊。

這種攻擊會針對太小而無法傳遞資料的緩衝區。若要無誤地確保傳遞資料的長度,您必須先用 srv_paraminfo 的第六個參數 pbData 當作 NULL。然後函式會傳回參數資料的實際長度。然後就可以配置大小適當的緩衝區,再進行第二次呼叫以擷取資料。srv_paraminfo 函式不允許您指定複製到緩衝區的最大資料長度。 如需其他資訊,請參閱《SQL Server 線上叢書》中的 srv_paraminfo 主題。

屬性

文章編號: 280380 - 上次校閱: 2003年3月5日 - 版次: 1.1
這篇文章中的資訊適用於:
  • Microsoft Links LS 2000
  • Microsoft CodeView 4.1
  • Microsoft Data Engine (MSDE) 1.0
  • Microsoft Multiplan 3.0
  • Microsoft BallPoint Mouse 1.0 Standard Edition
  • Microsoft SQL Server 7.0 Service Pack 2
關鍵字:?
kbbug kbfix kbsqlserv2000sp1fix KB280380
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com