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

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

认证链接会同时暴露在命令参数、回复和生成的 PNG 文件中

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

Skill 要求把 verification URL 作为 `lark-cli auth qrcode` 的命令行参数、生成相对路径 PNG,并同时向用户展示原始链接和二维码。

为什么需要注意

认证链接会出现在 Agent 输出和工作区文件中,也可能被本机进程参数记录机制看到。若这些位置被共享,在该认证流程仍有效时,其他人可能取得同一链接。

源码确实要求把验证 URL 放入二维码命令参数、写成 PNG,并把链接和二维码发到对话中。若进程参数、聊天记录或输出文件可被其他本机用户、日志系统或共享工作区读取,临时认证信息可能泄露;源码没有说明这些位置是否受保护,也没有要求清理 PNG。用户可要求作者说明链接有效期、文件位置与清理策略,并把输出限制在私有目录和私密会话。

SKILL.md:20来自说明文档
3. **授权 / 配置类 URL 必须配二维码**:当命令输出 `verification_url`、`verification_uri_complete`、`console_url` 等 URL 字段时,必须用 `lark-cli auth qrcode` 生成并在回复中展示,URL 在前二维码在后;优先生成 PNG(`--output`),仅当用户明确要求时才使用 ASCII(`--ascii`)。URL 原样转发——不编解码、不加标点、不重拼 query,二维码和链接请一起展示给用户。
查看另外 2 个位置
SKILL.md:35来自说明文档
5. **文件路径只接受相对路径**:`--file`、`--output`、`--output-dir`、`@file` 等路径参数只接受 cwd 下的相对路径,传绝对路径会报 `unsafe file path`。数据输入(`@file`、大 JSON)优先用 stdin 传入,避免路径和转义问题。
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. **结束本轮对话前,必须明确告知用户**:"请完成授权后,回来告诉我已授权完成,我会帮你完成后续步骤"
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
中风险

“全部权限”和增量授权可能给 Agent 留下广泛、持续的用户权限

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

Skill 提供 `--domain all`,而 user 身份可访问个人日历、文档、邮箱和云盘。它还说明多次登录的 scope 会累积,CLI 不能单独撤销某个已授予 scope。

为什么需要注意

如果用户选择全部权限或多次授权不同范围,之后的 lark-cli 操作可能继续拥有超出当前任务所需的账户访问能力;本机 logout 也不会撤销服务端授权。

该风险有源码支持,但只有在用户或 Agent 选择 `--domain all` 或反复增量授权时发生。User 身份可访问用户个人资源,多次登录的 scope 会累积,且 CLI 不能单独撤销某个 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` |
查看另外 4 个位置
references/lark-shared-identity-and-permissions.md:14来自说明文档
| bot 缺少权限 | 不要执行 `auth login`;引导用户在开发者后台开通 bot scope,优先复用错误里的 `console_url` || 取消用户对应用的全部服务端授权 | `auth logout` 只清本机登录态;服务端授权需用户在飞书授权管理页取消 || 只取消一个 scope | CLI 不支持单独撤销一个已授予 scope;可重新走最小 scope 授权,或让用户在授权管理页处理 |
references/lark-shared-identity-and-permissions.md:36来自说明文档
- **Bot 看不到用户资源**:无法访问用户的日历、云空间(云盘/云存储)文档、邮箱等个人资源。例如 `--as bot` 查日程返回 bot 自己的(空)日历- **Bot 无法代表用户操作**:发消息以应用名义发送,创建文档归属 bot- **Bot 权限**:只需在飞书开发者后台开通 scope,无需 `auth login`- **User 权限**:后台开通 scope + 用户通过 `auth login` 授权,两层都要满足
references/lark-shared-identity-and-permissions.md:65来自说明文档
**规则**:auth login 必须指定范围(`--scope`、`--domain` 或 `--recommend`)。多次 login 的 scope 会累积(增量授权)。
references/lark-shared-identity-and-permissions.md:29来自说明文档
|------|------|---------|---------|| user 用户身份 | `--as user` | `lark-cli auth login` 等 | 访问用户自己的资源(日历、云空间/云盘/云存储等) || bot 应用身份 | `--as bot` | 自动,只需 appId + appSecret | 应用级操作,访问bot自己的资源 |
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

3 个说明模块

该 Skill 是 lark-cli 的认证、身份、权限和输出处理规则集;它要求在操作前区分 user 与 bot,因为 user 身份可访问用户的日历和云盘等个人资源,而 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:36来自说明文档
- **Bot 看不到用户资源**:无法访问用户的日历、云空间(云盘/云存储)文档、邮箱等个人资源。例如 `--as bot` 查日程返回 bot 自己的(空)日历- **Bot 无法代表用户操作**:发消息以应用名义发送,创建文档归属 bot- **Bot 权限**:只需在飞书开发者后台开通 scope,无需 `auth login`- **User 权限**:后台开通 scope + 用户通过 `auth login` 授权,两层都要满足

写入或删除操作须先确认用户意图;CLI 的高风险门禁要求再次展示动作、风险和关键参数,只有用户明确同意后才能追加确认参数。

查看原文
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:22来自说明文档
1. **识别**:看到子进程 exit code = `10` 且 stderr JSON 里 `error.type == "confirmation"`、`error.subtype == "confirmation_required"`2. **向用户确认**:把 `error.action`、`error.risk` 和关键参数展示给用户,明确告知"这是高风险操作",等待用户显式同意3. **用户同意** → 按 `error.hint` 确定确认 flag,并追加到你**自己的原始 argv** 后重试。多数命令使用 `--yes`4. **用户拒绝** → 终止流程,不要擅自改写参数或跳过门禁

认证采用分步流程:先产生验证链接和二维码并交还控制权,用户确认完成授权后,Agent 才使用对应 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. **结束本轮对话前,必须明确告知用户**:"请完成授权后,回来告诉我已授权完成,我会帮你完成后续步骤"**第二步:完成授权(后续轮)**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
文件校验值(用于核对版本)
26e9f1f38340a94637f2d54f24b1bac806ce285426be9342df12e1a37d53db43