🎉 攢成長值,抽華爲Mate三折疊!廣場第 1️⃣ 2️⃣ 期夏季成長值抽獎大狂歡開啓!
總獎池超 $10,000+,華爲Mate三折疊手機、F1紅牛賽車模型、Gate限量週邊、熱門代幣等你來抽!
立即抽獎 👉 https://www.gate.com/activities/pointprize?now_period=12
如何快速賺成長值?
1️⃣ 進入【廣場】,點擊頭像旁標識進入【社區中心】
2️⃣ 完成發帖、評論、點讚、發言等日常任務,成長值拿不停
100%有獎,抽到賺到,大獎等你抱走,趕緊試試手氣!
截止於 8月9日 24:00 (UTC+8)
詳情: https://www.gate.com/announcements/article/46384
#成长值抽奖12期开启#
微軟Windows早期版本0day漏洞分析:從提權到利用全流程
微軟Windows系統0day漏洞分析及利用
近期,微軟發布的安全補丁中修復了一個正在被利用的win32k提權漏洞。該漏洞僅存在於早期Windows系統版本中,無法在Windows 11上觸發。本文將分析在當前安全防護不斷完善的背景下,攻擊者如何繼續利用此類漏洞。
漏洞背景
0day漏洞指尚未公開且未被修復的安全漏洞,類似於金融市場的T+0交易概念。此類漏洞一旦被發現可能會在未被察覺的情況下被惡意利用,造成巨大危害。
本次發現的Windows系統0day漏洞可使攻擊者獲取系統完全控制權。這可能導致個人信息泄露、系統崩潰、數據丟失、財產損失等嚴重後果。從Web3角度看,可能造成私鑰被盜、數字資產被轉移,甚至影響整個基於Web2基礎設施的Web3生態。
補丁分析
分析補丁代碼發現,問題出在對象引用計數的多次處理。通過查看早期源碼注釋可知,以前的代碼只鎖定了窗口對象,而未鎖定窗口中的菜單對象,可能導致菜單對象被錯誤引用。
漏洞復現
通過分析漏洞函數上下文,發現傳入xxxEnableMenuItem()的菜單通常已在上層函數被鎖定。進一步分析發現,MenuItemState函數返回的菜單可能是窗口主菜單,也可能是子菜單或子子菜單。
爲觸發漏洞,構造了一個特殊的四層菜單結構,並設置了以下特徵:
在xxxRedrawTitle返回用戶層時,刪除菜單C和B的引用關係並釋放菜單C。這樣在xxxEnableMenuItem函數返回點時,即將引用的菜單C對象已失效。
漏洞利用
漏洞利用主要考慮兩個方向:
執行shellcode代碼:參考早期CVE-2017-0263等漏洞,但在高版本Windows中可能面臨入口點和SMEP等安全機制問題。
利用讀寫原語修改token地址:近年來有多個公開exp可參考,對桌面堆內存布局和讀寫原語具有通用性。關鍵是分析如何在UAF內存重用時首次控制cbwndextra爲特大值。
本次利用採用第二種方案,將整個過程分爲兩步:
首次數據寫入
漏洞觸發後,系統可能在MNGetPopupFromMenu()和xxxMNUpdateShownMenu()中錯誤使用被控制的窗口對象數據。我們使用窗口類WNDClass中的窗口名稱對象佔用釋放的菜單對象。
關鍵是找到一個可由我們構建的地址結構中能任意寫入數據的位置,哪怕只有一個字節。最終選擇了xxxRedrawWindow函數中的方案,通過布局內存控制前一個對象的內存數據來通過函數中的對象標志判斷。
穩定的內存布局
設計至少三個連續的0x250字節HWND對象,釋放中間一個並用HWNDClass對象佔用。前一個HWND對象尾部數據用於通過xxxRedrawWindow中的標志檢驗,後一個HWND對象的菜單對象和HWNDClass對象用作最終讀寫原語媒介。
通過堆內存中泄露的內核句柄地址來精確判斷申請的窗口對象是否按預期順序排列。
讀寫原語
任意讀原語使用GetMenuBarInfo(),任意寫原語使用SetClassLongPtr()。除替換TOKEN的寫入外,其他寫入都利用第一個窗口對象的class對象使用偏移來寫入。
總結
win32k漏洞歷史悠久,但微軟正在嘗試用Rust重構相關代碼,未來新系統中此類漏洞可能被杜絕。
該漏洞利用過程相對簡單,主要難點在於如何控制首次寫入。嚴重依賴桌面堆句柄地址泄露,這仍是老舊系統的安全隱患。
該漏洞的發現可能得益於更完善的代碼覆蓋率檢測。
對於漏洞利用檢測,除關注觸發函數關鍵點外,還應關注異常的內存布局和窗口數據偏移讀寫。