Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-47117-openmed-rce — OpenMed < 1.5.2 PII 개인정보 보호 필터 모델 로딩 및 trust_remote_code=True를 통한 인증되지 않은 RCE | Kitploit
도구/GitHubGitHub/saiteja-erukude/cve-2026-47117-openmed-rce
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingAI Security
GitHubsaiteja-erukude/cve-2026-47117-openmed-rce

CVE-2026-47117-openmed-rce

OpenMed < 1.5.2 PII 개인정보 보호 필터 모델 로딩 및 trust_remote_code=True를 통한 인증되지 않은 RCE

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
5일 전아직 검토되지 않음

CVE-2026-47117: OpenMed PII 모델 로딩을 통한 인증되지 않은 원격 코드 실행

심각도: 치명적(Critical), CVSS 4.0 9.3, CVSS 3.1 9.8 (CNA인 VulnCheck가 배정)

벡터 (v4.0): CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

벡터 (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

영향 범위: OpenMed < 1.5.2

수정 버전: 1.5.2

CWE: CWE-94 (코드 생성을 위한 제어 불량, 코드 인젝션)

보고자: Sai Teja Erukude

CNA: VulnCheck

게시일: 2026년 6월 2일


요약

1.5.2 이전의 OpenMed에는 PII 개인정보 보호 필터 모델 로딩 경로에 인증되지 않은 원격 코드 실행 취약점이 존재합니다.

REST API 엔드포인트 POST /pii/extract 및 POST /pii/deidentify는 요청 본문에서 model_name 값을 받습니다. 취약한 버전에서는 개인정보 보호 필터 디스패처가 공격자가 제어할 수 있는 이 값에 광범위한 부분 문자열 매칭을 사용했습니다. 따라서 attacker/foo-privacy-filter-bar와 같은 모델 이름은 개인정보 보호 필터 백엔드로 라우팅될 수 있었습니다.

MLX/Torch가 아닌 배포 환경에서 해당 백엔드는 Transformers를 통해 Hugging Face 모델 아티팩트를 trust_remote_code=True로 로드했습니다. 공격자가 제어하는 모델 저장소의 config.json 또는 tokenizer_config.json에 auto_map을 통해 참조되는 사용자 정의 Transformers 코드가 포함된 경우, 모델 또는 토크나이저 로딩 중에 Transformers가 해당 Python 코드를 가져와 실행했습니다.

가져온 코드는 OpenMed 서비스 프로세스의 권한으로 실행되었습니다.

영향

OpenMed REST API에 도달할 수 있는 인증되지 않은 원격 공격자는 model_name에 악의적인 Hugging Face 스타일 모델 식별자를 제공하여 서버에서 임의의 Python 코드를 실행할 수 있습니다.

서비스 배포 방식에 따라 다음이 가능할 수 있습니다:

  • OpenMed 프로세스가 접근할 수 있는 파일 읽기 또는 수정.
  • 환경 변수 및 애플리케이션 비밀 정보 접근.
  • OpenMed 호스트에서 접근 가능한 내부 서비스 호출.
  • 애플리케이션 동작 방해 또는 대체.

영향받는 엔드포인트

두 PII 엔드포인트 모두 model_name을 허용하고 동일한 PII 추출/모델 로딩 경로를 사용하므로 이 문제는 두 엔드포인트를 통해 모두 발생할 수 있습니다:

root@kitploit:~
POST /pii/extract
Content-Type: application/json

{
  "text": "John Doe called 555-1212",
  "model_name": "attacker/foo-privacy-filter-bar",
  "confidence_threshold": 0.0
}
root@kitploit:~
POST /pii/deidentify
Content-Type: application/json

{
  "text": "John Doe called 555-1212",
  "model_name": "attacker/foo-privacy-filter-bar",
  "confidence_threshold": 0.0
}

기술적 세부 사항

취약한 제어 흐름에는 두 가지 신뢰 경계 실패가 있습니다:

  1. API는 개인정보 보호 필터 백엔드를 선택할 때 사용자 제공 model_name을 신뢰했습니다.
  2. 선택된 백엔드는 trust_remote_code=True로 Transformers 아티팩트를 로드하여 원격 모델 저장소 코드를 신뢰했습니다.

디스패처는 privacy-filter를 포함하는 모든 모델 식별자를 개인정보 보호 필터 계열의 일부로 취급했습니다. 이를 통해 공격자가 제어하는 식별자(예: attacker/foo-privacy-filter-bar)가 신뢰되는 자사(自社) Privacy Filter 모델용으로 의도된 코드 경로에 도달할 수 있었습니다.

해당 경로로 라우팅되면 Transformers는 auto_map을 통해 공격자가 제어하는 사용자 정의 코드를 로드할 수 있었습니다. 이 가져오기는 모델/토크나이저 로딩 중, 유용한 추론이 성공하기 전에 발생합니다. 따라서 증명 페이로드는 다음과 같이 작을 수 있습니다:

root@kitploit:~
from pathlib import Path

Path("marker.txt").write_text(
    "custom Transformers code executed via trust_remote_code\n",
    encoding="utf-8",
)

개념 증명

poc_exploit.py는 이름에 privacy-filter가 포함된 무해한 로컬 Hugging Face 스타일 모델 디렉토리를 만듭니다. 생성된 사용자 정의 Transformers 모듈은 가져올 때 마커 파일을 작성합니다. 그런 다음 스크립트는 해당 디렉토리를 model_name으로 하여 테스트용 OpenMed API 인스턴스에 요청을 보냅니다.

취약한 OpenMed 버전에서 기대되는 동작은 다음과 같습니다:

  1. API가 공격자가 제어하는 model_name을 수락합니다.
  2. 부분 문자열 라우팅이 이를 개인정보 보호 필터 백엔드로 보냅니다.
  3. Transformers가 trust_remote_code=True 때문에 생성된 사용자 정의 모듈을 가져옵니다.
  4. 마커 파일이 생성되어 OpenMed 서비스 프로세스에서 코드 실행이 발생했음을 증명합니다.
  5. 장난감 모델은 실제 Privacy Filter 모델이 아니므로 요청은 이후 실패할 수 있습니다. 가져오기 시점의 마커가 관련 증거입니다.

로컬 테스트 인스턴스에 대해서만 실행하십시오:

root@kitploit:~
pip install -r requirements.txt
python poc_exploit.py --target http://127.0.0.1:8000 --endpoint /pii/extract

OpenMed 서비스가 생성된 로컬 디렉토리에 접근할 수 없는 위치에서 실행되는 경우, 동등한 테스트 모델을 통제된 Hugging Face 저장소에 게시하고 해당 식별자를 명시적으로 전달하십시오:

root@kitploit:~
python poc_exploit.py \
  --target http://127.0.0.1:8000 \
  --model-name your-org/foo-privacy-filter-bar \
  --marker marker.txt

해결 방안

OpenMed 1.5.2 이상으로 업그레이드하십시오.

OpenMed 1.5.2는 라우팅과 신뢰를 분리합니다:

  • privacy-filter를 포함하는 임의의 저장소 이름은 더 이상 신뢰되는 개인정보 보호 필터 경로로 라우팅되지 않습니다.
  • PrivacyFilterTorchPipeline은 trust_remote_code를 기본적으로 False로 설정합니다.
  • 명시적인 자사 Privacy Filter 저장소만 신뢰되는 원격 코드 로딩에 허용 목록으로 등록됩니다.
  • 통제된 비공개 파인튜닝이 필요한 운영자는 OPENMED_TRUSTED_REMOTE_CODE_MODELS로 이를 허용 목록에 추가할 수 있습니다.

즉시 업그레이드가 불가능한 경우:

  • 취약한 REST API를 신뢰할 수 없는 클라이언트에 노출하지 마십시오.
  • 사용자 제어 model_name 값을 trust_remote_code=True로 Transformers에 전달하지 마십시오.
  • 부분 문자열 기반 모델 라우팅을 정확한 신뢰 모델 식별자로 대체하십시오.
  • 프로덕션에서 승인된 로컬 모델 아티팩트를 사전 로드하고 임의 모델 다운로드를 비활성화하십시오.

공개 타임라인

크레딧

Sai Teja Erukude가 발견 및 보고했으며, VulnCheck를 통해 조율되었습니다.

참고 자료

  • CVE 레코드: https://www.cve.org/CVERecord?id=CVE-2026-47117
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-47117
  • VulnCheck 권고: https://www.vulncheck.com/advisories/openmed-remote-code-execution-via-pii-model-loading
  • OpenMed 1.5.2 릴리스 노트: https://github.com/maziyarpanahi/openmed/releases/tag/v1.5.2
  • OpenMed 프로젝트: https://github.com/maziyarpanahi/openmed
도구 다운로드
날짜이벤트
2026년 5월 18일VulnCheck에 취약점 제출
2026년 5월 20일VulnCheck가 조율된 공개(disclosure) 연락 시작
2026년 5월 22일CVE-2026-47117 잠정 배정
2026년 6월 1일OpenMed 1.5.2 수정 사항 검토 및 확인
2026년 6월 2일CVE-2026-47117 공개