Skip to content
Report library
Purpose / Other

Lark Okr Skill Security Audit

What the author says it does (original text)

飞书 OKR:管理目标与关键结果。查看和编辑 OKR 周期、目标、关键结果、对齐关系、量化指标和进展记录。当用户需要查看或创建 OKR、管理目标和关键结果、查看对齐关系时使用。不负责:待办任务管理(lark-task)、日程/会议安排(lark-calendar)、绩效评估

Independent security check

Security risks found

Files checked
26
Risks found
4
Could it run dangerous commands?Looks for programs run straight after downloading, remote control of your computer, and hidden commands.No risks found
Could it expose your files or keys?Looks for uploads of files containing passwords or keys, and keys written directly in the code.Risks found: 1
Medium risk

Some irreversible deletions are not gated by explicit user confirmation

Source references: 5
What we found

Progress and alignment deletions are described as irreversible, but their execution commands and workflows require neither --yes nor prior user confirmation. The same Skill applies an explicit confirmation protocol to comment deletion.

Why this matters

A mistaken ID, cycle, or objective could permanently remove a progress record or delete an alignment, damaging OKR history or organizational relationship displays.

Progress and alignment deletion are explicitly irreversible, yet their execution examples and workflows require neither user confirmation nor a confirmation flag. Comment deletion, by contrast, requires a dry run, an irreversibility warning, user confirmation, and --yes. If an agent directly acts on a general deletion request, a progress record or alignment could be permanently lost. Users can require the same explicit confirmation gate used for comment deletion.

references/lark-okr-progress-delete.md:5In the instructions
根据 ID 删除一条 OKR 进展记录。此操作为高风险操作,删除后不可恢复。
Show 4 other places
references/lark-okr-progress-delete.md:27In the instructions
1. 使用 `+progress-get` 确认要删除的进展记录 ID 和内容。2. 执行 `lark-cli okr +progress-delete --progress-id "1234567890123456789"`。3. 报告结果:已删除的进展记录 ID。> **注意**:此操作不可恢复,建议在删除前先用 `+progress-get` 确认记录内容。
references/lark-okr-alignments.md:121In the instructions
```bashlark-cli okr alignments delete --alignment-id "<对齐关系ID>"```
references/lark-okr-alignments.md:139In the instructions
### 注意事项- 删除操作不可逆,请谨慎操作- 需要对关联的目标有编辑权限
references/lark-okr-comment-delete.md:30In the instructions
1. 使用 [+comment-list](lark-okr-comment-list.md)、[+comment-detail](lark-okr-comment-detail.md) 或 [+comment-get](lark-okr-comment-get.md) 定位并确认 comment-id。2. 判断是否真的需要删除:解决评论使用 [+comment-solve](lark-okr-comment-solve-reopen.md),删除只用于永久移除内容。3. 先执行带 --dry-run 的命令检查 URL 和 comment-id。4. 向用户明确说明删除不可恢复;得到确认后,在原始命令末尾追加 --yes 执行。5. 根据 deleted=true 和返回的 comment_id 确认结果。
Could it delete files or keep running?Looks for broad file deletion, disk overwrites, and programs set to start automatically.No risks found
Could it bypass safety checks?Looks for skipped website security checks, excessive file access, or actions that skip your approval.Risks found: 1
Medium risk

Bot identity can bypass the requesting user’s visibility when reading others’ OKRs

Source references: 3
What we found

The instructions permit --as bot to view another person’s OKRs and require only that the bot have permission. They do not require confirming that the requester is personally entitled to see the data; application permissions may be broader than individual permissions.

Why this matters

If the agent switches to bot identity when user identity lacks access, a coworker’s objectives, scores, notes, progress, or comments could be disclosed to an unauthorized requester.

What this evidence establishes

The main document allows bot identity to view another person's OKRs, whose app-level access may differ from the current user's access. However, it requires corresponding permission and mandates reading shared authentication and permission rules that were not provided. The evidence therefore cannot show whether requester authorization is checked. A user can ask how bot mode verifies that the requester may view the target's OKRs and restrict operations to user identity by default.

This assessment concerns the code and conditions shown, not proof that harm has occurred.
SKILL.md:15In the instructions
**身份**:OKR 操作默认使用 `--as user`(查看当前用户/上下级的 OKR 时)。也支持 `--as bot` 查看他人 OKR(需相应权限)。
Show 2 other places
references/lark-okr-entities.md:384In the instructions
所有 OKR API 均支持 `user` 和 `tenant`(应用)两种 access token 类型。
SKILL.md:13In the instructions
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理**
Could it mislead the AI or hide text?Checks the skill instructions for requests to ignore you, influence the report, or hide text in invisible characters.No risks found
Could it change links or payment recipients without asking?Looks for forced referral or payment changes combined with instructions to hide the change.Risks found: 2
Medium risk

The Skill may choose and write an Objective category without user confirmation

Source references: 2
What we found

When creation fails and the agent merely suspects mandatory categorization, it is instructed to select a semantically suitable enabled category without waiting for the user. Categories can carry business meanings such as personal, team, or committed OKRs.

Why this matters

An objective could be placed in the wrong personal, team, or management category, affecting organizational views, reporting interpretation, and later decisions.

The instruction lets the agent choose a semantically suitable category merely on suspicion that the tenant requires one, explicitly without waiting for confirmation. Categories can convey business meanings such as personal, team, or committed OKRs, so a wrong choice may alter how a goal is interpreted or displayed. Users can require the skill to show candidate category names and obtain confirmation before writing, or restrict it to user-specified categories.

SKILL.md:32In the instructions
分类只在用户明确要求分类,或创建 Objective 返回 `invalid parameters` 且怀疑租户强制开启分类时处理:用 `lark-cli okr categories list --params '{"owner_type":"user","page_size":100}' --as user` 查可用分类,选择语义合适且`enabled=true` 的分类 ID;分类可后续调整,不必停下等待用户确认。
Show 1 other places
references/lark-okr-entities.md:332In the instructions
## Category (分类)分类用于对目标进行分组标记(如"个人 OKR"、"团队 OKR"、"承诺 OKR")等。具体的分类根据租户设置而定。
Low risk

New progress records default to tool branding and an official app link as their source

Source references: 2
What we found

When source parameters are omitted, the record defaults to “created by lark-cli” and an automatically selected Feishu or Lark app URL. These fields are described as the progress source shown in the OKR interface.

Why this matters

Readers may mistake the automatically inserted tool link for the actual business source of the progress information, weakening provenance and trust.

When the user omits source fields, progress creation defaults to “created by lark-cli” and a Feishu/Lark official app URL, while the documentation says these fields are displayed as the progress source. This is not credential or data exfiltration, but it may misleadingly present an official app page as the information source and expose tool usage. Users can ask that source fields remain empty by default or be shown for confirmation before writing.

references/lark-okr-progress-create.md:42In the instructions
| `--progress-status`  | 否  | —                     | 进度状态:`normal`(正常) \| `overdue`(逾期) \| `done`(已完成)。仅在指定 `--progress-percent` 时生效。                                                     || `--source-title`     | 否  | `created by lark-cli` | 来源标题,用于在 OKR 界面中显示进展来源                                                                                                               || `--source-url`       | 否  | 根据品牌自动生成              | 来源 URL,用于在 OKR 界面中显示进展来源链接,通常可以填写 OKR 编写信息来源的文档链接等。飞书品牌默认为 `https://open.feishu.cn/app`, Lark 品牌默认为 `https://open.larksuite.com/app` || `--user-id-type`     | 否  | `open_id`             | 用户 ID 类型:`open_id` \| `union_id` \| `user_id`                                                                                        |
Show 1 other places
references/lark-okr-entities.md:173In the instructions
| `progress_rate` | `ProgressRate` | 否  | 进度率,可设置 `percent` 和 `status`                            || `source_title`  | `string`       | 否  | 来源标题,用于在 OKR 界面中显示进展来源                                  || `source_url`    | `string`       | 否  | 来源 URL,用于在 OKR 界面中显示进展来源链接                              |

Inside this skill

5 instruction sections

This Skill uses lark-cli to read and modify Lark OKRs, including objectives, key results, indicators, progress, comments, weights, and alignments. Its actual authentication and permission rules depend on a separate shared Skill not included in the evidence.

View source
SKILL.md:7In the instructions
  requires:    bins: [ "lark-cli" ]  cliHelp: "lark-cli okr --help"---
SKILL.md:13In the instructions
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理****身份**:OKR 操作默认使用 `--as user`(查看当前用户/上下级的 OKR 时)。也支持 `--as bot` 查看他人 OKR(需相应权限)。

Most write operations offer --dry-run previews. Permanent comment deletion additionally requires checking the target, warning that recovery is impossible, and obtaining confirmation.

View source
references/lark-okr-comment-delete.md:30In the instructions
1. 使用 [+comment-list](lark-okr-comment-list.md)、[+comment-detail](lark-okr-comment-detail.md) 或 [+comment-get](lark-okr-comment-get.md) 定位并确认 comment-id。2. 判断是否真的需要删除:解决评论使用 [+comment-solve](lark-okr-comment-solve-reopen.md),删除只用于永久移除内容。3. 先执行带 --dry-run 的命令检查 URL 和 comment-id。4. 向用户明确说明删除不可恢复;得到确认后,在原始命令末尾追加 --yes 执行。5. 根据 deleted=true 和返回的 comment_id 确认结果。

The cycle-wide comment aggregation reads every objective, key result, progress record, and comment across four object types, with automatic pagination; large cycles may generate many read requests.

View source
references/lark-okr-comment-detail.md:30In the instructions
1. 使用 +cycle-list 获取周期 ID;如果用户已经提供周期 ID,直接使用。2. 执行 +comment-detail --cycle-id "..."。shortcut 会依次获取周期下的 Objective、每个 Objective 下的 KeyResult、每个 Objective/KeyResult 下的 Progress,以及四类对象的评论。3. 评论接口自动处理分页;对象读取和评论读取使用有界并发。任一底层请求失败时整体返回错误,不返回静默不完整结果。4. 评论串按首条评论的 create_time 升序排列,串内评论也按 create_time 升序排列。
references/lark-okr-comment-detail.md:69In the instructions
- 这是聚合查询,接口调用次数取决于周期下的 Objective、KeyResult 和 Progress 数量。- +comment-detail 不接受 department-id-type,该接口参数由 shortcut 忽略。- 该命令只读取评论,不会修改、解决或删除评论。

Local image uploads are limited to relative paths within the current working directory, and symlinks cannot be used to reach files outside it.

View source
references/lark-okr-image-upload.md:104In the instructions
## 安全限制- `--file` 参数**必须使用相对路径**(如 `./photo.png` 或 `images/photo.png`),不支持绝对路径- 图片文件必须存在于当前工作目录或其子目录中- 不支持符号链接指向目录外的文件
Start here · InstructionsSKILL.md
lark-okr
Lines connect the instruction file to its sections, not an observed execution order. Select a section to read the source.

File reference map

References: 40
Files making referencesReferenced content
Lines show actual file references, not execution order. Select a node to highlight its connections and inspect the files and source locations. Dashed lines include files that still need locating.
Files and check records26 files

Coverage and gaps

Content covered in each file

These are the source ranges included in this check, not a guarantee that every issue has been resolved.

  • SKILL.mdFull text included
  • references/lark-okr-alignments.mdFull text included
  • references/lark-okr-batch-create.mdFull text included
  • references/lark-okr-comment-create.mdFull text included
  • references/lark-okr-comment-delete.mdFull text included
  • references/lark-okr-comment-detail.mdFull text included
  • references/lark-okr-comment-get.mdFull text included
  • references/lark-okr-comment-list.mdFull text included
  • references/lark-okr-comment-patch.mdFull text included
  • references/lark-okr-comment-solve-reopen.mdFull text included
  • references/lark-okr-contentblock.mdFull text included
  • references/lark-okr-create.mdFull text included
  • references/lark-okr-cycle-detail.mdFull text included
  • references/lark-okr-cycle-list.mdFull text included
  • references/lark-okr-entities.mdFull text included
  • references/lark-okr-image-upload.mdFull text included
  • references/lark-okr-indicator-update.mdFull text included
  • references/lark-okr-indicators.mdFull text included
  • references/lark-okr-patch.mdFull text included
  • references/lark-okr-progress-create.mdFull text included
  • references/lark-okr-progress-delete.mdFull text included
  • references/lark-okr-progress-get.mdFull text included
  • references/lark-okr-progress-list.mdFull text included
  • references/lark-okr-progress-update.mdFull text included
  • references/lark-okr-reorder.mdFull text included
  • references/lark-okr-weight.mdFull text included

This report is for the version above. We read the available code and instructions without running the skill or checking extra packages it installs. This is not a promise of safety: a different version or setup may behave differently.

  • SKILL.mdInstructions
  • references/lark-okr-alignments.mdSupporting file
  • references/lark-okr-batch-create.mdSupporting file
  • references/lark-okr-comment-create.mdSupporting file
  • references/lark-okr-comment-delete.mdSupporting file
  • references/lark-okr-comment-detail.mdSupporting file
  • references/lark-okr-comment-get.mdSupporting file
  • references/lark-okr-comment-list.mdSupporting file
  • references/lark-okr-comment-patch.mdSupporting file
  • references/lark-okr-comment-solve-reopen.mdSupporting file
  • references/lark-okr-contentblock.mdSupporting file
  • references/lark-okr-create.mdSupporting file
  • references/lark-okr-cycle-detail.mdSupporting file
  • references/lark-okr-cycle-list.mdSupporting file
  • references/lark-okr-entities.mdSupporting file
  • references/lark-okr-image-upload.mdSupporting file
  • references/lark-okr-indicator-update.mdSupporting file
  • references/lark-okr-indicators.mdSupporting file
  • references/lark-okr-patch.mdSupporting file
  • references/lark-okr-progress-create.mdSupporting file
  • references/lark-okr-progress-delete.mdSupporting file
  • references/lark-okr-progress-get.mdSupporting file
  • references/lark-okr-progress-list.mdSupporting file
  • references/lark-okr-progress-update.mdSupporting file
  • references/lark-okr-reorder.mdSupporting file
  • references/lark-okr-weight.mdSupporting file

Operations mentioned in code and instructions

Run commands
SKILL.md:36In the instructions
```bashlark-cli contact +search-user --query "张三" --has-chatted --as user
SKILL.md:42In the instructions
```bash# 查用户周期,再用周期 ID 查详情
references/lark-okr-alignments.md:21In the instructions
```bashlark-cli okr objective.alignments list --objective-id "<目标ID>" [flags]
Connect to websites
references/lark-okr-contentblock.md:52In the instructions
                "link": {                  "url": "https://example.com"                }
references/lark-okr-contentblock.md:60In the instructions
            "docs_link": {              "url": "https://larkoffice.com/docx/xxx",              "title": "Lark Document"
references/lark-okr-contentblock.md:79In the instructions
            "file_token": "file_xxx",            "src": "https://...",            "width": 800,
Lines read
3,373
File checksum (to compare versions)
f8fb41258f0b00f80cd4fa98fcdba934664a4949cf3a42160e0edc4e9e6e7c46