Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
SE6013_Project — CVE-2026-4372: 위협 모델, 근본 원인 분석, 재현 및 탐지 | Kitploit
도구/GitHubGitHub/alvin21mfmlai/se6013_project
Defensive ToolsStatic AnalysisVulnerability AnalysisSupply Chain SecurityPapers & ResearchLearning & EducationAI Security
GitHubalvin21mfmlai/se6013_project

SE6013_Project

CVE-2026-4372: 위협 모델, 근본 원인 분석, 재현 및 탐지

저장소 보기
16일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-4372: 위협 모델, 근본 원인 및 방어

Hugging Face transformers의 치명적인 원격 코드 실행(RCE) 취약점에 대한 방어적 분석.


목차

  1. 취약점 개요
  2. 먼저 1차 출처에서 확인하기
  3. 위협 모델
  4. 근본 원인
  5. 방어
  6. 탐지

1. 취약점 개요

필드값
식별자CVE-2026-4372 / GHSA-29pf-2h5f-8g72
구성 요소Hugging Face transformers
분류원격 코드 실행 (CWE-94, 코드 주입)
진입점AutoModelForCausalLM.from_pretrained(), 모델이 로드될 때
메커니즘모델의 config.json에 있는 어텐션 설정(attn_implementation / _attn_implementation_internal)이 라이브러리로 하여금 공격자 코드를 다운로드하고 실행하게 함
핵심 속성trust_remote_code=False를 우회함, 바로 이런 상황을 막기 위해 사용자들이 의존하는 설정
수정 버전transformers 5.3.0

안전을 위해 의도적으로 trust_remote_code=False를 설정해 둔 사용자도 여전히 노출되었다.


2. 먼저 1차 출처에서 확인하기 ⚠️

아래 세부 사항을 최종적인 것으로 간주하기 전에 공식 출처와 대조하여 확인하라:

  • GHSA-29pf-2h5f-8g72 (GitHub 보안 권고): 영향을 받는 버전 및 요약.
  • CVE-2026-4372에 대한 NVD 항목: 심각도 점수 및 약점 유형.
  • 보안 권고에서 링크된 수정 커밋: 어떤 코드 경로가 차단되었는지 정확히 보여줌.

두 가지 트리거 설명이 유통되고 있다:

  1. config.json의 어텐션 필드(_attn_implementation_internal).
  2. 흔히 transformers[all]을 통해 설치되는 kernels 패키지.

이들은 대부분 동일한 경로일 가능성이 높다: 어텐션 필드가 Hub 저장소를 지정하고, kernels 패키지가 그로부터 코드를 다운로드하여 실행한다. 수정 커밋이 이를 확인해 줄 때까지 여기서 언급된 필드 이름은 잠정적인 것으로 간주하라.


3. 위협 모델

3.1 모델이 로드되는 방식

[ Model repo on the Hub ]       untrusted source
        │  config.json, tokenizer, weights, (code)
        ▼
[ Download to local cache ]
        ▼
[ Read config.json ]            settings become a config object
        ▼
[ Pick model class + attention type ]
        ▼
[ Build model, load weights ]
        ▼
[ Model runs in the user's process, with the user's permissions ]

3.2 신뢰 경계

#경계적용되어야 하는 가드
TB-1허브 → 로컬 디스크신뢰할 수 있는 저장소, 고정된 커밋으로의 피닝
TB-2설정 파일 → 설정 객체알려진 안전한 값만 허용
TB-3설정 객체 → 실행 중인 코드trust_remote_code
TB-4모델 → 운영 체제샌드박스, 최소 권한

이 버그는 TB-3에서의 실패입니다. 설정 파일의 값이 trust_remote_code 검사를 거치지 않고 코드 실행에 도달했습니다.

3.3 피해자가 공격자의 모델을 받게 되는 경로

  • 유사 저장소 이름, 예를 들어 인기 모델 이름의 거의 동일한 복사본.
  • 악의적이거나 침해된 배포자가 오염된 버전을 푸시.
  • 튜토리얼, 노트북 또는 의존성이 악성 저장소를 가리킴.
  • 피닝되지 않은 버전: 어제는 안전했던 저장소가 오늘 악성 파일을 제공.

모든 경우에 피해자는 정상적인 호출인 AutoModelForCausalLM.from_pretrained("<repo-id>")만 실행합니다.


4. 근본 원인

4.1 가드가 잘못된 경로에 있었다

trust_remote_code는 저장소 코드를 실행하는 한 가지 방식, 즉 사용자 정의 modeling_*.py 파일을 보호합니다. 어텐션 설정은 그 가드를 거치지 않는 두 번째 방식이었습니다.

     untrusted config.json attention setting
                    │
                    ▼
        "pick attention type" logic
                    │                  never checks:
                    ✗ ─────────────▶   trust_remote_code
                    ▼
     download + run code from the Hub (via `kernels`)

4.2 기여 요인

  1. 동일한 위험한 동작에 이르는 두 가지 경로, 그중 하나만 보호됨.
  2. 코드를 선택하는 설정이 일반 데이터로 취급되어, 숫자와 같은 신뢰 수준을 가짐.
  3. "내부" 필드(_ 접두사)가 신뢰할 수 없는 파일에서 여전히 설정될 수 있었음.
  4. 선택적 패키지(kernels)가 설치되어 있을 때 공격을 조용히 가능하게 함, 예를 들어 transformers[all]을 통해.

4.3 교훈

위험한 동작을 보호하라, 그 동작에 이르는 하나의 경로가 아니라. "코드 실행"으로 이어질 수 있는 모든 경로는 동일한 검사를 거쳐야 한다.


5. 방어

방어는 하나의 자체 포함 스크립트인 defence/safe_load.py이다. 그 함수 safe_from_pretrained()는 from_pretrained()를 대체하며, 모델이 로드되기 전에 네 가지 검사를 수행한다. 하나라도 실패하면 UnsafeModelLoad를 발생시키고 아무것도 로드되지 않는다.

#검사수행 내용
1버전transformers가 5.3.0보다 오래된 경우 거부한다. 이것이 실제 수정이다.
2Kernels구버전에서 kernels 패키지가 설치되어 있으면 거부한다. 공격에 이것이 필요하기 때문이다.
3Config모델의 config 파일을 읽고 위험한 설정(아래 참조)이 포함되어 있으면 거부한다. Hub 모델은 동일한 커밋에서 검사되고 로드된다.
4원격 코드항상 trust_remote_code=False로 설정한다. 모범 사례일 뿐이다: 이 CVE는 이를 우회한다.

구버전은 검사 1에서 거부된다. 검사 2와 3은 실험실 전용 옵션 allow_vulnerable_env=True가 설정된 경우에만 구버전에서 실행된다.

검사 3이 차단하는 것:

  • 내장되지 않은 어텐션 설정(attn_implementation, _attn_implementation, _attn_implementation_internal). eager, sdpa, flash_attention_2, flash_attention_3, flex_attention만 허용되므로, attacker-org/evil-kernel과 같은 값은 중첩된 하위 config 내부에 있더라도 차단된다.
  • _attn_implementation_internal, auto_map, custom_pipelines 필드.
  • 읽을 수 없는 config 파일.
  • 검사를 건너뛰게 되므로 config=로 직접 전달된 config.

Hub 모델의 경우 config 파일만 다운로드되며, 가중치나 코드는 절대 다운로드되지 않는다. 이들은 하나의 고정된 커밋에서 다운로드되고, 모델은 그 동일한 커밋에서 로드되므로, 검사와 로드 사이에 파일이 바뀔 수 없다. 경고를 검토한 후, 사람이 accept_findings=True로 검사 3을 재정의할 수 있다.

상황공격을 막는 것
transformers 5.3.0 이상검사 1
구버전, kernels 설치됨검사 2
구버전, config에 위험한 설정검사 3
검사 후 저장소가 변경됨검사 3 (동일한 커밋을 검사하고 로드)

한계: 검사 3은 위에 나열된 설정만 알기 때문에 새로운 공격을 잡을 수 없다. transformers>=5.3.0으로 업그레이드하는 것이 유일한 완전한 수정이다.


6. 탐지

탐지 구성 요소는 CVE-2026-4372와 관련된 잠재적으로 안전하지 않은 Hugging Face 모델 구성과 취약한 종속성을 식별한다. 두 가지 독립적인 탐지 메커니즘을 제공한다: 정적 구성 스캐닝과 종속성 분석.

방어 구성 요소와 달리, 이 도구들은 모델을 로드하거나 신뢰할 수 없는 코드를 실행하지 않고 잠재적인 보안 위험을 보고한다.

6.1 정적 구성 탐지

파일: src/detection/static_detector.py

정적 탐지기는 config.json 파일을 파싱하고 보안에 민감한 필드에 대해 중첩된 JSON 객체와 배열을 재귀적으로 검사한다.

다음 필드가 모니터링된다:

구성 필드탐지 목적
_attn_implementation_internalCVE-2026-4372와 관련된 내부 어텐션 구성 필드
_experts_implementation_internal검토가 필요한 추가 내부 구현 필드
auto_map사용자 정의 모델 구현 코드를 참조할 수 있음
custom_pipelines사용자 정의 파이프라인 구현을 참조할 수 있음

사용법:

cd src/detection
python3 static_detector.py samples/suspicious_config.json

출력 예시:

[WARNING] samples/suspicious_config.json: review field '_attn_implementation_internal'

종료 코드:

종료 코드의미
0PASS — 모니터링 대상 필드가 감지되지 않음
1WARNING — 하나 이상의 모니터링 대상 필드가 감지됨
2ERROR — 잘못된 JSON, 파일 누락 또는 처리 오류

모니터링 대상 필드의 존재가 반드시 악용을 의미하지는 않습니다. 발견 사항은 추가 조사가 필요합니다.

6.2 의존성 탐지

파일: src/detection/dependency_detector.py

의존성 탐지기는 Python 환경을 검사하여 다음을 식별합니다:

  • 설치된 Hugging Face Transformers 버전
  • 사용 가능한 경우 설치된 kernels 패키지 버전
  • 선택적 kernels 패키지를 import할 수 있는지 여부
  • Transformers 버전이 문서화된 영향 범위에 속하는지 여부

사용법:

cd src/detection
python3 -m pip install packaging
python3 dependency_detector.py

시뮬레이션된 취약 환경에 대한 예시 출력:

=== CVE-2026-4372 Dependency Detection ===
Transformers version: 5.2.0
Kernels version: Not installed
Kernels import available: False
[WARNING] Vulnerable Transformers version detected.
[INFO] The optional kernels package is not available.
[ACTION] Upgrade Transformers to 5.3.0 or newer.

탐지기는 읽기 전용 검사를 수행하며 취약한 Transformers 버전을 설치하거나 실행하지 않습니다.

6.3 의존성 취약점 감사

pip-audit 도구를 사용하여 취약한 버전과 패치된 Transformers 버전에 대해 공개된 보안 권고를 비교했습니다.

파일:

  • requirements-vulnerable.txt — Transformers 5.2.0
  • requirements-patched.txt — Transformers 5.3.0

명령:

cd src/detection

pip-audit --no-deps --disable-pip -r requirements-vulnerable.txt

pip-audit --no-deps --disable-pip -r requirements-patched.txt

pip-audit 2.10.1을 사용한 관찰 결과:

Transformers 버전보고된 취약점 항목
5.2.06
5.3.03

패치된 버전에서는 취약점 항목이 세 개 줄어든 것으로 나타났습니다. 그러나 Transformers 5.3.0에는 여전히 다른 보고된 취약점이 있었습니다. 이러한 감사 결과는 권고 데이터베이스가 업데이트됨에 따라 변경될 수 있습니다.

이 감사는 공개된 의존성 취약점을 식별하며, 악용 가능성을 독립적으로 입증하지는 않습니다.

6.4 자동화된 테스트

파일: src/detection/test_detection.py

Python의 내장 unittest 프레임워크를 사용하여 8개의 단위 테스트를 구현했습니다.

테스트 범위:

  1. 정상 구성
  2. 의심스러운 attention 구현 필드
  3. 중첩된 attention 구현 필드
  4. Experts 구현 필드
  5. auto_map 필드
  6. custom_pipelines 필드
  7. 잘못된 JSON
  8. 구성 파일 누락

테스트 실행:

cd src/detection
python3 -m unittest -v test_detection.py

관찰된 결과:

Ran 8 tests

OK

격리된 Python 3.12 Docker 환경에서 8개 테스트가 모두 통과했습니다.

6.5 한계 및 통합

  • 정적 탐지는 미리 정의된 구성 필드를 식별하지만 원격 코드 실행을 확인하지는 않습니다.
  • 정상적인 구성에도 모니터링 대상 필드가 포함되어 경고가 발생할 수 있습니다.
  • 스캐너는 현재 가능한 모든 attention 구현 값을 검증하지는 않습니다.
  • 의존성 버전 분류 테스트는 시뮬레이션된 패키지 메타데이터를 사용하여 수행되었습니다.
  • 테스트는 재현된 익스플로잇이 아닌 합성 구성 파일을 사용합니다.
  • Attack 컴포넌트의 실제 구성에 대한 검증은 아직 대기 중입니다.

다른 컴포넌트와의 통합:

도구 다운로드