Microsoft ASN.1庫BER解碼堆破壞漏洞
受影響系統:
Microsoft Windows XP Professional SP1
Microsoft Windows XP Professional
Microsoft Windows XP Home SP1
Microsoft Windows XP Home
Microsoft Windows NT 4.0SP6a
Microsoft Windows NT 4.0SP6
Microsoft Windows NT 4.0SP5
Microsoft Windows NT 4.0SP4
Microsoft Windows NT 4.0SP3
Microsoft Windows NT 4.0SP2
Microsoft Windows NT 4.0SP1
Microsoft Windows NT 4.0
Microsoft Windows 2003
Microsoft Windows 2000SP4
Microsoft Windows 2000SP3
Microsoft Windows 2000SP2
Microsoft Windows 2000SP1
Microsoft Windows 2000
描述:
--------------------------------------------------------------------------------
CVE(CAN) ID: CAN-2003-0818
Abstract Syntax Notation 1 (ASN.1)是用于多個應用程序和設備的數據標準,允許數據可在各種平臺傳遞。Microsoft ASN.1庫廣泛使用在Windows安全子系統,包含kerberos、NTLMv2驗證,及使用各種證書的應用程序(SSL、EMAIL數字簽名、ActiveX控件簽名)。
Microsoft ASN.1庫實現上存在整數溢出漏洞,遠程攻擊者可以利用這些漏洞造成堆破壞從而執行惡意指令。漏洞影響MSASN1.DLL相關的應用,其中比較常見的是LSASS.EXE和CRYPT32.DLL(任何使用CRYPT32.DLL的應用程序)。
ASN.1基本編碼規則(BER)基本概念是一個靈活的編碼二進制數據的編碼方案。每片數據按照描述如何解釋下面值數據的類型號,然后是數據長度,最后是數據本身,通過提供超大值(從0xFFFFFFFD到0xFFFFFFFF)給長度字段,可在堆分配函數中產生整數溢出,雖然有地方對這個值長度進行確認和檢查,不過在驗證函數中獨立的指針算法會導致漏洞發生。
具體漏洞細節如下:
1、當一個簡單的值(這個值由原子數據組成)由MSASN1解碼時,ASN1BERDecLength()調用來獲得值長度,然后把這個值長度傳遞給ASN1BERDecCheck()函數確保數據實際存在。
2、ASN1BERDecCheck()驗證無符號數據"pointer_to_start_of_data + reported_length_of_data"是否小于或者等于"pointer_to_start_of_BER_block + total_size_of_BER_block",如果檢查沒通過,函數返回錯誤,并停止解碼(本來ASN1BERDecCheck()函數檢查也存在問題,不過微軟在Windows 2000 SP4和Windows Server 2003中已經在函數中增加額外的比較進行修補了)。
3、如果函數調用ASN1BERDecLength()然后嘗試分配內存和拷貝數據(如ASN1BERDecOctetString(),不過不是ASN1BERDecOctetString2()),它就會傳遞解碼的長度給DecMemAlloc(),然后分配結果,此函數的操作也即:"LocalAlloc(LMEM_ZEROINIT, (length + 3) & ~3)."
4、如果DecMemAlloc()函數成功返回,調用函數然后使用原始解碼的長度作為計數字節長度通過memcpy()把數據拷貝到已經分配的堆緩沖區中,就會觸發溢出。
如果在第一步ASN1BERDecLength()解碼的長度非常大,就會在第二步ASN1BERDecCheck()增加長度到當前數據指針時發生整數溢出。更明確的是,如果長度數據范圍在0xFFFFFFFD 到0xFFFFFFFF之間,會通過ASN1BERDecCheck()的檢查,在完成DecMemAlloc()調用后,長度的總和會變為零,LocalAlloc()成功的分配零長度堆段,但由于memcpy()在處理超長長度數據進行拷貝時沒有任何檢查,結構可出現堆破壞,臨近的任何數據可被任意數據覆蓋。
最簡單的方法產生此條件是構建一個簡單八位字符串(tag 04h),'length-of-length'設置為4,length設置為0xFFFFFFFF的編碼,對應字節為'04h/84h/FFh/FFh/FFh/FFh',根據MSASN1客戶使用的解碼函數,可觸發此漏洞。以下是受此漏洞影響的解碼函數:
ASN1BerDecCharString
ASN1BERDecChar16String
ASN1BERDecChar32String
ASN1BERDecEoid
ASN1BERDecGeneralizedTime
ASN1BERDecMultibyteString
ASN1BERDecOctetString
ASN1BERDecOpenType
ASN1BERDecSXVal
ASN1BERDecUTCTime
ASN1BERDecUTF8String
ASN1BERDecZeroCharString
ASN1BERDecZeroChar16String
ASN1BERDecZeroChar32String
ASN1BERDecZeroMultibyteString
<*來源:Derek Soeder (
dsoeder@eeye.com)建議:
--------------------------------------------------------------------------------
廠商補丁:
Microsoft
---------
Microsoft已經為此發布了一個安全公告(MS04-007)以及相應補丁:
MS04-007:ASN.1 Vulnerability Could Allow Code Execution (828028)
鏈接:
補丁下載:
Microsoft Windows NT? Workstation 4.0 Service Pack 6a
http://www.microsoft.com/downloads/details.aspx?FamilyId=92400199-B3D5-4826-98D4-F134849F5249&displaylang=enMicrosoft Windows NT Server 4.0 Service Pack 6a
http://www.microsoft.com/downloads/details.aspx?FamilyId=E8315430-90CD-4B20-8F54-58527932B588&displaylang=enMicrosoft Windows NT Server 4.0 Terminal Server Edition Service Pack 6
http://www.microsoft.com/downloads/details.aspx?FamilyId=D83B39D3-FF13-4D0B-B406-A225AED0D659&displaylang=enMicrosoft Windows 2000 Service Pack 2, Microsoft Windows 2000 Service Pack 3, Microsoft 2000 Windows Service Pack 4
http://www.microsoft.com/downloads/details.aspx?FamilyId=191853C4-A4D2-4797-A8C6-A2E663A53698&displaylang=enMicrosoft Windows XP, Microsoft Windows XP Service Pack 1
http://www.microsoft.com/downloads/details.aspx?FamilyId=0CC30297-D4AE-48E9-ACD0-1343D89CCBBA&displaylang=enMicrosoft Windows XP 64-Bit Edition, Microsoft Windows XP 64-Bit Edition Service Pack 1
http://www.microsoft.com/downloads/details.aspx?FamilyId=383C397F-9318-4AD5-9C2C-0577118A1E68&displaylang=enMicrosoft Windows XP 64-Bit Edition Version 2003, Microsoft Windows XP 64-Bit
Edition Version 2003 Service Pack 1
Microsoft Windows Server 2003
http://www.microsoft.com/downloads/details.aspx?FamilyId=3D7FFFF9-A497-42FF-90E7-283732B2E117&displaylang=enMicrosoft Windows Server 2003 64-Bit Edition
http://www.microsoft.com/downloads/details.aspx?FamilyId=FA280168-66E1-4B5F-958F-E178C3F61F7C&displaylang=en