扫描报告
68 /100
LLM Proxy
Multi-provider LLM API proxy with content security auditing, streaming response detection, and health monitoring
The skill acts as an unauthenticated local proxy forwarding user API credentials to external LLM providers, with a content-security layer that declares blocking but only logs critical alerts (including credential theft and reverse shell patterns), creating a deceptive security illusion.
不要安装此技能
Do not deploy. The skill forwards credentials without authorization checks, its blocking mechanism is disabled for critical severity (which includes credential exfiltration), and shell execution is used without being declared in SKILL.md.
攻击链 5 步
◎
入口 User invokes skill to '启动llm-proxy'
SKILL.md:17⬡
提权 Skill runs llm-proxy-ctl.sh which starts daemon via background process (&), kill/kill -9 port cleanup — shell:WRITE capability used without declaration
scripts/llm-proxy-ctl.sh:34⬡
提权 Proxy binds to TCP port 18888 on
127.0.0.1 — network:WRITE not declared in SKILL.md scripts/llm-proxy.py:482⬡
提权 Attacker sends POST with stolen API key through the proxy (no auth required since block=false)
scripts/llm-proxy.py:259◉
影响 CRED-001 fires but block=false; credential exfiltration is only logged, not prevented. Stolen key is forwarded to upstream provider.
scripts/content-filter-rules.json:217安全发现 8 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 严重 | Critical content-blocking disabled — credential exfiltration not prevented 凭证窃取 | scripts/content-filter-rules.json:217 |
| 严重 | API key forwarding without authorization 凭证窃取 | scripts/llm-proxy.py:259 |
| 高危 | Documentation claims blocking, code does not block 文档欺骗 | SKILL.md:99 |
| 高危 | Undeclared persistent background service 敏感访问 | scripts/llm-proxy-ctl.sh:34 |
| 高危 | Undeclared shell and process management capabilities 文档欺骗 | scripts/llm-proxy-ctl.sh:1 |
| 中危 | SIGUSR1 debug handler exposes full thread stacks 代码执行 | scripts/llm-proxy.py:471 |
| 中危 | Verbose request/response logging to user-writable directory 数据外泄 | scripts/llm-proxy.py:361 |
| 低危 | No dependencies declared — no requirements.txt or package.json 供应链 | scripts/llm-proxy.py:1 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 网络访问 | NONE | WRITE | ✗ 越权 | SKILL.md:1 — SKILL.md declares no network access, but the proxy opens TCP port 1… |
| 命令执行 | NONE | WRITE | ✗ 越权 | llm-proxy-ctl.sh:34,47 — Uses lsof, kill, kill -9, backgrounding python3; SKILL.… |
| 文件系统 | NONE | WRITE | ✗ 越权 | llm-proxy-ctl.sh:35 — mkdir -p for log dirs; llm-proxy.py:89 — writes to ~/.open… |
| 环境变量 | NONE | READ | ✗ 越权 | llm-proxy.py:34-37 — reads LLMPROXY_CONFIG, LLM_PROXY_PORT, RULES_FILE from os.e… |
25 项发现
中危 外部 URL 外部 URL
http://127.0.0.1:18888/health README.md:116 中危 外部 URL 外部 URL
https://api.your-provider.com/v1 README.md:147 中危 外部 URL 外部 URL
http://127.0.0.1:18888/your-provider/chat/completions README.md:156 中危 外部 URL 外部 URL
https://api.your-provider.com/v1/chat/completions README.md:157 中危 外部 URL 外部 URL
http://127.0.0.1:18888/openai/chat/completions README.md:259 中危 外部 URL 外部 URL
http://127.0.0.1:18888/bailian/chat/completions README.md:272 中危 外部 URL 外部 URL
https://api.groq.com/openai/v1 scripts/llm-proxy-config.json:49 中危 外部 URL 外部 URL
https://api.cloudflare.com/client/v4/accounts scripts/llm-proxy-config.json:55 中危 外部 URL 外部 URL
https://api.deepseek.com/v1 scripts/llm-proxy-config.json:61 中危 外部 URL 外部 URL
https://api.moonshot.cn/v1 scripts/llm-proxy-config.json:67 中危 外部 URL 外部 URL
https://open.bigmodel.cn/api/paas/v4 scripts/llm-proxy-config.json:73 中危 外部 URL 外部 URL
https://api.siliconflow.cn/v1 scripts/llm-proxy-config.json:79 中危 外部 URL 外部 URL
https://openrouter.ai/api/v1 scripts/llm-proxy-config.json:98 中危 外部 URL 外部 URL
https://integrate.api.nvidia.com/v1 scripts/llm-proxy-config.json:104 中危 外部 URL 外部 URL
https://coding.dashscope.aliyuncs.com/v1 scripts/llm-proxy-config.json:110 中危 外部 URL 外部 URL
https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxin_workshop scripts/llm-proxy-config.json:116 中危 外部 URL 外部 URL
https://spark-api.xf-yun.com/v3.5/chat scripts/llm-proxy-config.json:122 中危 外部 URL 外部 URL
https://api.minimax.chat/v1 scripts/llm-proxy-config.json:128 中危 外部 URL 外部 URL
https://api.lingyiwanwu.com/v1 scripts/llm-proxy-config.json:134 中危 外部 URL 外部 URL
https://api.baichuan-ai.com/v1 scripts/llm-proxy-config.json:140 中危 外部 URL 外部 URL
https://api.together.xyz/v1 scripts/llm-proxy-config.json:146 中危 外部 URL 外部 URL
https://api.fireworks.ai/inference/v1 scripts/llm-proxy-config.json:152 中危 外部 URL 外部 URL
https://api.replicate.com/v1 scripts/llm-proxy-config.json:158 提示 邮箱 邮箱地址
[email protected] scripts/content-filter-rules.json:4 提示 邮箱 邮箱地址
[email protected] scripts/llm-proxy.py:513 目录结构
7 文件 · 49.6 KB · 1748 行 Python 1f · 608L
Markdown 2f · 539L
JSON 2f · 412L
Shell 2f · 189L
├─
▾
scripts
│ ├─
content-filter-rules.json
JSON
│ ├─
llm-proxy-common.sh
Shell
│ ├─
llm-proxy-config.json
JSON
│ ├─
llm-proxy-ctl.sh
Shell
│ └─
llm-proxy.py
Python
├─
README.md
Markdown
└─
SKILL.md
Markdown
依赖分析 1 项
| 包名 | 版本 | 来源 | 已知漏洞 | 备注 |
|---|---|---|---|---|
Python standard library only | N/A | stdlib | 否 | Uses only json, re, time, os, sys, signal, threading, http.server, socketserver, urllib — no pip packages needed |
安全亮点
✓ Content filter rules are comprehensive and well-structured with L1 (malicious command), L2 (sensitive content), and L3 (LLM review) layers
✓ Credential patterns (sk-, AKIA-, ghp_) are detected via regex in the filter rules
✓ Authorization headers are redacted in log entries (***REDACTED***)
✓ API keys in response previews are masked with regex substitution
✓ Proxy binds only to 127.0.0.1 (not exposed to the internet)
✓ Request body size is limited (10MB) to prevent DoS
✓ Uses only Python standard library — no third-party dependencies to compromise
✓ Response data field removed from logs (blocked responses only log alert metadata, not content)
✓ Thread-safe logging with locks prevents log injection
✓ Config keys prefixed with '_' are ignored during loading