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

Lark Shared Skill 安全审计

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

Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling _notice JSON.

第三方安全检查结论

发现安全风险

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

认证状态回复被要求包含用户标识和授权范围

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

指南要求代理在回答登录状态时引用 userName、openId、tokenStatus 和 scope。openId 是稳定的账户标识,scope 会暴露该应用获得的能力;多数“是否已登录”问题并不需要展示这些字段。

为什么需要注意

如果聊天记录被共享、记录或转发,其他人可能获得账户标识及授权范围信息,用于关联身份或了解账户暴露面。文本没有要求在展示前征得同意或默认遮盖标识。

该规则要求在回答认证状态时引用 userName、稳定账户标识 openId、token 状态和完整 scope。若用户只问“是否已登录”,这些字段可能被不必要地披露到共享聊天、日志或截图中。用户可要求默认只返回 identity、verified 和总体状态,并仅在明确请求诊断详情时显示标识与 scope。

references/lark-shared-identity-and-permissions.md:10来自说明文档打开原文件
| 指定单个 scope 授权 | `lark-cli auth login --scope "<scope>" --no-wait --json` || 检查当前登录态、是谁登录、token 是否有效 | `lark-cli auth status --json --verify`;回答时引用 `identity`、`verified`、`identities.user.status`、`identities.user.userName`、`identities.user.openId`(用户 open id)、`identities.user.tokenStatus`、`identities.user.scope` || 快速查看当前身份状态 | `lark-cli whoami`;实际生效的那一个身份 |
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 1 项风险
低风险

推荐的单一更新命令会同时替换 CLI 和 AI Skills

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

更新说明称 `lark-cli update` 会同时更新可执行工具和 AI Skills,而不是只处理当前提示涉及的组件。Skills 会改变代理后续遵循的操作说明,因此这是比普通通知更广的持久变更。

为什么需要注意

执行后,命令行为和代理指令可能同时改变;若新版本存在不兼容或被污染,影响会扩展到以后所有相关任务。提供的文本没有版本固定、变更预览或回滚步骤。

说明明确规定更新只能使用 `lark-cli update`,且该命令同时更新 CLI 和 AI Skills。因此用户为处理 CLI 更新提示而运行它时,也会持久替换影响代理后续行为的 Skills。它不会被静默自动执行:规则只是建议在当前任务完成后告知用户可运行。用户可在运行前询问是否支持分别更新、版本固定、变更清单及回滚方式。

references/lark-shared-update-notice.md:13来自说明文档打开原文件
当你在输出中看到 `_notice.update` 时,先完成用户当前请求;如仍相关,再简短告知可运行:```bashlark-cli update```**重要**:始终使用 `lark-cli update` 更新,它会同时更新 CLI 和 AI Skills。
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 2 项风险
中风险

“全部权限”快捷方式可授予远超当前任务所需的访问范围

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

指南把 `--domain all` 作为“获取全部权限”的首选命令。虽然另一处推荐按单个 scope 最小授权,但表格仍提供了一条一次请求所有业务域权限的路径。

为什么需要注意

用户批准后,CLI 可能以用户身份获得对日历、文档、云盘等多个个人资源域的访问能力;任何后续误操作或凭证泄露的影响范围都会扩大。

这段代码的正常用途

`--domain all` 只对应用户明确提出“获取全部权限”的意图,并非所有认证任务的默认命令。同一表格提供按业务域和单一 scope 授权,后文还明确推荐单一缺失 scope 以符合最小权限原则。因此所引命令本身权限很广,但现有上下文没有要求代理在普通任务中优先请求全部权限。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
references/lark-shared-identity-and-permissions.md:7来自说明文档打开原文件
|---|---|| 获取全部权限 | `lark-cli auth login --domain all --no-wait --json` || 按业务域授权 | `lark-cli auth login --domain docs --domain drive --no-wait --json`;`--domain` 可重复,也可用逗号分隔 || 指定单个 scope 授权 | `lark-cli auth login --scope "<scope>" --no-wait --json` || 检查当前登录态、是谁登录、token 是否有效 | `lark-cli auth status --json --verify`;回答时引用 `identity`、`verified`、`identities.user.status`、`identities.user.userName`、`identities.user.openId`(用户 open id)、`identities.user.tokenStatus`、`identities.user.scope` |
查看另外 3 个位置
references/lark-shared-identity-and-permissions.md:29来自说明文档打开原文件
|------|------|---------|---------|| user 用户身份 | `--as user` | `lark-cli auth login` 等 | 访问用户自己的资源(日历、云空间/云盘/云存储等) || bot 应用身份 | `--as bot` | 自动,只需 appId + appSecret | 应用级操作,访问bot自己的资源 |
references/lark-shared-identity-and-permissions.md:61来自说明文档打开原文件
```bashlark-cli auth login --domain <domain> --no-wait --json          # 按业务域发起授权lark-cli auth login --scope "<missing_scope>" --no-wait --json  # 按具体 scope 发起授权(推荐,符合最小权限原则)```**规则**:auth login 必须指定范围(`--scope`、`--domain` 或 `--recommend`)。多次 login 的 scope 会累积(增量授权)。
references/lark-shared-identity-and-permissions.md:60来自说明文档打开原文件
```bashlark-cli auth login --domain <domain> --no-wait --json          # 按业务域发起授权lark-cli auth login --scope "<missing_scope>" --no-wait --json  # 按具体 scope 发起授权(推荐,符合最小权限原则)```
中风险

授权链接和二维码进入聊天后可能被非预期人员使用

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

指南强制把 verification URL 和二维码显示在聊天中,并在后续轮次用对应 device_code 完成登录。此类短期授权材料如果出现在共享会话、录屏或可见通知中,非预期人员可能先完成授权。

为什么需要注意

CLI 最终可能绑定到错误的飞书账户,随后代理会在错误身份下读取或操作资源。指南要求生成新链接而不复用过期代码,但没有要求在完成后核验账户身份。

该流程要求把 verification_url 及其二维码显示在聊天中,随后由代理使用与该流程对应的 device_code 完成登录。若会话、通知或屏幕可被他人看到,对方可能先打开链接并完成授权,导致代理最终登录到非预期账户。材料说明不得跨流程复用,但没有说明共享会话中的暴露防护。用户可要求仅在私密界面展示、说明有效期,并在完成后核验登录账户。

SKILL.md:20来自说明文档打开原文件
3. **授权 / 配置类 URL 必须配二维码**:当命令输出 `verification_url`、`verification_uri_complete`、`console_url` 等 URL 字段时,必须用 `lark-cli auth qrcode` 生成并在回复中展示,URL 在前二维码在后;优先生成 PNG(`--output`),仅当用户明确要求时才使用 ASCII(`--ascii`)。URL 原样转发——不编解码、不加标点、不重拼 query,二维码和链接请一起展示给用户。
查看另外 4 个位置
references/lark-shared-identity-and-permissions.md:88来自说明文档打开原文件
1. 执行 `lark-cli auth login --scope "xxx" --no-wait --json`(必须加 `--no-wait --json`)2. 从 JSON 输出中提取 `verification_url` 和 `device_code`3. 生成二维码:`lark-cli auth qrcode <verification_url> --output "xxx"`4. 将 URL 和二维码展示给用户(先 URL,后二维码)5. **结束本轮对话前,必须明确告知用户**:"请完成授权后,回来告诉我已授权完成,我会帮你完成后续步骤"
references/lark-shared-identity-and-permissions.md:96来自说明文档打开原文件
1. 等待用户回复"已完成授权"2. **由你(AI agent)亲自执行**:`lark-cli auth login --device-code <device_code>`3. 此命令会轮询授权状态并完成登录4. 如果返回授权成功,流程结束
references/lark-shared-identity-and-permissions.md:94来自说明文档打开原文件
**第二步:完成授权(后续轮)**1. 等待用户回复"已完成授权"2. **由你(AI agent)亲自执行**:`lark-cli auth login --device-code <device_code>`3. 此命令会轮询授权状态并完成登录4. 如果返回授权成功,流程结束
references/lark-shared-identity-and-permissions.md:103来自说明文档打开原文件
- **你必须亲自执行 `--device-code` 命令**,不要指示用户自行执行- **不要在同一轮中展示 URL 后立刻执行 `--device-code`**,这会导致用户看不到 URL- **禁止跨流程缓存 `verification_url` 或 `device_code`**:每次需要重新发起授权时,必须沿用所需的 `--scope`、`--domain` 或 `--recommend` 选择以及任何 `--exclude` 值,并附加 `--no-wait --json` 生成新的链接。不要复用已过期的授权链接或 device code
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

3 个说明模块

该 Skill 是 lark-cli 的认证与安全操作指南;它要求先确认 user/bot 身份,因为用户身份能访问个人资源,而 bot 只能访问应用自己的资源。

查看原文
SKILL.md:18来自说明文档打开原文件
2. **身份决定你代表谁操作**:`--as user` 代表用户本人(能看到、也能操作其日历、云空间/云盘/云存储等个人资源),`--as bot` 代表应用自己,应用级操作,只能访问bot自己的资源,bot 查用户资源会返回空成功而非报错。动手前先搞清楚身份`identity`。身份模型和权限管理 → [`lark-shared-identity-and-permissions.md`](references/lark-shared-identity-and-permissions.md)。
references/lark-shared-identity-and-permissions.md:41来自说明文档打开原文件
## 身份延续- CLI命令执行时,身份选择优先级为:显式 `--as` 优先;省略时由 CLI 根据当前配置和可用凭证自动选择(可通过 `lark-cli whoami` 查看 `identity` 和选择逻辑)。- 因此,盲目省略 `--as` 是不可控的,在明确需要保持某一身份时,建议全程显式选择。

高风险写操作有显式确认门禁:CLI 返回 exit 10 后,代理必须展示操作和参数并等待用户同意,不能自动追加确认参数;支持时还应先 dry-run。

查看原文
SKILL.md:29来自说明文档打开原文件
2. **写入/删除操作前必须确认用户意图**。3. 目标命令支持 `--dry-run` 时,用 `--dry-run` 预览危险请求。4. **退出码 10 是高风险确认门禁(`risk: "high-risk-write"`),不是错误**:停下 → **向用户确认**(展示 `action`、`risk` 和关键参数)→ 取得**用户显式同意**后,将 `hint` 指出的确认 flag **追加到你原始 argv 的末尾**后重试;**绝不**静默加确认 flag 绕过 → [`lark-shared-high-risk-approval.md`](references/lark-shared-high-risk-approval.md)。
references/lark-shared-high-risk-approval.md:27来自说明文档打开原文件
**绝对不允许**:- 看到 exit 10 就默认加确认 flag 静默重试(这等于禁用门禁)- 把 `confirmation_required` 当网络错误/权限错误处理- 在用户没明确同意的前提下追加确认 flag 重试- 用 `sh -c` 等 shell 方式拼接命令重试——用参数数组(argv)形式传参,避免 shell 解析把用户参数当作语法

认证采用分步设备授权:代理先产生授权链接和二维码,用户完成浏览器授权后,代理再用 device_code 完成登录。

查看原文
references/lark-shared-identity-and-permissions.md:88来自说明文档打开原文件
1. 执行 `lark-cli auth login --scope "xxx" --no-wait --json`(必须加 `--no-wait --json`)2. 从 JSON 输出中提取 `verification_url` 和 `device_code`3. 生成二维码:`lark-cli auth qrcode <verification_url> --output "xxx"`4. 将 URL 和二维码展示给用户(先 URL,后二维码)5. **结束本轮对话前,必须明确告知用户**:"请完成授权后,回来告诉我已授权完成,我会帮你完成后续步骤"
references/lark-shared-identity-and-permissions.md:94来自说明文档打开原文件
**第二步:完成授权(后续轮)**1. 等待用户回复"已完成授权"2. **由你(AI agent)亲自执行**:`lark-cli auth login --device-code <device_code>`3. 此命令会轮询授权状态并完成登录4. 如果返回授权成功,流程结束
从这里开始 · 工作说明SKILL.md
lark-shared
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。

文件引用关系图

5 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录7 个文件

检查范围与遗漏

逐文件查看涉及的内容

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

  • SKILL.md已纳入全文
  • references/lark-shared-config-init.md已纳入全文
  • references/lark-shared-high-risk-approval.md已纳入全文
  • references/lark-shared-identity-and-permissions.md已纳入全文
  • references/lark-shared-output-contract.md已纳入全文
  • references/lark-shared-update-notice.md已纳入全文
  • references/lark-wiki-token-routing.md已纳入全文

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

  • SKILL.md工作说明
  • references/lark-shared-config-init.md配套文件
  • references/lark-shared-high-risk-approval.md配套文件
  • references/lark-shared-identity-and-permissions.md配套文件
  • references/lark-shared-output-contract.md配套文件
  • references/lark-shared-update-notice.md配套文件
  • references/lark-wiki-token-routing.md配套文件

代码和说明中提到的操作

运行命令
references/lark-shared-config-init.md:9来自说明文档打开原文件
```bash# 发起配置(该命令会阻塞直到用户打开链接并完成操作或过期)
references/lark-shared-identity-and-permissions.md:19来自说明文档打开原文件
```bashLARKSUITE_CLI_NO_UPDATE_NOTIFIER=1 LARKSUITE_CLI_NO_SKILLS_NOTIFIER=1 lark-cli auth status --json --verify
references/lark-shared-identity-and-permissions.md:60来自说明文档打开原文件
```bashlark-cli auth login --domain <domain> --no-wait --json          # 按业务域发起授权
连接外部网站
references/lark-wiki-token-routing.md:10来自说明文档打开原文件
```bashlark-cli drive +inspect --url 'https://xxx.feishu.cn/wiki/<wiki_token>'```
读取了多少行
292
文件校验值(用于核对版本)
6d901ee75c9516b6a44dac6db22062b421d0e166ffe0568756d0a88102660683