이 취약점은 모델 가중치를 저장하고 torch.load()를 통한 로드를 지원하기 위해 Pickle 형식을 사용하는 PyTorch 모델의 역직렬화에서 발생하는 근본적인 설계 결함에서 비롯됩니다. 악의적인 모델의 코드 실행을 방지하기 위해 공식 문서에서는 이론적으로 ”사전, 텐서, 목록”과 같은 원시 데이터 유형만 로드할 수 있는 weights_only=True 매개변수를 사용할 것을 강력히 권장하고 있습니다.
보안 연구원 지안 저우는 이 매개변수의 ”퓨즈'를 우회할 수 있다는 사실을 발견했습니다. 공격자는 특별히 구성된 모델 파일을 생성하여 weights_only=True일 때 역직렬화 유효성 검사 메커니즘을 비활성화하고 모델이 로드될 때 임의의 Python 코드를 실행하여 PyTorch 프로세스와 동일한 시스템 권한을 획득할 수 있습니다.
공격 장면:
공급망 오염: 악의적인 공격자가 백도어가 포함된 사전 훈련된 모델을 Hugging Face에 업로드하면 개발자가 다운로드하여 앱에 통합하여 자동으로 RCE를 트리거합니다.
클라우드 환경의 측면 이동: 손상된 모델을 클라우드 스토리지(S3, GCS) 또는 데이터베이스 자격 증명에 액세스하기 위한 발판으로 사용할 수 있습니다.
대량 배포의 위험: 자율 주행, 의료 진단, 재무 모델링 등과 같은 주요 영역에서 수백만 명의 PyTorch 사용자가 사용 중입니다.
기술적 깊이: 이 취약점은 피클 역직렬화 프로그램이 순차적으로 오코드를 해석하고 전체 텍스트 유효성 검사를 기다리지 않고 악성 명령어를 발견하는 즉시 실행하는 데 있습니다. 공격자는 파일의 시작 부분에 악의적인 로드를 삽입하고 코드를 트리거한 다음 파일 구조를 파괴하는 바이트를 삽입하여 피클스캔과 같은 블랙리스트 도구의 탐지를 피할 수 있습니다.
수정 및 영향: PyTorch 2.6.0에 대한 패치가 릴리스되었지만 엔터프라이즈 업그레이드 주기에 지연이 있습니다. 권장 사항: 신뢰할 수 없는 소스의 모델을 비활성화하고, SafeTensors 형식으로 대체하고, 모델 파일 무결성 검증(해시 체크섬)을 구현하고, 모델 로딩 환경을 격리하세요.