天天看點

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

作者:盛邦安全

漏洞概述

福建福昕軟體開發股份有限公司是一家國際化營運的PDF電子文檔解決方案提供廠商,提供文檔的生成、轉換、顯示、編輯、搜尋、列印、存儲、簽章、表單、保護、安全分發管理等涵蓋文檔生命周期的産品技術與解決方案。其下産品Foxit PDF Reader和Foxit PDF Editor的javascript函數exportXFAData,隻驗證了cPath參數中檔案夾路徑是否存在,未校驗檔案字尾的合法性,導緻可以将互動式表單(XML Forms Architecture,簡稱XFA)資料導出為任意字尾的檔案。XFA資料中可以包含javascript代碼,将其導出為字尾為hta的檔案,寫入Windows Startup 檔案夾,該檔案可以在計算機重新開機後自動運作,實作任意代碼執行。

影響範圍

  • Foxit PDF Reader <= 12.1.1.15289
  • Foxit PDF Editor 12.x <= 12.1.1.15289
  • Foxit PDF Editor 11.x <= 11.2.5.53785
  • Foxit PDF Editor <= 10.1.11.37866

複現環境

  • 作業系統:Win7 sp1 32位作業系統
  • 分析工具:IDA、OD、Procexp、PdfStreamDumper

PDF檔案格式

便攜式文檔格式(英語:Portable Document Format,縮寫:PDF)是一種用獨立于應用程式、硬體、作業系統的方式呈現文檔的檔案格式,最早由Adobe公司開發。每個PDF檔案包含固定布局的平面文檔的完整描述,包括文本、字形、圖形及其他需要顯示的資訊。PDF檔案除平面的文本和圖形外,還可能包括邏輯結構元素,注釋、表單、圖層、富媒體(包括視訊内容)之類的互動元素,使用U3D或PRC的三維對象,以及多種其他資料内容。PDF規範還提供了啟用這些功能時所需的加密功能、數字簽名、文檔附件和中繼資料等。

PDF檔案整體上可分為檔案頭(Header)、對象集合(Body)、交叉引用表(Xref table)、檔案尾(Trailer)四個部分,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

其中Body是PDF檔案的核心部分,檔案中用到的所有對象,包括文本、圖象、音樂、視訊、字型、超連接配接、加密資訊、文檔結構資訊等等,都在這裡定義。一個對象的基本格式,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

一個對象的定義包含4個部分:

  • 對象序号
  • 對象生成号
  • 對象定義範圍
  • 對象内容

最前面的數字1是對象序号,用來唯一标記一個對象;0是生成号,按照PDF規範,如果一個PDF檔案被修改,那這個數字是累加的,它和對象序号一起标記是原始對象還是修改後的對象;obj和end obj是對象的定義範圍,相當于定義了對象的開始和結束的位置;obj和end obj中間的部分是PDF規定的任意合法對象,主要包括booleam,numeric,string,name,array,dictionary,stream等,感興趣的讀者可自行了解其詳細内容。

為了增強PDF文檔的互動性和動态性,PDF還支援JavaScript。PDF中的JavaScript與Web中的JavaScript有所不同,功能受到各種安全限制和限制。通過JavaScript,可以在PDF檔案中處理事件,例如單擊、輕按兩下、滑鼠進入或離開、文本輸入等,還可以用于處理PDF表單中的資料校驗、格式化、送出和重置等功能,也可以實作PDF中的動态效果,例如隐藏、顯示和移動元素,更改文本内容等。比如在文檔即将關閉的時候,彈出提示對話的javascript的代碼為:app.alert("javascript示例:文檔即将關閉,是否已儲存所有修改?"),如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現
福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

漏洞複現

複現使用的版本為Foxit PDF Editor Pro 12.1.1.15289。預設安裝後主程式路徑為C:\Program Files\Foxit Software\Foxit PDF Editor\FoxitPDFEditor.exe。

在https://github.com/webraybtl/CVE-2023-27363上下載下傳已公開的POC檔案CVE-2023-27363.pdf,漏洞利用成功後,彈出JavaScript控制台對話框,同時在Startup目錄釋放了evil.hta檔案,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現
福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

evil.hta将在計算機重新開機後自動執行,HTA是HTML Application的縮寫,将由本地的應用程式mshta.exe加載執行。evil.hta中包含了一段javascript腳本,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

evil.hta運作後,啟動了notepad.exe和calc.exe程式,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現
福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

漏洞分析

使用文本編輯器winhex打開CVE-2023-27363.pdf,搜尋關鍵字“[+] CVE-2023-27363 PoC”,但是并未搜尋到。仔細分析後發現,該pdf中有很多被壓縮的流(stream)對象,無法看到明文資料,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

為友善分析,使用PdfStreamDumper工具打開CVE-2023-27363.pdf,該工具可以自動解壓資料流,提取對象,javascript代碼等,友善分析。該工具識别到了38個對象,再次搜尋關鍵字“[+] CVE-2023-27363 PoC”,結果顯示在編号為3的對象中找到了該字元串,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

可以清楚的看到,3号對象中包含了javascript代碼,其功能是顯示javascript控制台,然後向控制台輸出“[+] CVE-2023-27363 PoC”字元串,再調用setTimeOut函數,該函數是延時500毫秒,執行另一段代碼,最後再向控制台輸出“[+] HTA payload written in the startup.”字元串。

在延時執行的另一段代碼中,調用exportXFAData函數,其中傳遞的cPath參數,正是惡意檔案釋放路徑,該函數是漏洞觸發和利用的關鍵函數。根據Adobe Acrobat JavaScript Scripting Reference幫助文檔,exportXFAData主要的功能是導出互動式表單(XML Forms Architecture,簡稱XFA)資料為XDP檔案,其中cPath參數為導出檔案的絕對路徑,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

Adobe Acrobat在實作該函數時隻允許導出字尾為“.xdp”和“.xml”的檔案,但Foxit PDF在實作exportXFAData函數功能時,隻驗證了檔案夾路徑是否存在,未校驗cPath參數中檔案字尾的合法性,導緻可以将XFA資料導出為任意字尾的檔案,XFA資料中又包含了可執行的javascript代碼,将其導出為字尾為hta的檔案,進而實作任意代碼執行。驗證檔案夾路徑是否存在的代碼,如下圖所示:

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

參考連結

  • https://github.com/webraybtl/CVE-2023-2736
  • https://github.com/j00sean/SecBugs/tree/main/CVEs/CVE-2023-27363
  • https://www.foxit.com/support/security-bulletins.html
  • https://github.com/zxyle/PDF-Explained/blob/master/resources/pdf_reference_1.7.pdf

福昕Foxit PDF遠端代碼執行漏洞CVE-2023-27363分析與複現

繼續閱讀