关于 assemble-lib-rules
面向 OpenTaint 的安全技能,根据 get_status.py 报告,为未覆盖的 sink 标签添加规则,将其连接到共享的 untrusted-data-source 标签,并验证连接是否完整。
主要功能
- 01以报告中的未覆盖 sink 标签为清单
- 02每个缺失标签编写一条安全连接规则
- 03引用共享源标签和 sink 标签
- 04使用 get_status.py 验证连接
适用场景
- 01将不可信数据源连接到尚未覆盖的 sink 类别
- 02根据状态报告补齐可复用规则连接
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ seqra/ opentaint --skill assemble-lib-rules安装后在 Claude Code 中输入/assemble-lib-rules确认已加载。
详细介绍
技能:组装库规则
可复用的源规则共用单个 untrusted-data-source 标签。只编写将该标签连接到 get_status.py 报告为未覆盖的 sink 标签的安全连接。已有连接会自动包含携带任一标签的所有新库规则。主扫描会验证这些连接。
输入
由调用方提供;若省略,则回退到默认值。仅当必需输入缺失且没有合理默认值时,才询问调用方。
project-root(可选)——目标项目的根目录。Opentaint 会将所有分析产物保存在固定的<project-root>/.opentaint/目录下,因此下面的每个.opentaint/...路径都会解析到该目录。默认值:当前目录language(必需)——此项目的目标语言及特定于该语言的说明
工作流
1. 获取缺失的 sink 标签
只有当 get_status.py 报告存在未覆盖的连接时,编排器才会调度此技能。将该输出作为完整的待办清单:reusable tag groups are not fully joined 下的每一行 untrusted-data-source -> sink-tag 都表示一个需要连接的 sink 标签。脚本已经考虑了生效的内置规则和自定义库规则,以及现有连接。不要读取这些规则,也不要自行重新计算矩阵。
2. 为每个缺失的 sink 标签编写一条安全连接
为每个缺失的 sink 标签,在 .opentaint/rules/<lang>/security/<vulnerability>.yaml 下编写一条 join 规则。将去掉末尾 -sink 的 sink 标签用作简洁且全局唯一的 <vulnerability> ID——例如,regex-dos-sink 会变成 regex-dos。直接引用共享源标签和报告的 sink 标签:
rules:
- id: regex-dos
severity: ERROR
message: Untrusted data reaches a regular-expression denial-of-service sink
metadata:
cwe:
- CWE-1333
short-description: Regular expression denial of service via untrusted input
languages:
- <language>
mode: join
join:
refs:
- tag: untrusted-data-source
as: source
- tag: regex-dos-sink
as: sink
on:
- 'source.$UNTRUSTED -> sink.$UNTRUSTED'
两个端点都使用 $UNTRUSTED。Sink 标签和连接 ID 表示漏洞类别,而不是软件包、框架或单个方法:针对已有漏洞类别创建的新规则会复用该类别的 sink 标签,因此不需要新增连接。根据 sink 标签推导准确的安全元数据。
3. 验证矩阵,然后停止
再次运行 get_status.py。如果仍报告有指定的 sink 标签,则修复该连接并重复此步骤。所有可复用的 sink 标签都连接到 untrusted-data-source 后,即可完成。
输出
产物
- 每个缺失的 sink 标签对应一个安全连接文件,位于
.opentaint/rules/<lang>/security/<vulnerability>.yaml
摘要
- 每条连接一行:sink 标签和规则 ID
注意事项
- 直接引用报告中的 sink 标签,绝不要重新声明或枚举任一标签组中的库规则成员
- 生成的连接中不要添加注释