您目前已離線,請等候您的網際網路重新連線

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

本文曾發行於 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:
  2. 您可以選取適合您 SQL Server 版本、處理器架構和語言的檔案,從以下位置下載修補程式:
  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 主題。
ods xproc
內容

文章識別碼:280380 - 最後檢閱時間:03/05/2003 09:08:00 - 修訂: 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
意見反應