IT 소식 (CS, AI 위주)

Hugging Face Transformers 라이브러리 RCE 보안 취약점 (CVE-2026-4372)

ikkison 2026. 6. 5. 00:06
반응형

Hugging Face 의 AI 라이브러리인 Transformers 에서 사용자가 모델을 다운로드하고 로드하는 것만으로도 해커의 악성 코드가 자동으로 실행되는 원격 코드 실행 RCE 취약점이 발견되었다.

 

Pluto Security Inc. 에서 2026년 6월 4일 Hugging Face 사의 Transformers 라이브러리에서 공격자가 제어하는 인공지능 모델이 피해자의 컴퓨터에서 임의의 코드를 실행할 수 있도록 허용하는 심각한 원격 코드 실행(RCE) 취약점을 공개했다.

 

AI 모델 설정 파일을 통해 시스템을 몰래 장악할 수 있어 보안을 위해 권장되던 기본 안전 설정마저 무력화한다.

 

1. 취약점은?

  • CVE-2026-4372
  • 대상: Hugging Face Transformers 파이썬 라이브러리
  • 영향력: 누적 다운로드 22억 회, 월간 다운로드 1억 4,600만 회에 달하는 핵심 AI 라이브러리로, 취약점의 공격 범위(Blast Radius)가 매우 광범위함
  • 위험성: AI 모델을 다운로드하고 실행할 때, 공격자가 심어둔 악성 코드가 사용자 시스템(특히 고성능 GPU 인프라)에서 아무런 경고나 인증 프롬프트 없이 스텔스(비밀) 방식으로 실행될 수 있다.

2. 취약점 발생 원인 3가지

이 취약점은 Transformers 라이브러리 내부의 독립적인 설계 방식의 결함으로 설계 방식 3가지가 최악의 형태로 맞물리면서 발생했다.

무차별 setattr 주입 ➔ 보호되지 않은 내부 변수 오염 ➔ 샌드박스 없는 커널 임포트

 

1. 무차별적 설정 로드 (setattr 함수 결함)

  • Transformers  라이브러리가 모델의 config.json 파일을 읽을 때 파이썬의 setattr 함수를 사용한다.
  • 이 과정에서 개발자가 지정하는 일반 매개변수와 내부 시스템용 매개변수(언더바_로 시작하는 필드)를 구분하지 않고 모두 로드해 버린다.
  • 관련 파일 위치: src/transformers/configuration_utils.py
  • 결함 내용:
    • 사용자가 AutoModelForCausalLM.from_pretrained("model_name")를 호출하면, 라이브러리는 허브에서 config.json을 가져와 파싱한다.
    • 이 파싱 과정에서 내부 함수가 JSON의 모든 키-값 쌍을 루프 돌며 파ython의 내장 함수인 setattr(self, key, value)를 통해 객체 속성으로 주입한다.
    • 이때 개발자가 의도한 일반 설정 파라미터와 시스템 내부용 비공개 필드(언더바 _로 시작하는 속성)를 필터링하지 않고 무조건 매핑하는 보안 약점([CWE-1066])이 존재했다.

2. 보호되지 않은 내부 속성 유출

  • 공격자는 일반적인 매개변수처럼 보이지만 실제로는 내부 메커니즘을 통제하는 _attn_implementation_internal 이라는 숨겨진 내부 매개변수를 조작할 수 있게 된다.
  • 관련 파일 위치: src/transformers/modeling_utils.pysrc/transformers/models/* (각 모델별 모델링 파일)
  • 결함 내용:
    • 원래 _attn_implementation_internal은 Flash Attention, SDPA(Scaled Dot Product Attention), Eager 모드 등 모델이 내부적으로 어떤 어텐션 메커니즘 가속을 사용할지 제어하는 내부 시스템 변수이다.
    • 공격자가 config.json 내부에 "_attn_implementation_internal": "공격자_계정/악성_커널_저장소" 형태로 값을 주입하면, 위 setattr 결함 때문에 시스템 내부 변수가 외부에 의해 변조되는 현상이 일어난다.

3. 검증 없는 커널 가속 로더 (hub_kernels.py 결함)

  • 위 매개변수에 특정 패턴(소유자/저장소)이 입력되면, 라이브러리는 이를 'Hub Kernels'(GPU 가속을 위한 맞춤형 어텐션 커널)로 인식한다.
  • 이후 샌드박싱(격리), 코드 서명, 무결성 검증, 사용자 승인 팝업 없이 공격자의 저장소에서 파이썬 코드를 그대로 다운로드하여 실행(import)해 버린다.
  • 관련 파일 위치: src/transformers/utils/hub_kernels.py (또는 인퍼런스 가속 가속화 유틸리티 모듈)
  • 결함 내용:
    • 과거 Hugging Face는 GPU 가속 성능을 극대화하기 위해 유저가 커스텀 컴파일된 어텐션 커널을 호스팅할 수 있는 'Hub Kernels' 기능을 추가했었다.
    • hub_kernels.py 내부 코드는 _attn_implementation_internal에 슬래시(/)가 포함된 문자열(예: 소유자/저장소 패턴)이 들어오면, 이를 허브에 등록된 커스텀 커널 저장소 주소로 오인하도록 설계되었다.
    • 이후 해당 원격 저장소에서 파일들을 다운로드한 뒤, 샌드박싱(격리 환경), 코드 서명 검증, 무결성 체크 없이 내부적으로 import 명령을 통해 원격 파이썬 코드를 그대로 실행해 버립니다. 파이썬의 특성상 패키지가 임포트되는 순간 __init__.py 등에 심어진 악성 스크립트가 즉시 실행(RCE)된다.

4. trust_remote_code=False 무력화 및 우회 메커니즘

  • Hugging Face에서 모델을 다운로드할 때 가장 위험한 요소는 모델 저장소 안에 포함된 커스텀 파이썬 파일(*.py) 이다.
    • trust_remote_code=True 일 때: "이 모델 제작자를 믿으니, 모델 폴더 안에 있는 파이썬 코드를 내 컴퓨터에서 그대로 실행하겠다"는 의미
    • trust_remote_code=False 일 때: "나는 가중치(데이터)만 안전하게 읽을 것이고, 모델 폴더 안에 있는 그 어떤 파이썬 코드도 실행하지 않겠다"는 의미
  • 기존의 모든 보안 모델은 "모델 내부의 커스텀 코드를 실행할 것인가?"에만 초점이 맞춰져 있었고, False로 두면 라이브러리가 모델 안의 외부 파이썬 코드를 절대 import하지 않으므로 안전하다고 믿었다.
  • 관련 파일 위치: src/transformers/models/auto/modeling_auto.py (자동 모델 로더 시스템)
  • 결함 내용:
    1. 보안 검사 단계 (무사 통과)
      1. 사용자가 trust_remote_code=False 옵션을 주고 모델을 로드
      2. 라이브러리는 모델 폴더 내부에 악성 .py 파일이 있는지 검사하고, 이를 차단
      3. 여기까지는 정상적으로 방어가 작동
    2. 설정 파일 무차별 주입 (configuration_utils.py)
      1. 그다음 모델의 설정 문서를 읽는데, 공격자가 교묘하게 숨겨놓은 시스템 내부 변수인 _attn_implementation_internal 필드를 발견
      2. 라이브러리는 검증 없이 파이썬의 setattr() 함수를 이용해 이 값을 시스템 내부에 그대로 등록
    3. 라이브러리 자체 기능의 배신 (hub_kernels.py)
      1. 모델 로딩이 끝나고 내부적으로 GPU 가속 설정을 세팅하는 단계로 넘어감
      2. 이때 라이브러리 공식 코드인 hub_kernels.py가 작동함
      3. hub_kernels.py 입장에서는 이것이 모델 내부의 위험한 코드를 실행하는 게 아니라, 라이브러리 자체의 공식 가속 기능(Hub Kernels)을 수행하는 것으로 인식함
    4. 원격 코드 실행 (RCE)
      1. 결국 hub_kernels.py는 trust_remote_code=False 옵션이 켜져 있는지 확인조차 하지 않고, 지정된 원격 저장소에서 코드를 다운로드하여 시스템에 import 하게됨

 


3. 공격 시나리오 흐름

플루토 보안의 보안 연구 디렉터인 요탐 퍼칼(Yotam Perkal)은

"trust_remote_code를 비활성화 상태로 유지하면 모델 로드가 안전해진다는 생각을 바탕으로 수년간 정책을 구축해 왔다. 이 취약점은 그 가정이 깨질 수 있음을 보여주었다. 단 하나의 악성 설정 필드가 표준 모델 다운로드를 소리 없는 시스템 감염으로 바꿀 수 있었습니다."

라고 말했다.

> 정교한 위장

  • AI 모델의 설정 파일(config.json) 내부에 추가된 악성 페이로드(Payload) 는 _attn_implementation_internal 처럼 내부 구현 디테일처럼 보여서 보안 분석가나 개발자가 눈으로 식별하기 어렵다.
  • 실행 시 로그에 이상 징후가 남지 않고 원격 코드 실행이 이루어지게 된다.

> 간단한 유포

  • AI 모델의 설정 파일(config.json) 내부에 악성 페이로드(Payload)를 삽입한 후 Hugging Face 허브에 업로드하였다.

> 소리 없는 감염

  • 사용자가 from_pretrained()와 같은 표준 모델 로드 명령어를 실행하는 순간, 어떠한 경고나 알림도 없이 악성 코드가 즉시 실행됩니다.

> 기존 보안 수단의 무력화

  • trust_remote_code=False 방어벽 우회
  • 보통 신뢰할 수 없는 원격 코드 실행을 막기 위해 개발자들이 이 옵션을 False로 설정하지만, 이번 취약점은 가속 커널 기능을 악용하여 이 방어벽을 완전히 우회한다.
  • 즉, 모델 내부의 파이썬 코드를 실행한 것이 아닌 가속 커널 로더(hub_kernels.py)'를 속여서 움직이게 만들었다.

> 고가치 타겟(기업 GPU 클러스터) 집중 공격

  • 이 공격이 성공하려면 optional(선택) 패키지인 kernels가 설치되어 있어야 한다.
  • 일반 사용자에게는 제약이 될 수 있지만, GPU 가속 추론을 수행하는 기업형 머신러닝 플랫폼이나 AI 클러스터는 성능 극대화를 위해 이 패키지를 기본 포함하는 경우가 많아 기업들이 주 타겟이 된다.

 

 


4. 악성 페이로드가 삽입된 배포 버전 및 환경

  • 대상 버전
    • Transformers 4.56.0 버전부터 5.2.x 버전까지
  • 조건
    • 시스템에 kernels 패키지가 설치되어 있는 경우 취약점이 활성화
  • 유지 기간
    • 이 취약점은 작년(2025년 8월 29일) 4.56.0 릴리스와 함께 처음 도입되어, 패치가 나오기 전까지 약 6개월간 방치되었다. 보안 기업 플루토(Pluto)의 추정에 따르면 이 취약한 버전들의 다운로드 횟수만 2억 3,200만 회에 달한다고 한다.

5. 잠재적 피해와 위험성

만약 이 취약점을 악용한 모델을 로드했을 경우, 공격자는 피해자의 시스템에 침투해 다음과 같은 민감한 자산을 탈취할 수 있다.

  • 클라우드 자격 증명 및 API 키
  • SSH 키 및 데이터베이스(DB) 접근 정보
  • Kubernetes(쿠버네티스) 구성 파일
  • 기업 소스 코드 및 독점 데이터셋

특히 자동화된 모델 평가 파이프라인을 운영하거나, 강력한 GPU 환경을 사용하는 엔터프라이즈 AI 플랫폼들이 가장 큰 위험에 노출되었다.


6. 대응 및 방어 조치 방법

1. 즉각 업데이트

  • 영향을 받는 버전은 2025년 8월 출시된 4.56.0 버전부터입니다.
  • Hugging Face는 이 오류를 수정한 Transformers 5.3.0 버전 (3월 4일 배포) 에서 해당 취약점이 패치되었으므로, 즉시 최신 버전으로 업그레이드해야 한다. (새 버전은 승인되지 않은 외부 커널 로드 시 사용자의 명시적 동의를 요구다.)

2. 사후 점검: 캐시 내부 검사 

  • 현재 시스템에 다운로드되었거나 캐시된 모든 config.json 파일을 검색하여 내부에 ❶ _attn_implementation_internal 필드가 포함되어 있는지, 그리고 ❷ 신뢰할 수 없는 저장소 주소가 적혀 있는지 확인해야 한다.
  • 이는 공격 징후(Red Flag)일 수 있으므로 정밀 조사해야 한다.

3. 아키텍처 보안 강화

  • 환경 격리 (Sandboxing)
    • AI 모델 로딩 및 설정 파일 역직렬화(Deserialization) API는 언제든 코드가 실행될 수 있는 위험 구역으로 취급해야 한다.
    • 반드시 호스트 자격 증명이나 아웃바운드 네트워크 권한이 차단된 모니터링 컨테이너 내부에 격리해야 한다.
  • 출처 검증 도구 활용
    • Cisco에서 출시한 오픈소스인 'Model Provenance Kit'과 같은 도구를 사용하여 모델 가중치, 토크나이저 등의 지문을 기반으로 신뢰할 수 있는 퍼블리셔의 기본 모델 가문에서 유래한 것인지 검증하는 프로세스를 도입해야 한다.

4. 인식 전환

  • 보안 전문가들은 이제 AI 모델을 단순한 데이터가 아니라 "실행 가능한 코드 영역"으로 취급하고, 소프트웨어를 설치할 때만큼 엄격한 보안 경계를 세워야 한다고 강조하고 있다.
  • AI 모델 역시 인기에 편승되어 마치 특별하다고 생각하지 말고, 근본적으로 엄현한 소프트웨어 중 하나이기에 기존의 네트워크보안, DB, 웹APP, OS 보안보다 더 무겁고 위험한 공격 대상이자 공격자로 경각심을 가져야 한다.

플루토의 공동 창립자이자 최고경영자(CEO)인 샤하르 바하트(Shahar Bahat)는 "AI 산업은 인터넷에서 모델을 다운로드하는 것을 소프트웨어 패키지를 설치하는 것만큼이나 일상적인 일처럼 느끼게 만들었다. 이러한 생태계가 계속 성장함에 따라, 조직들은 모델 로드가 점차 보안 경계선이 되고 있음을 인식하고 이에 맞게 취급해야 한다."라고 말했다.


참고자료

https://huntr.com/bounties/1f693a6e-6836-4b8b-a0bd-ca036fba8884

https://www.csoonline.com/article/4181094/hugging-face-transformers-rce-flaw-enables-stealthy-compromise-via-ai-model-configs.html

https://siliconangle.com/2026/06/04/critical-hugging-face-transformers-flaw-ran-attacker-code-routine-model-load/

https://www.w3schools.com/python/ref_func_setattr.asp

https://github.com/huggingface/transformers/commit/a7f8e7ff37d87d1a1a0c8cf607971c607741452f

 

반응형