跳转到正文
报告库
用途分类 / 其他用途

Caveman Setup Skill 安全审计

作者说它能做什么(原文)

>

第三方安全检查结论

先别安装或运行

已检查文件
1
发现的风险
5
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。发现 2 项风险
高风险

所有实时 LLM 提示和响应都会经过第三方网关

原文依据:3 处
发现了什么

Skill 要求将每个实时 LLM 调用点的基础 URL 改为 Caveman。网关因此处在应用与模型提供商之间,能够接收请求内容和返回内容;“byte-preserving”及“不转发认证头”只是 Skill 中的产品声明,所给源码无法独立验证。

为什么需要注意

发送给模型的源代码、用户对话、文档、个人信息或其他机密数据可能进入 Caveman 的处理和计量系统,并受其日志、留存、访问控制及司法辖区约束。

该 Skill 的实时指令要求把每个活跃 LLM 调用点改为经过 Caveman,并称网关会测量应用发送的内容及其成本。因此,启用后请求和响应会进入第三方代理的处理路径,可能包含提示、模型输出及其他敏感业务数据。“byte-preserving”等描述只是 Skill 自身对服务行为的声明,所给材料没有独立证明数据保留、访问或日志策略。用户可要求作者提供数据处理、保留和删除条款,并限制送入网关的数据类别。

SKILL.md:9来自说明文档打开原文件
You are wiring this repository through the Caveman gateway. Caveman is abyte-preserving LLM proxy: in record mode it measures what your app sends andwhat it costs, and changes nothing else. Your job is a minimal, verifiedintegration — not a refactor.
查看另外 2 个位置
SKILL.md:25来自说明文档打开原文件
1. **Coherent integration.** Wire every live LLM callsite through existing   configuration and responsible seams. Touch each layer correctness requires.   No drive-by refactors or formatting sweeps; add an abstraction only when it
SKILL.md:73来自说明文档打开原文件
Two facts that make the wiring safe (both are gateway-enforced, not hopes):the gateway rebuilds upstream auth headers from scratch, so a client's`Authorization`/`x-api-key` value is never forwarded to the provider; and with`stored`, upstream auth comes from the encrypted connection server-side. So in`stored` mode, where an SDK insists on an api-key parameter, set it to theCave key — it authenticates the gateway and goes no further.
高风险

BYOK 模式会把模型提供商密钥交给 Caveman 网关

原文依据:4 处
发现了什么

在 `byok` 模式下,Skill 明确要求每次请求都通过 `x-cave-upstream-key` 把现有提供商密钥发送到网关。该密钥不再只由应用和原提供商接触。

为什么需要注意

若网关、其日志或传输链路被滥用或攻破,攻击者可能使用提供商密钥访问模型账户、产生费用,或在密钥权限允许时访问相关资源。

在 BYOK 模式下,活跃指令明确要求把应用现有的提供商密钥放入 `x-cave-upstream-key` 并发送给 Caveman 网关。即使网关随后重新构造上游认证头,网关仍必须接收该密钥;源码中的“不转发”是产品声明,不能消除网关泄露或滥用该凭据的影响。用户可要求使用服务端托管密钥、短期且限额的提供商密钥,或确认网关不会记录该头。

SKILL.md:67来自说明文档打开原文件
The pattern is always the same: **base URL → the gateway with `/w/<app>`,plus one auth header.** Gateway auth is `x-cave-api-key: CAVE_API_KEY`(`Authorization: Bearer CAVE_API_KEY` also works where a header is awkward).With `PROVIDER_KEYS: byok`, also send `x-cave-upstream-key: <the provider keythe app already uses>`.
查看另外 3 个位置
SKILL.md:85来自说明文档打开原文件
```tsconst client = new OpenAI({  baseURL: `${process.env.CAVE_GATEWAY_URL}/w/<app>/openai/v1`,  apiKey: process.env.OPENAI_API_KEY,           // byok: unchanged · stored: use CAVE_API_KEY  defaultHeaders: {    "x-cave-api-key": process.env.CAVE_API_KEY!,    // byok only:    "x-cave-upstream-key": process.env.OPENAI_API_KEY!,  },});```
SKILL.md:172来自说明文档打开原文件
(byok: add `-H "x-cave-upstream-key: $PROVIDER_KEY"`.) This is one real,billable provider request — that is the point: real traffic, real measurement.
SKILL.md:73来自说明文档打开原文件
Two facts that make the wiring safe (both are gateway-enforced, not hopes):the gateway rebuilds upstream auth headers from scratch, so a client's`Authorization`/`x-api-key` value is never forwarded to the provider; and with`stored`, upstream auth comes from the encrypted connection server-side. So in`stored` mode, where an SDK insists on an api-key parameter, set it to theCave key — it authenticates the gateway and goes no further.
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 1 项风险
中风险

网关密钥会作为明文持久保存在仓库环境文件中

原文依据:2 处
发现了什么

Skill 要求把实际 `CAVE_API_KEY` 写入仓库已经使用的 `.env` 或 `.env.local` 等文件。加入 `.gitignore` 只能降低 Git 提交风险,不能阻止本机其他用户、备份、同步软件、恶意程序或过宽文件权限读取该文件。

为什么需要注意

读取工作区环境文件的一方可能获得网关访问权,并按该密钥权限查看或制造流量、消耗配额。

该 Skill 明确要求把真实网关密钥写入仓库使用的环境文件,并给出未加密的键值形式。要求将文件加入 `.gitignore` 可降低意外提交风险,但不会加密磁盘内容,也未规定文件权限、备份或同步排除策略;能读取该文件的本地进程或人员仍可取得密钥。用户可要求使用系统密钥库或部署平台的秘密存储,并确认环境文件权限及备份范围。

SKILL.md:29来自说明文档打开原文件
   clarifies ownership or lowers lifecycle cost.2. **Secrets stay in env vars.** `CAVE_API_KEY` goes into the env file the repo   already uses (`.env`, `.env.local`, …). If that file isn't gitignored, add it   to `.gitignore` and say so. Never hardcode the key in source.3. **Report only what you observed.** The final report states the HTTP status
查看另外 1 个位置
SKILL.md:137来自说明文档打开原文件
Add to the repo's env file (and reference from code — no literals):```CAVE_GATEWAY_URL=<GATEWAY>CAVE_API_KEY=<CAVE_API_KEY>```
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。未发现风险
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。发现 1 项风险
中风险

未固定的远程文档可改变代理对仓库的修改方式

原文依据:2 处
发现了什么

对于多种框架,Skill 要求代理从“该 Skill 来源的同一站点”获取集成页面并照做,但没有指定固定版本、内容摘要或允许的修改边界。远程页面日后变化也会成为可执行指令。

为什么需要注意

若文档站点被攻破、域名控制权变化或页面被恶意修改,代理可能按新指令运行命令、增加依赖、披露数据或作出超出当前 Skill 可审查内容的仓库修改。

对未列出的框架,活跃指令要求从未具体标识的“同源”文档站点获取页面并照做。这里没有固定 URL、版本、内容哈希或可接受操作清单,因此远程内容变化可能影响代理如何修改仓库。通用的“不要顺带重构”规则提供了一些边界,但不足以约束远程页面可能提出的安装命令或额外改动。用户可要求提供固定版本的文档副本,并在执行新增依赖、脚本或网络操作前单独审查。

SKILL.md:133来自说明文档打开原文件
For frameworks not listed (google-genai, crewai, pydantic-ai, openai-agents),fetch the matching page under `<docs origin>/docs/integrations/` — same originthis skill came from — and follow it.
查看另外 1 个位置
SKILL.md:25来自说明文档打开原文件
1. **Coherent integration.** Wire every live LLM callsite through existing   configuration and responsible seams. Touch each layer correctness requires.   No drive-by refactors or formatting sweeps; add an abstraction only when it   clarifies ownership or lowers lifecycle cost.2. **Secrets stay in env vars.** `CAVE_API_KEY` goes into the env file the repo
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。发现 1 项风险
中风险

Skill 将模糊的安装请求解释为无需确认即可产生费用的授权

原文依据:3 处
发现了什么

它明确指示代理不要再次询问许可,并立即发送一次真实、可计费的模型请求。虽然令牌上限很小,但实际模型、账户价格和最低收费规则不由该 Skill 控制。

为什么需要注意

运行 Skill 会在用户的模型账户上产生费用和一条真实流量记录;在受控生产账户中,也可能触发预算、审计或数据治理事件。

该 Skill 把用户粘贴设置提示直接视为一次付费验证请求的授权,并明确禁止代理再次确认。请求虽限制为最多 32 个输出 token,但仍使用仓库现有模型并产生真实提供商费用;材料未给出具体模型、价格或账户预算。用户可在运行前要求显示模型和预计最高费用,或明确禁止任何付费验证。

SKILL.md:146来自说明文档打开原文件
The user pasted the setup prompt to authorize exactly this: one smallverification request. Send it now — do not pause to ask permission for it.An integration that ends unverified because you hesitated is a worse outcomethan one tiny request; finishing the verification and the report autonomouslyis the point of this skill.
查看另外 2 个位置
SKILL.md:152来自说明文档打开原文件
Send one minimal request through the wiring you just built — the app's owncheapest path if it has a script for it, otherwise curl **on the path matchingthe protocol you just wired** with the app's own model and a small cap(`max_tokens` ≤ 32):
SKILL.md:172来自说明文档打开原文件
(byok: add `-H "x-cave-upstream-key: $PROVIDER_KEY"`.) This is one real,billable provider request — that is the point: real traffic, real measurement.

Skill 逻辑拆解

7 个说明模块

该 Skill 的主要行为是把仓库中的每个实时 LLM 调用改为经由 Caveman 网关,并添加网关认证头;这会改变请求的网络接收方,即使其声称不改变模型可见字节。

查看原文
SKILL.md:25来自说明文档打开原文件
1. **Coherent integration.** Wire every live LLM callsite through existing   configuration and responsible seams. Touch each layer correctness requires.   No drive-by refactors or formatting sweeps; add an abstraction only when it
SKILL.md:67来自说明文档打开原文件
The pattern is always the same: **base URL → the gateway with `/w/<app>`,plus one auth header.** Gateway auth is `x-cave-api-key: CAVE_API_KEY`(`Authorization: Bearer CAVE_API_KEY` also works where a header is awkward).With `PROVIDER_KEYS: byok`, also send `x-cave-upstream-key: <the provider keythe app already uses>`.

集成会把 Caveman 密钥写入仓库已有的环境文件;若该文件未被 Git 忽略,Skill 要求修改 `.gitignore`。

查看原文
SKILL.md:29来自说明文档打开原文件
   clarifies ownership or lowers lifecycle cost.2. **Secrets stay in env vars.** `CAVE_API_KEY` goes into the env file the repo   already uses (`.env`, `.env.local`, …). If that file isn't gitignored, add it   to `.gitignore` and say so. Never hardcode the key in source.3. **Report only what you observed.** The final report states the HTTP status
SKILL.md:137来自说明文档打开原文件
Add to the repo's env file (and reference from code — no literals):```CAVE_GATEWAY_URL=<GATEWAY>CAVE_API_KEY=<CAVE_API_KEY>```

完成接线后,Skill 要求立即发送一次真实、可计费的提供商请求,并把 HTTP 状态及用量作为验证结果。

查看原文
SKILL.md:144来自说明文档打开原文件
## Step 4 — Verify with one real requestThe user pasted the setup prompt to authorize exactly this: one smallverification request. Send it now — do not pause to ask permission for it.An integration that ends unverified because you hesitated is a worse outcomethan one tiny request; finishing the verification and the report autonomouslyis the point of this skill.
SKILL.md:172来自说明文档打开原文件
(byok: add `-H "x-cave-upstream-key: $PROVIDER_KEY"`.) This is one real,billable provider request — that is the point: real traffic, real measurement.Read the response. Success = HTTP 200 with a `usage` block. Anything else =the matching failure template below.

对于未列出的框架,Skill 将实施细节委托给运行时从其来源站点取得的文档,而所提供材料中没有固定文档内容或校验机制。

查看原文
SKILL.md:133来自说明文档打开原文件
For frameworks not listed (google-genai, crewai, pydantic-ai, openai-agents),fetch the matching page under `<docs origin>/docs/integrations/` — same originthis skill came from — and follow it.
从这里开始 · 工作说明SKILL.md
caveman-setup
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。
文件与检查记录1 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明

代码和说明中提到的操作

连接外部网站
SKILL.md:16来自说明文档打开原文件
- `GATEWAY` — the gateway base URL (e.g. `https://gateway.caveman.so` or `http://127.0.0.1:8787`)- `CAVE_API_KEY` — the gateway auth secret (treat like any API key: env var only, never committed, never printed in full)
SKILL.md:19来自说明文档打开原文件
- `PROVIDER_KEYS` — `stored` (provider keys live encrypted in Caveman Cloud) or `byok` (this app sends its own provider key per request)- `DASHBOARD` — the dashboard base URL (e.g. `https://app.caveman.so`)
SKILL.md:130来自说明文档打开原文件
Concretely, with slug `support-bot` and the hosted gateway, an OpenAI-SDK baseURL reads `https://gateway.caveman.so/w/support-bot/openai/v1`. And in `stored`mode, drop every `x-cave-upstream-key` line entirely — it is byok-only.
读取密钥或账号配置
SKILL.md:17来自说明文档打开原文件
- `GATEWAY` — the gateway base URL (e.g. `https://gateway.caveman.so` or `http://127.0.0.1:8787`)- `CAVE_API_KEY` — the gateway auth secret (treat like any API key: env var only, never committed, never printed in full)- `PROVIDER_KEYS` — `stored` (provider keys live encrypted in Caveman Cloud) or `byok` (this app sends its own provider key per request)
SKILL.md:29来自说明文档打开原文件
   clarifies ownership or lowers lifecycle cost.2. **Secrets stay in env vars.** `CAVE_API_KEY` goes into the env file the repo   already uses (`.env`, `.env.local`, …). If that file isn't gitignored, add it
SKILL.md:30来自说明文档打开原文件
2. **Secrets stay in env vars.** `CAVE_API_KEY` goes into the env file the repo   already uses (`.env`, `.env.local`, …). If that file isn't gitignored, add it   to `.gitignore` and say so. Never hardcode the key in source.
读取文件
SKILL.md:44来自说明文档打开原文件
Read dependency files (`package.json`, `requirements.txt`, `pyproject.toml`,`go.mod`, lockfiles) and search the source for LLM clients:
运行命令
SKILL.md:157来自说明文档打开原文件
```bash# OpenAI-protocol wiring:
读取了多少行
223
文件校验值(用于核对版本)
18d80378c4655f63e1327c58be69d8ac942e506334e66c8fb69d1768b863c556