backlog
核心功能(Plane REST API操作、fix_plan.md管理)是合法工具,但包含两处未声明的高危阴影功能:K3s/Django Shell fallback可在Plane Pod内执行任意Python代码(filesystem:ADMIN + code_execution能力),以及intake.py/bulk_update.py从Windows注册表收割API密钥。
plane_create_entity.py的create_via_k3s_fallback()和plane_update_entity.py的update_via_k3s_fallback()在REST API失败时,通过kubectl exec在Plane API Pod内执行Django shell,执行任意Python代码并对Plane DB执行ORM写操作。SKILL.md仅声明REST API集成,完全未提及K3s fallback能力。该路径等效于在Plane基础设施内部拥有代码执行权限。
scripts/plane_create_entity.py:397 为什么得出这个结论
2/4 个维度触发发现 3 项声明之外的能力或越权行为。
提取到 13 个一般风险产物,需要结合上下文判断。
报告包含 0 步攻击链,另有 3 项高危或严重发现。
依赖结构存在,但暂未看到明显高危告警。
风险分是怎么被拉高的
plane_create_entity.py与plane_update_entity.py包含kubectl exec进入Plane Pod执行Django Shell的fallback路径,SKILL.md完全未声明该能力,等效于filesystem:ADMIN + shell:WRITE + 代码执行权限
intake.py和plane_bulk_update.py使用winreg访问Windows HKCU\Environment中的DGS_PLANE_API_KEY,SKILL.md未声明Windows凭证访问
plane_create_entity.py和plane_update_entity.py的K3s命令可经SSH跳板执行,SSH凭证管理路径未声明
通过base64.b64encode+subprocess执行Pod内Django Shell,脚本内容虽经json.dumps参数化,但base64编码执行路径本身是可疑模式
脚本依赖fix-plan技能的workspace_profile.py,存在跨skill隐式依赖,workspace_profile本身的安全由外部skill保证
intake.py包含C:\Users\DAEGUNSOFT\...硬编码路径,虽为合法默认值但不宜硬编码用户名
最关键的证据
未声明的K3s/Django Shell fallback实现任意Python代码执行
plane_create_entity.py的create_via_k3s_fallback()和plane_update_entity.py的update_via_k3s_fallback()在REST API失败时,通过kubectl exec在Plane API Pod内执行Django shell,执行任意Python代码并对Plane DB执行ORM写操作。SKILL.md仅声明REST API集成,完全未提及K3s fallback能力。该路径等效于在Plane基础设施内部拥有代码执行权限。
scripts/plane_create_entity.py:397 未声明的Windows注册表API密钥访问
intake.py的get_api_key()和plane_bulk_update.py的get_api_key()在环境变量缺失时,尝试从Windows注册表HKCU\Environment读取DGS_PLANE_API_KEY。该行为未经用户授权确认,且未在任何文档中声明。
scripts/intake.py:23 K3s fallback可通过SSH跳板绕过kubeconfig路径
plane_create_entity.py:384-392支持k3s_ssh_host参数,通过SSH连接远程主机后执行kubectl。SSH凭证路径(环境变量或配置文件)未在代码中明确标注,且文档未声明SSH跳板访问能力。
scripts/plane_create_entity.py:384 SKILL.md声明权限与实际能力显著不符
SKILL.md声明allowed-tools仅为Read/Edit/Write/Grep和Bash(gh:*)/Bash(python3:*),但代码实现包含:(1) Plane REST API的完整CRUD操作(网络WRITE);(2) K3s Pod内代码执行(shell WRITE/ADMIN);(3) Windows注册表读(environment READ);(4) 跨skill Python模块导入。
SKILL.md:17 K3s fallback使用base64编码绕过静态分析
plane_create_entity.py通过base64.b64encode(py_script)将Python代码base64编码后注入kubectl命令执行。虽编码有合理用途(传递含特殊字符的Python脚本),但该模式符合代码混淆高危指标特征。
scripts/plane_create_entity.py:403 跨skill隐式依赖workspace_profile模块
plane_client.py、plane_sync.py、plane_bulk_update.py依赖来自fix-plan技能的workspace_profile.py模块。backlog skill声明depends-on fix-plan,但实际依赖比声明更深(跨目录sys.path插入),且workspace_profile本身可能包含额外的K8s/SSH凭证访问逻辑。
scripts/plane_client.py:89 硬编码Windows用户路径
intake.py的DEFAULT_FIX_PLAN硬编码了C:\Users\DAEGUNSOFT\路径,虽为合法默认值但泄露了用户名信息,且不支持跨平台。
scripts/intake.py:20 声明能力 vs 实际能力
SKILL.md声明Edit/Write,代码读写fix_plan.md/checklist.md plane_create_issue.py:通过Plane REST API POST创建issue,属WRITE级别 plane_create_entity.py:397-401 kubectl exec执行Django Shell; plane_update_entity.py类似 intake.py:23 os.environ.get('DGS_PLANE_API_KEY'); plane_bulk_update.py相同模式 SKILL.md声明depends-on fix-plan/todowrite/github-flow,实际通过sys.path跨目录导入共享模块 可疑产物与外联
https://keepachangelog.com/en/1.0.0/ CHANGELOG.md:5
https://semver.org/spec/v2.0.0.html CHANGELOG.md:6
https://plane.es6.kr/es6kr/projects/ comment.md:47
https://plane.es6.kr/es6kr/projects/4b4d8bfc-5e5d-495b-bd4c-301fe89e5bb0/issues/86db2a42-172e-4413-98a2-9f5f704104e8 create.md:80
https://plane.dgs.ai.kr/dgs/projects/ create.md:93
https://plane.dgs.ai.kr/dgs/browse/ create.md:93
https://plane.dgs.ai.kr/dgs/browse/INFRA-77 create.md:94
https://plane.dgs.ai.kr/api/v1/workspaces/dgs scripts/intake.py:21
https://plane.es6.kr scripts/test_plane_priority_mapping.py:40
https://plane.example.com/myworkspace/projects/ scripts/test_plane_sync.py:26
https://plane.example.com scripts/test_plane_sync.py:83
http://plane.example.com scripts/test_plane_sync.py:461
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| workspace_profile | 未声明 | 跨skill导入(fix-plan技能) | 否 | 非pip依赖,来自fix-plan技能目录;本身可能含K8s/SSH凭证逻辑,安全态势由外部保证 |
| plane_client | 未声明 | 本地scripts同目录 | 否 | 纯标准库,无外部依赖;Plane API凭证仅发往配置的目标Plane Host |
文件构成
scripts/plane_create_entity.py scripts/test_plane_sync.py scripts/intake.py scripts/plane_client.py scripts/test_plane_priority_mapping.py