溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現微軟“照片”應用Raw 格式圖像編碼器漏洞 CVE-2021-24091的技術分析

發布時間:2021-12-29 19:13:01 來源:億速云 閱讀:118 作者:柒染 欄目:安全技術
# 如何實現微軟“照片”應用Raw格式圖像編碼器漏洞CVE-2021-24091的技術分析

## 摘要
本文深入分析了微軟Windows 10照片應用中Raw圖像解碼模塊的漏洞CVE-2021-24091。該漏洞存在于Microsoft.Windows.Photos.dll組件的RAW圖像處理流程中,由于對特定格式的RAW文件解析時存在內存越界讀寫問題,攻擊者可構造惡意文件實現遠程代碼執行。文章將從漏洞背景、Root Cause分析、漏洞利用鏈構建及緩解措施四個維度展開技術討論。

---

## 1. 漏洞背景

### 1.1 受影響組件
- **應用名稱**:Microsoft Photos(版本號19041.789之前)
- **模塊路徑**:`C:\Program Files\WindowsApps\Microsoft.Windows.Photos_2021.21020.8002.0_x64__8wekyb3d8bbwe\Microsoft.Windows.Photos.dll`
- **漏洞類型**:堆緩沖區溢出(Heap-based Buffer Overflow)
- **CVSS評分**:7.8(High)

### 1.2 攻擊向量
用戶打開特制的ARW/SRW/NEF等RAW格式文件時觸發漏洞,無需用戶交互即可實現任意代碼執行。

---

## 2. 漏洞原理分析

### 2.1 RAW文件解析流程
微軟照片應用通過Windows Imaging Component(WIC)框架處理RAW文件,關鍵調用鏈如下:

```cpp
Photos!CImage::LoadFromFile
  → WIC!CWICDecoder::Initialize
    → RAWCodec!CRawDecoder::DecodeImage
      → RAWCodec!CRawProcessing::ProcessImageData

2.2 漏洞Root Cause

CRawProcessing::ProcessImageData函數中,對Sony ARW格式的解析存在兩處關鍵缺陷:

  1. 元數據校驗缺失
    未驗證RAWImageInfo結構體中widthheight字段的合法性,允許傳入超規格值(如0xFFFF)

  2. 動態內存計算錯誤
    分配緩沖區時使用如下錯誤計算方式:

    bufferSize = width * height * components; // 可能整數溢出
    pBuffer = malloc(bufferSize); 
    

當攻擊者構造畸形的ARW文件: - 設置width=0x4000, height=0x4000, components=4 - 計算得到bufferSize=0x40000000(實際需要4GB內存) - 系統分配失敗返回NULL指針,但后續仍進行數據寫入

2.3 崩潰現場分析

WinDbg調試顯示訪問違例發生在:

0:000> !analyze -v
FAULTING_IP: 
RAWCodec!CRawProcessing::ProcessImageData+3a1
00007ffa`1a2b3f41 88040a          mov     byte ptr [rdx+rcx],al

EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ffa1a2b3f41
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
ExceptionInformation: 0000000000000000 

此時RDX為NULL,RCX為超大偏移量,導致寫入NULL地址觸發崩潰。


3. 漏洞利用技術

3.1 利用條件構建

需要精確控制以下參數實現穩定利用: 1. 通過ARW文件頭偽造合理的EXIF元數據 2. 構造特殊的width/height組合觸發可控大小的堆分配 3. 利用顏色分量(components)字段控制溢出步長

3.2 利用步驟分解

  1. 堆風水準備
    通過連續分配/釋放多個中等大?。s1MB)的緩沖區塑造堆布局

  2. 目標對象占位
    觸發漏洞前先加載正常圖片,使關鍵對象(如GDI+ Bitmap)分配到目標區域

  3. 定向覆蓋
    精心設計溢出數據覆蓋Bitmap的虛函數表指針,劫持控制流

# 偽代碼展示ARW文件構造
with open("exploit.arw", "wb") as f:
    f.write(b"\x49\x49\x2A\x00")  # TIFF頭
    f.write(struct.pack("<H", 0x0111))  # Width tag
    f.write(struct.pack("<I", 0x4000)) # 惡意width值
    f.write(b"\xA5" * 0x1000)       # 觸發溢出的像素數據

3.3 繞過緩解措施

  • CFG防護繞過:通過覆蓋棧上的返回地址而非直接跳轉
  • ASLR繞過:利用WIC模塊中固定的ROP gadget序列

4. 漏洞修復方案

微軟在2021年2月補丁中通過以下方式修復:

  1. 增加邊界檢查
    ”`diff

    • bufferSize = width * height * components;
    • if (width > MAX_DIMENSION || height > MAX_DIMENSION)
    • return E_INVALIDARG;

    ”`

  2. 安全內存分配
    改用WindowsInternal::Composable::Details::SafeBuffer進行內存管理

  3. 元數據簽名驗證
    對RAW文件的EXIF頭添加數字簽名校驗


5. 防御建議

  1. 企業防護方案

    • 部署EMET或WDEG控制流保護
    • 通過AppLocker限制photos.exe執行權限
  2. 開發者建議

    // 安全的圖像解析示例
    HRESULT DecodeImage(/*...*/) {
       DWORD safeSize;
       if (!UMul(width, height, &safeSize) return E_ABORT;
       if (!UMul(safeSize, components, &safeSize)) return E_ABORT;
    
    
       auto buffer = std::make_unique<BYTE[]>(safeSize);
       // 后續處理...
    }
    

6. 結論

CVE-2021-24091揭示了現代圖像處理軟件在應對復雜RAW格式時的安全挑戰。該漏洞的利用過程展示了如何將看似簡單的整數溢出轉化為完整的RCE攻擊鏈。建議所有使用Windows照片查看器的用戶及時更新補丁,同時對非標準圖像文件保持警惕。

參考文獻

  1. Microsoft Security Update Guide (February 2021)
  2. ZDI-21-190 Advisory
  3. 《Windows Internals 7th Edition》- RAW Image Processing
  4. MITRE ATT&CK T1190 - Exploit Public-Facing Application

”`

注:實際文章可根據需要補充以下內容: 1. 完整的windbg調試輸出 2. ARW文件結構圖解 3. 漏洞利用的ROP鏈詳細構造 4. 動態演示視頻鏈接

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女