iT邦幫忙

0

CVE-2026-20841 是怎麼回事!? 【漏洞分析】

  • 分享至 

  • xImage
  •  

Improper neutralization of special elements used in a command ('command injection') in Windows Notepad App allows an unauthorized attacker to execute code locally.
── NVD官網描述。

CVE-2026-20841是怎麼來的?:

微軟於2025年5月30日在Windows記事本中引進了Markdown支援的格式,以Notepad.exe編譯、設計和建立.md格式的檔案,然而看似為文件編輯提供便利、易讀性的編排功能,卻也為檔案操作不慎引起的資安風險添上一道攻擊途徑 ── CVE-2026-20841 由微軟在2026年2月10日發布的CVE漏洞敘述為「Windows 記事本應用程式中對命令中特殊元素的處理不當,允許未授權的攻擊者在本機執行程式碼。」所幸後續追蹤與修補更新,2月發布更新修補此漏洞。

Proof of Concept:

簡單來說,開啟記事本寫一段Markdown格式的用來開啟本機檔案的連結,就可以透過點擊連結的方式執行檔案。
01
02
03
很簡單吧

逆向分析漏洞:

用WinDbg對執行POC的Notepad.exe進行Attach to a Process,用動態的方式觀察漏洞的觸發重點。

04
觸發漏洞的執行流程入口點在這。

05
這個入口點位址的堆疊結構在迴圈當中不停運作,判斷即時輸入的行為,包含POC的過程點擊Markdown連結。

06
從入口點追蹤整個過程都用step into一路到cmd[.]exe在ntdll!ZwResumeThread觸發開啟,可以看到rdx為01的存值執行syscall後被扣掉Suspend Count為0來執行cmd[.]exe,ZwResumeThread本身的功能就是在恢復Thread執行,表示建立cmd[.]exe的Thread先前已建立好並等待執行。

07
另外確認ZwResumeThread恢復執行的Thread,rcx的存值3d4就是cmd[.]exe的handle。

08
那麼建立cmd[.]exe的thread又是在哪裡執行的? 在step into的過程當中執行thread切換到KERNEL32!CreateProcessW,這裡建立cmd[.]exe的Process包含rcx存值的執行路徑,顯然Markdown標記連結最初的執行方式利用CreateProcessW針對連結內容去做啟用的動作,這不是個安全的功能設計。

Patch:

微軟在2026年2月發布修補解決了這個漏洞,來看看怎麼補的。
準備一台更新過的Windows重新實作前面的執行流程並記錄下來,比較漏洞環境的流程看哪裡不一樣。

09
上圖為更新前。下圖為更新後
10

兩張圖在相對的入口點位址step into進入call USER32!DispatchMessageW之後,更新後的流程執行新的USER32!DispatchMessageWorker 而後續也未使用CreateProcessW來執行Markdown連結,而是用文本的方式開啟檔案的內容在Notepad上顯示。
11


結論

針對CVE-2026-20841微軟把Markdown演算法改掉,切割出USER32!DispatchMessageWorker來防範KERNEL32!CreateProcessW建立連結執行程序,並透過win32u!NtUserGetMessage由文本替代執行開啟檔案。


參考資料


心得

搞了半天要這樣寫cmd[.]exe 草稿才能存檔是為什麼...


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言