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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-47630 — NVIDIA Triton Inference Server의 TRITON_BATCH_STRATEGY_PATH를 통한 임의 dlopen으로 네이티브 코드 실행을 가능하게 하는 CVE-2026-47630에 대한 기술적 취약점 분석 및 개념 증명(PoC)이며, 탐지 및 완화 지침을 포함합니다. | Kitploit
도구/GitHubGitHub/s1ko/cve-2026-47630
Vulnerability AnalysisExploitationAI Security
GitHubs1ko/cve-2026-47630

CVE-2026-47630

NVIDIA Triton Inference Server의 TRITON_BATCH_STRATEGY_PATH를 통한 임의 dlopen으로 네이티브 코드 실행을 가능하게 하는 CVE-2026-47630에 대한 기술적 취약점 분석 및 개념 증명(PoC)이며, 탐지 및 완화 지침을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-47630 — NVIDIA Triton Inference Server: TRITON_BATCH_STRATEGY_PATH를 통한 임의 dlopen

triton-inference-server/core의 사용자 정의 배치 전략 로더에서 발생하는 절대 경로 탐색(Absolute Path Traversal) 취약점입니다. 모델 구성 매개변수가 검증 없이 dlopen(RTLD_NOW | RTLD_LOCAL)에 전달되므로, 모델의 config.pbtxt에 영향을 줄 수 있는 사람은 누구나 모델 로드 시점에 Triton 서버 프로세스 내부에서 네이티브 코드를 실행할 수 있습니다.

NVIDIA는 게시판 5865에서 다음과 같이 문자 그대로 인정했습니다: CVE-2026-47630: s1ko.

요약

Triton은 모델의 config.pbtxt에서 모델별 TRITON_BATCH_STRATEGY_PATH 매개변수를 허용합니다. 26.05까지 이 값은 임의의 파일 시스템 경로로 취급되어 수정 없이 dlopen에 전달되었습니다. 포함(containment) 검사도, 허용 목록도, 서명 또는 해시 검증도 없었습니다. 절대 경로, 탐색 시퀀스, 심볼릭 링크가 모두 허용되었습니다.

RTLD_NOW는 모든 심볼을 즉시 해석하고 객체의 __attribute__((constructor)) / .init_array 루틴을 dlopen이 반환되기 전에 실행합니다. 따라서 실행은 로드 성공 여부와 무관하게 이루어집니다. 페이로드가 실행되는 데 TRITONBACKEND_ModelBatch* 진입점이 하나도 존재할 필요가 없으며, Triton 프로세스의 권한(NGC 컨테이너에서는 흔히 root)으로 실행됩니다.

실행

코드 경로 (26.05 기준)

src/backend_model.cc — 공격자 입력이 batch_libpath에 도달하며, 존재 여부만 검증됩니다:

root@kitploit:~
if (model_config.parameters().contains("TRITON_BATCH_STRATEGY_PATH")) {
  batch_libpath = model_config.parameters()
                      .at("TRITON_BATCH_STRATEGY_PATH")
                      .string_value();
  bool exists = false;
  RETURN_IF_ERROR(FileExists(batch_libpath, &exists));
  if (!exists) {
    return Status(
        triton::common::Error::Code::NOT_FOUND,
        ("Batching library path not found: " + batch_libpath).c_str());
  }
}

주의할 점으로, 같은 파일의 다른 곳에서 Triton이 레이블 경로와 백엔드 라이브러리 경로에 이미 적용한 IsChildPathEscapingParentPath 호출이 여기에는 전혀 없다는 것입니다.

src/backend_model.cc — SetBatchingStrategy가 이를 전달합니다:

root@kitploit:~
Status TritonModel::SetBatchingStrategy(const std::string& batch_libpath)
{
  std::unique_ptr<SharedLibrary> slib;
  RETURN_IF_ERROR(SharedLibrary::Acquire(&slib));
  RETURN_IF_ERROR(slib->OpenLibraryHandle(batch_libpath, &batch_dlhandle_));

src/shared_library.cc — 싱크(sink):

root@kitploit:~
*handle = dlopen(path.c_str(), RTLD_NOW | RTLD_LOCAL);

도달 가능성

model_config.parameters()를 제어할 수 있는 현실적인 경로는 세 가지입니다:

  1. 멀티테넌트 모델 저장소. 자신의 모델 config.pbtxt를 소유한 테넌트가 자신의 디렉터리에 .so를 심고 매개변수가 이를 가리키게 합니다. 페이로드는 서버의 권한으로 실행되므로 다른 모든 테넌트의 가중치, 비밀, GPU에 접근할 수 있습니다.
  2. 파일 오버라이드 API. 문서화된 file:<rel-path> 매개변수 접두사와 결합된 TRITONSERVER_ServerLoadModelWithParameters를 사용하면 모델 로드 권한이 있는 호출자가 단일 요청으로 config.pbtxt와 .so를 제출하고 즉시 로드를 트리거할 수 있습니다. API 외부의 파일 시스템 접근은 필요하지 않습니다.
  3. 손상된 모델 저장소 미러. S3, GCS, Azure Blob 또는 NGC 미러가 모델 아티팩트의 권위 있는 소스로 취급됩니다. 미러를 제어하는 사람은 두 파일을 모두 제공하며, Triton은 요청 시 이를 가져와 dlopen합니다.

개념 증명

poc/에는 OpenLibraryHandle이 수행하는 동작으로 축소된 프리미티브가 포함되어 있습니다. 소스만 제공됩니다 — 직접 빌드하세요:

root@kitploit:~
$ cd poc && ./build.sh
$ gcc -O0 -o test_dlopen test_dlopen.c -ldl
$ ./test_dlopen ./evil.so
dlopen OK, handle=0x55d1779652c0
$ cat /tmp/triton_dlopen_rce_proof.log
[triton-dlopen-rce] constructor fired @ Fri May  1 09:56:56 2026
  pid=240157  uid=1000  euid=1000  cwd=/opt/poc

페이로드는 무해합니다. pid, uid, euid, cwd를 기록하는 한 줄을 추가할 뿐입니다. Debian 13, GCC 14.2, x86_64에서 검증되었습니다.

Triton 쪽 트리거의 경우, 빌드된 evil.so를 모델 저장소의 poc/config.pbtxt 옆에 두고 모델을 로드하세요 — 자동 로드, --load-model, 또는 POST /v2/repository/models/evil_model/load. 영향받는 버전에서는 백엔드 심볼 조회 이전에 SetBatchingStrategy 중에 생성자(constructor)가 실행됩니다.

탐지

로드는 Triton 자체가 INFO 수준으로 기록합니다:

root@kitploit:~
Loading custom batching strategy library <path> for model <name>

수정된 빌드에서 거부된 시도는 Batching library path escapes model repository.로 표시됩니다.

절대 경로이거나, ..를 포함하거나, 모델 디렉터리 밖으로 해석되는 모든 TRITON_BATCH_STRATEGY_PATH 값은 버전과 무관하게 알림을 발생시킬 가치가 있습니다. 로그 줄과 구성 매개변수를 모두 포괄하는 Sigma 규칙은 detection/에 있습니다.

보완 신호:

  • TRITON_BATCH_STRATEGY_PATH 매개변수를 전혀 포함하는 config.pbtxt 파일 — 이 기능은 실제로 드물기 때문에 존재 자체만으로 유용한 필터입니다.
  • 모델 저장소 안에 나타나는 공유 객체 중 백엔드 아티팩트가 아닌 것.
  • tritonserver 프로세스가 모델 루트 밖의 .so를 openat/mmap하는 경우 (auditd, eBPF 또는 Falco).

완화

Triton Inference Server 26.06 이상으로 업그레이드하세요. 이 수정은 로더에 누락된 포함(containment) 검사를 추가합니다:

root@kitploit:~
bool escapes{true};
RETURN_IF_ERROR(IsChildPathEscapingParentPath(
    batch_libpath, localized_model_dir->Path(), &escapes));
if (escapes) {
  return Status(
      Status::Code::INVALID_ARG,
      "Batching library path escapes model repository.");
}

업그레이드가 즉시 불가능한 경우의 보완 통제:

  • 모든 config.pbtxt에서 모델 저장소에 도달하기 전에 TRITON_BATCH_STRATEGY_PATH를 거부하거나 제거하세요.
  • 모델 저장소를 신뢰 경계로 취급하세요. 신뢰할 수 없는 당사자가 여기에 쓸 수 없어야 하며, 원격 미러는 동기화 전에 무결성이 검증되어야 합니다.
  • 필요하지 않다면 파일 오버라이드 로드 경로를 비활성화하세요 (explicit 이외의 --model-control-mode, 또는 저장소 엔드포인트에 대한 권한 부여).
  • tritonserver를 권한 없는 사용자로 실행하고 모델 저장소 마운트를 읽기 전용으로 유지하여, 로드가 성공하더라도 피해 범위가 최소화되도록 하세요.
  • 로드 전에 모델 아티팩트에 대한 해시 또는 서명을 검증하세요.

매핑: MITRE ATT&CK T1574.006 Hijack Execution Flow: Dynamic Linker Hijacking 및 T1129 Shared Modules; NIST SP 800-53r5 SI-7, CM-5, SC-18; CIS Controls v8 §2, §4.

타임라인

참고 자료

  • NVIDIA 보안 게시판 5865 — https://github.com/NVIDIA/product-security/blob/main/2026/5865/5865.md
  • CVE 레코드 — https://github.com/NVIDIA/product-security/blob/main/2026/5865/CVE-2026-47630.json
  • triton-inference-server/core — https://github.com/triton-inference-server/core
  • NVIDIA Product Security — https://www.nvidia.com/security/

라이선스

MIT — LICENSE 참조.

도구 다운로드
CVECVE-2026-47630
NVIDIA 보안 권고5865 (2026-08-18)
CWECWE-36 (절대 경로 탐색); CWE-114 / CWE-829로 보고됨
CVSS v3.1 (NVIDIA)5.5 MEDIUM — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
영향받는 버전Triton Inference Server 0.0 – 26.05 (Linux)
수정된 버전26.06
보고자s1ko (github.com/s1ko, [email protected])
공급업체 추적NVIDIA PSIRT 티켓 6139742
날짜이벤트
2026-04-25기본 Triton 경로 처리 발견 보고; NVIDIA PSIRT 티켓 6128799 개설
2026-05-01이 2차 발견 확인 및 보고; PSIRT 티켓 6139742 개설
2026-05-28PSIRT와 조율된 공개 일정 합의
2026-06Triton Inference Server 26.06에서 수정 배포
2026-08-18NVIDIA가 게시판 5865를 발행, CVE-2026-47630 지정 및 s1ko 크레딧
2026-08-22이 문서 공개