去幾天,X和一些黑客論壇上關于Telegram for Windows中的遠程代碼執行漏洞的傳言不絕于耳。一些帖子聲稱這是一個零點擊漏洞,Telegram否認了這些說法,并表示演示視頻很可能是一個惡作劇。
第二天,XSS黑客論壇上有人又分享了一個漏洞利用POC,證明了Telegram for Windows源代碼中的一個拼寫錯誤可以被利用來發送Python .pyzw文件,繼而繞過安全警告。該漏洞導致.pyzw文件在被點擊時會自動被Python執行,而非像其他可執行文件那樣收到Telegram的警告。更糟糕的是,POC中還將Python文件偽裝成了一個附帶縮略圖的視頻,非常容易欺騙用戶點擊該虛假視頻觀看。
如Telegram所說,該漏洞確實并非零點擊漏洞,但仍有修復的必要。目前官方已在Telegram for Windows中修復了這一問題,以防止Python腳本在被點擊時自動啟動。
漏洞成因:
Telegram桌面客戶端跟蹤與風險文件相關的文件擴展名列表(如.exe),當有人在Telegram中發送這些文件類型,并且用戶點擊文件時,Telegram會先顯示以下安全警告:
然而,在Telegram中共享的未知文件類型會自動在Windows中啟動,并讓操作系統決定使用何種程序,而當Windows安裝了Python時,它會將.pyzw文件擴展名與Python可執行文件關聯起來,導致雙擊文件時Python會自動執行腳本。
Telegram的開發人員意識到這些類型的可執行文件應當被視為風險,并將其添加到可執行文件擴展名列表中。然而,在添加擴展名時他們犯了一個拼寫錯誤,輸入的是‘pywz’而非正確的‘pyzw’。
因此,當這些文件上傳至Telegram并被用戶點擊時,若該用戶Windows中安裝了Python,它們將被Python自動啟動,從而允許攻擊者繞過安全警告并在攻擊目標的Windows設備上遠程執行代碼。
該漏洞于4月10日報告給了Telegram,并且官方表示已在‘data_document_resolver.cpp’源代碼文件中更正了擴展名的拼寫。同時,Telegram還在服務器端進行了修復,將.untrusted擴展名附加到pyzw文件上。
編輯:左右里
資訊來源:bleepingcomputer、X
轉載請注明出處和本文鏈接
關于 Windows 上的一類文件有這么一些笑話:你請某人發送一個文件副本,Ta 將桌面上的「文件」拖到了聊天框,叮當一響,你收到了一份 document.lnk;你告訴 Ta 將某某軟件卸載,于是 Ta 把桌面上的「軟件」移到了回收站,告訴你「搞定了」……
這類文件讀者都很熟悉,我們一般稱之為快捷方式,它們的圖標上都帶著小箭頭。大部分軟件安裝后往往會同時在桌面和開始菜單中創建快捷方式;如果沒有,一些讀者可能會在目標文件上 右鍵 > 發送到 > 桌面快捷方式 自己己新建一個。
但除了右鍵發送到桌面,Windows 快捷方式其實還可以更快捷:在引用對象支持的情況下,它能做到直接調用軟件的子功能、以某個模式啟動程序等等。
讓我們先從快捷方式的工作方式講起。
在微軟的 開發者文檔 中,快捷方式有另外一個更準確的表述:Shell Links,可翻譯為殼層鏈接。這個名稱更趨近于它的本質:用于 Windows 殼層(Shell)的鏈接文件。Windows 圖形殼層自然是資源管理器(explorer.exe),這是它賴以工作的進程;而「鏈接」則說明 Shell Links 是指向引用對象(corresponding object)的文件而并非對象本身。
以桌面上的 Firefox.lnk 為例,當我們雙擊此鏈接,資源管理器發現用戶嘗試打開的文件類型為快捷方式,便讀取了它的「目標」屬性的內容 C:\Program Files\Mozilla Firefox\firefox.exe,然后嘗試打開此「目標」,Firefox 程序于是被喚起了。
這和我們在資源管理器地址欄輸入 Firefox.exe 位置的原理和效果是類似的。
但不同的是,快捷方式有幾個其他的屬性是我們不能通過填充地址欄做到的:
聽到打開快捷方式和在資源管理器地址欄輸入地址類似,一些讀者可能會想到,Windows 資源管理器地址欄不光能輸入文件地址,還可以輸入shell:downloads 直接打開下載文件夾,輸入shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}打開控制面板,輸入https://example.com打開網站……
是的,快捷方式也能接受這些內容。根據引用對象種類的不同,常用的快捷方式分為兩種:
通過圖形界面創建快捷方式目前有兩種途徑:從引用對象創建和使用向導創建:
以上面兩種方式創建快捷方式時,引用對象必須存在。但是創建完成后,引用對象存在與否就不再影響快捷方式,兩者只會在用戶打開快捷方式時發生關聯。
當用戶雙擊快捷方式時,系統會嘗試解析該快捷方式:首先它會用快捷方式指向的路徑檢查引用對象是否能直接找到;如果路徑的目標無對象,資源管理器接下來會使用名為 分布式鏈接跟蹤 的技術,依靠對象原來的大小,名稱,創建日期等信息進行檢索,成功找到目標后 Windows 會自動更新快捷方式的目標屬性;若無法找到則會提示用戶刪除快捷方式。
鏈接跟蹤技術的應用給快捷方式帶來了硬鏈接一樣的解析效果:引用對象刪除后恢復、重命名、移動位置都不會導致快捷方式失效。由于它也像符號鏈接一樣依靠文件路徑定位,所以只要路徑正確,無論引用對象是否是原來的文件,快捷方式都會將其打開。
同樣可以鏈接到文件的路徑,同樣由系統提供支持,快捷方式和 符號鏈接 卻有本質上的區別??旖莘绞饺匀皇且粋€文件,它有自己的后綴名,有對應的數據(一個地址)和大小(幾 KB),還有自己的圖標和屬性。但符號鏈接沒有對應的數據對象,因而也沒有大小可言,它沒有后綴名,不具有完整文件結構。
以一個房子為例,每一個房子都有坐標。給別人一個符號鏈接,相當于為他開了一個直通房屋所在的傳送門,他不需要知道房子實際在什么地方;而快捷方式只是一張寫有地址的小紙條,他需要自己摸索才能到達房子。資源管理器可以讀取紙條內容后找到房屋所在,但其他程序未必有這個能力。
綜上所述,類似 TXT 文本由 Notepad 打開,快捷方式由資源管理器處理,它將自己的各個屬性值傳達給資源管理器,后者負責檢索并打開引用對象。引用對象可以是文件、目錄或 URI。
指向一個文件、目錄、網頁的快捷方式想必讀者司空見慣。但可執行程序并不是普通文件那么簡單:notepad.exe 會打開一個未命名的文件,notepad.exe kepa.txt 則會新建一個名為kepa.txt 的文本文件;URI 方案亦不只有 HTTPS,它可是 iOS 自動化的老將。
為鏈接文件添加標識與參數,將網絡快捷方式目標設置為 Windows 支持的的 URI Schemes,也許能解鎖快捷方式更多的可能性。
在圖形化操作系統尚未普及之前,用戶一次又一次輸入 命令 標識(flags)參數 來完成工作。這種方式即使放在今天在很多情況下仍然比圖形界面更高效。且不談一些仍然流行的終端應用,即使是那些專門為圖形界面設計的應用,不少也提供了終端調用的方式和豐富的標識,而這些都能被快捷方式利用。
下面以四個實例講解相關用法,本節的小結部分總結了查找標識參數的兩個方法。
Word 內置了博客寫作工具,完成后可以從軟件內直接發送至 WordPress 等平臺。但打開 Word,點擊新建,再選擇模板比較麻煩,能不能創建一個雙擊直接新建 Word 博客文章的快捷方式呢?
首先,我們需要確認 Word 支不支持命令調用的形式,有沒有提供可用的標識。在搜索引擎中鍵入 Microsoft Word CLI Flags,前幾個結果中就有微軟官方給出的 Office 終端調用文檔,文檔稱可以用 -t 加模板路徑的方式據模板新建文檔,這正是我們想要的。
使用這類快捷方式比較推薦的做法是首先定位到應用,將此應用的快捷方式作為底版。例如此例中,Word 在 Program Files\Microsoft Office 中,找到 EXE 文件、按住 Alt 拖到桌面創建一個快捷方式。
打開創建的快捷方式,編輯其「目標」屬性,在后面添加 -t"模板文件路徑" -q,這告訴 Word 跳過啟動動畫并按模板文件直接新建一個文檔。將圖標和快捷鍵名稱改成自己喜歡的樣子,一個簡單便捷的快捷方式就做好了。
想要有一個直接以無痕模式運行的 Chrome,方便銷毀敏感的搜索記錄。和上一個例子一樣,首先以 Chrome CLI Flags 為關鍵詞搜索,發現 Chrome 提供的參數多得幾頁都裝不下。不過我們只需要找和無痕模式相關的標識,在網頁內以 incognito 為關鍵詞搜索,立即能發現--incognito 標識。
為 Chrome 創建快捷方式做為底版,然后在目標屬性后添加 --incognito 即可。
實際上,Chrome 為安裝的瀏覽器應用創建的快捷方式,和它為不同的用戶創建的快捷方式也都是通過添加標識和參數實現的。
文章寫到現在,筆者的桌面已經堆了不少配圖。由于個人習慣邊寫邊配圖,需要用的圖片已經自動上傳圖床,桌面上的圖片大概率不會再用到了。我期望將它們快速移動到一個文件夾中,讓桌面上新放的圖更好找到。
截圖和制圖工具自動生成的圖片命名全都以年份(2021)開頭,所以這個操作用 PowerShell 實現起來并不難:
ni archive -Type Directory -Force; mv 2021* -Destination .\archive\
想要用快捷方式調用 PowerShell,可以找找 pwsh.exe( PowerShell 7 的 exe 名稱)有沒有給什么提示:在終端輸入 pwsh.exe -h,發現可以用 -c 參數調用命令:
接下來,我們用向導的方式創建這樣一個快捷方式。在桌面 右鍵 > 新建 > 快捷方式,輸入pwsh.exe -nol -c ni archive -Type Directory -Force; mv 2021* -Destination .\archive\,-nol 是不加載 Logo,會讓命令處理更快一點。
輸入完名稱后,右鍵剛才創建的快捷方式,修改以下信息:
然后,將焦點移到桌面,按下預先設置好的快捷鍵或者點按此快捷方式圖標,所有圖片立刻歸檔完成。
第四個例子是為了補充一種情況——資源管理器本身的特殊參數。我們都使用過系統自動創建的回收站、控制面板、下載文件夾等快捷方式,但它們是如何工作的,用戶能不能自行創建這些關鍵位置的快捷方式呢?
事實上,這些資源管理器內部的特殊位置是由系統在注冊表中定義的,HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions中包含了幾乎所有這類關鍵位置的信息。每一個位置都對應著獨一無二的名稱(Name 鍵數據)和 GUID(項)。例如桌面文件夾對應的名稱是 Desktop,GUID 是{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}。
TenForums 據此整理了兩份(按名稱,按 GUID)列表大家也可以參考。
在快捷方式中調用它們也很簡單,方法是使用 explorer.exe shell:Name 或者 explorer.exe shell:::GUID。舉例來說,想要創建一個直達聲音設置界面的快捷方式,可以使用右鍵,新建快捷方式,其內容填explorer.exe shell:::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D}。
以上四個例子,涵蓋了絕大多數種類的應用。不難看出快捷方式創建過程并不復雜,可能會難住讀者的是找到應用支持的標識參數的方法。這是有規律可循的:
一個指向某資源的具體地址,如 https://example.com,被稱為 URL。這串字符作為命名方式而言的第一級就是 URI Scheme(統一資源標志符方案)。我們最常見的 HTTPS 只是 數以百計 URI 方案中的一種。正如同我們能不通過網站主頁用 URL 直接打開某一篇文章一樣,URI 亦可以用于打開軟件內的某一個位置。
若讀者在瀏覽器上搜索過 Windows 商店應用,點擊安裝,瀏覽器會彈出「打開 Microsoft Store」的提示,點擊后會跳轉到 Windows Store。這就是 Windows 上 URI Schemes 的簡單應用。
將 URI Schemes 用于快捷方式的講解也像上一節一樣,先看幾個用例,個中要點放在小結部分。
作為筆者的主力筆記應用,Obsidian 中有一些使用非常頻繁的筆記,例如 Todo,快速筆記等。要是能有迅速打開這些筆記的快捷方式自然再好不過。Obsidian 并沒有提供好用的標識參數,所以不妨求助于同樣強大的 URI Schemes。
以 obsidian URI Schemes 為關鍵詞搜索,能找到開發者對 Obsidian URI 的詳細解釋文檔。
當然,我們的目標只是找到打開 Obsidian 某條目的快速方法。使用過 Obsidian 的讀者應該能發現右鍵某個條目會有 復制 Obsidian URL 的選項,我們需要的就是這樣一個鏈接。
同樣使用右鍵調出創建向導,在彈出的內容中填寫剛剛復制的 URI,一個快捷方式就創建完成了。如果還有其他需要快速調用的筆記,也可以如此操作。
和要好的朋友聊天、寫郵件,有什么東西需要立刻和朋友分享,這些操作都需要進入客戶端后選擇聊天對象。能不能更簡便一點,直接喚起和某人的聊天呢?只要應用支持,這是能夠實現的。
檢索的方式仍然是 應用名 uri schemes,根據搜索到的提示,我在快捷方式創建向導的目標位置框中填入下面三個內容:
經過筆者 查閱,微信 PC 端曾經支持類似的功能,但目前只能用 weixin: 喚起微信主界面。飛書亦 支持 lark: 開頭的外部請求,但喚起聊天界面需要對方的 OpenID。
作為 Windows 的特點之一,控制面板與更現代的設置兩代同堂的局面已經持續很久。不難發現是它們倆可以相互跳轉到某項功能的子界面。通過上一個節的第四部分,我們知道控制面板內的條目能用 GUID 等方式調用,那么更現代的設置是怎么做的呢?答案是 URI。
以 ms-settings URI schemes 為關鍵詞檢索,能發現微軟給出的 官方文檔,里面詳細列舉了以 ms-settings 開頭的各類可用 URIs。
這些 URIs 是被設計為供開發者調用的,作為用戶的我們也可以按照自己的需要將它們創建為快捷方式。比如說,筆者認為通過任務管理器導航到開機自啟管理界面過于麻煩,那么我可以使用右鍵,創建快捷方式,在對象位置一欄中寫入 ms-settings:startupapps。將此快捷方式移動到開始菜單,以后就能直接點擊或者搜索 開啟自啟 來訪問此項設置了。
微軟的許多 UWP 類型的系統應用,例如 Edge、商店、人脈,都提供了 URI Scheme 支持。對于一些變量,例如默認瀏覽器、默認視頻播放器,Windows 也有對應的 URIs 可供調用。
Windows 下想要知道哪些應用支持 URI 調用還是很簡單的:URI Schemes 在注冊表中被表述為 URL Protocol,要使用 URI 的應用必須在注冊表中新建一個帶有 URL Protocol 字符串的項2。我們可以通過瀏覽 HKCR ,來確認某應用的 URI Scheme 支持情況。如下圖所示,能看到 BiliBili UWP 版注冊了 bilibili:
對于系統應用和 Windows Store 應用而言,我們也可以從 Windows 設置 > 默認應用 > 按協議指定默認應用(Windows 11 改名為 按鏈接類型指定默認應用)界面尋找已經被注冊的各類 URI Schemes。不過此面板不會顯示一些傳統應用。
然而試圖查閱到一個可用的 URI 相對而言較為困難。URI 方案后的行為、查詢參數大部分情況下用于供開發者進行應用內跳轉,不會暴露給用戶。并且由于 安全問題,不少應用都限制了從外部直接調用程序功能。
所幸 URIs 往往會兼顧多平臺的通用性,Windows、iOS、Android 系統上同一個應用的 URI Scheme 用法有可能是一樣的。
要是不確定一個 URI Scheme 是否起作用,讀者在將它們寫入快捷方式之前,可以先使用資源管理器的地址欄做實驗,效果符合預期再行動也不遲。
就能力而言,快捷方式顯然比不上腳本等手段。首先它的目標路徑只能填一行,本文第二節雖然有用快捷方式執行多條命令的用例,但這顯然不如腳本來得優雅;其次,快捷方式是靜態的,想要為它加一些變量,例如打開 Obsidian 這一周的周志、用電報發送剪貼板內容,快捷方式實現起來就較為吃力,需要其他工具從旁輔助。
然而其優勢也是很明顯的——用起來簡單方便。將目標寫好,和我們交互的就只是一個帶箭頭的小圖標。我們可以雙擊;可以將它們放在開始菜單中用于檢索;還可以固定到任務欄,用 Windows + 數字鍵啟用。快捷方式本身也是一個文件,它們可以被保存、備份、遷移,只要路徑正確就能成功運行。
除了能用在快捷方式上,本文介紹的標識和 URI Schemes 也能用于 Windows 注冊表、AutoHotkey,JS 腳本等其他地方,因而第二、三節的小結部分或許還有本文主旨之外的參考價值。
本文的意義僅在于提供應用的思路,揭示更多操作的可能性。真正適合自己的用法還需要讀者自行探索。