@comate/zulu 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: comate-automation-browser
2
+ name: browser-use
3
3
  description: |
4
4
  Browser automation for web browsing, UI testing, screenshot verification, and web content scraping.
5
5
  When to use:
@@ -4,7 +4,7 @@ description: 代码安全漏洞扫描与修复工具。适用场景:(1) 扫描
4
4
  metadata:
5
5
  enableWhen:
6
6
  - isInternal
7
- version: V1.5.0
7
+ version: V1.5.1
8
8
  disable-model-invocation: true
9
9
  ---
10
10
 
@@ -2,14 +2,58 @@
2
2
 
3
3
  修复漏洞分为以下三个步骤,**必须按序执行,每步完成后再进入下一步**:
4
4
 
5
- 1. **读取配置数据**:解析 `poll_result.json`,提取 `deployment.platform`、`deployment.credential_id`、`files[].name`、`files[].vulList[]`(含 `line`、`extra.secret.credentialName`、`extra.secret.start/end`);**禁止凭印象跳过读取**
6
- 2. **修复硬编码漏洞**:按文件遍历,每个文件内按 `line` **降序**处理漏洞;同行多漏洞按 `start.col` **降序**替换;每个漏洞**独立**依据 `credentialName` 是否为空决定托管或删除方式;**仅替换 `[start.col, end.col]` 范围内字符**,行内其余内容一律不动;修复后重新读取文件逐项校验
7
- 3. **【强制执行】引入 SDK**:显式检查 `deployment.platform` 的值——`== 4` 时按第 3 节引入 keyless-sdk(`credentialID` 必须与 `deployment.credential_id` 完全一致,已有则不重复引入);`!= 4` 时明确跳过,**不得静默忽略此步骤**
5
+ 1. **读取配置数据**:解析 `poll_result.json`,提取 `deployment.platform`、`deployment.credential_id`、`files[].name`、`files[].vulList[]`(含 `extra.secret.start.line`、`extra.secret.credentialName`、`extra.secret.start/end`);**禁止凭印象跳过读取**;**files[].vulList[].line不是漏洞行号,不要根据这个处理漏洞**
6
+ 3. **修复硬编码漏洞**:按文件遍历,每个文件内按 `extra.secret.start.line` **降序**处理漏洞;同行多漏洞按 `start.col` **降序**替换;每个漏洞**独立**依据 `credentialName` 是否为空决定托管或删除方式;**仅替换 `[start.col, end.col]` 范围内字符**,行内其余内容一律不动;修复后重新读取文件逐项校验
7
+ 4. **【强制执行】引入 SDK**:显式检查 `deployment.platform` 的值——`== 4` 时按第 3 节引入 keyless-sdk(`credentialID` 必须与 `deployment.credential_id` 完全一致,已有则不重复引入);`!= 4` 时明确跳过,**不得静默忽略此步骤**
8
+
9
+ ---
10
+
11
+ ## ⛔ 核心约束:仅处理有 extra.secret.start.line 的漏洞
12
+
13
+ **此约束为硬性规则,不可违反,不可绕过。**
14
+
15
+ 修复漏洞前,必须逐项检查 `vulList[]` 中的每个漏洞对象是否满足以下条件:
16
+
17
+ ```
18
+ ✅ 必须存在的字段:
19
+ - extra.secret.start.line(漏洞所在行号)
20
+ - extra.secret.start.col(漏洞起始列)
21
+ - extra.secret.end.line(漏洞结束行号)
22
+ - extra.secret.end.col(漏洞结束列)
23
+
24
+ ❌ 缺失任何字段 → 该漏洞必须跳过,不得修复
25
+ ```
26
+
27
+ **处理逻辑**:
28
+
29
+ ```
30
+ 对于 vulList 中的每个漏洞:
31
+ 如果 extra.secret.start.line 不存在:
32
+ → 输出警告:"[跳过] 漏洞缺少 extra.secret.start.line 字段,无法定位行号"
33
+ → 继续处理下一个漏洞
34
+ → 禁止尝试猜测或推断行号
35
+
36
+ 如果 extra.secret.start 或 extra.secret.end 不存在:
37
+ → 输出警告:"[跳过] 漏洞缺少完整的位置信息(start/end)"
38
+ → 继续处理下一个漏洞
39
+ → 禁止尝试修复
40
+
41
+ 如果上述字段都存在:
42
+ → 执行修复流程(参考第 2 节)
43
+ ```
44
+
45
+ **禁止事项**:
46
+ - ❌ 禁止修复没有 `extra.secret.start.line` 的漏洞
47
+ - ❌ 禁止凭上下文猜测漏洞位置
48
+ - ❌ 禁止修复"看起来像硬编码"但不在 `vulList` 中的内容
49
+ - ❌ 禁止基于文件内容推断漏洞位置
50
+
51
+ ---
8
52
 
9
53
  > **稳定性总原则**:
10
54
  > - **只改必要内容**:仅基于 `extra.secret.start` / `extra.secret.end` 精确定位敏感信息进行替换,禁止改动同一行其他字符(包括空格、引号、注释、分隔符)。
11
- > - **白名单修复**:只修复 `poll_result.json` 中明确列出的漏洞,禁止顺带"修复"其他疑似硬编码。
12
- > - **修复顺序**:同一文件内的多个漏洞,**按 `line` 降序处理**,避免前面的修改导致后续行号偏移;不同文件之间互不干扰。
55
+ > - **白名单修复**:只修复 `poll_result.json` 中明确列出**且包含完整位置信息**的漏洞,禁止顺带"修复"其他疑似硬编码。
56
+ > - **修复顺序**:同一文件内的多个漏洞,**按 `extra.secret.start.line` 降序处理**,避免前面的修改导致后续行号偏移;不同文件之间互不干扰。
13
57
  > - **每个漏洞独立判断**:必须依据各自的 `credentialName` 决定修复方式,禁止基于内容相似性批量推断。
14
58
  > - **修复后校验**:修复完毕重新读取文件,逐项确认(a)目标位置已替换;(b)非目标行/列未被改动;(c)文件整体语法/缩进合法。
15
59
 
@@ -32,7 +76,6 @@
32
76
  "vulList": [
33
77
  {
34
78
  "ruleID": "codescan_generic_password-config_sensitive",
35
- "line": 35,
36
79
  "hash": "漏洞hash",
37
80
  "extra": {
38
81
  "secret": {
@@ -59,7 +102,7 @@
59
102
  * `files`:文件信息
60
103
  * `name`:漏洞文件的相对路径
61
104
  * `vulList`:漏洞列表
62
- * `line`:漏洞所在行号
105
+ * `extra.secret.start.line`:漏洞所在行号
63
106
  * `extra.secret.start`:敏感信息的开始位置(行、列,列从 1 开始计数)
64
107
  * `extra.secret.end`:敏感信息的结束位置(行、列)
65
108
  * `extra.secret.credentialName`:建议使用的环境变量名称
@@ -72,19 +115,43 @@
72
115
 
73
116
  ### 2.1 通用修复流程
74
117
 
118
+ **⚠️ 前置检查(每个漏洞必须执行)**:
119
+
120
+ ```
121
+ 步骤 0:验证漏洞位置信息完整性
122
+ ────────────────────────────────
123
+ 对于 vulList 中的每个漏洞项:
124
+ 检查 extra.secret.start.line 是否存在?
125
+ ❌ 不存在 → 输出警告,跳过该漏洞,继续下一个
126
+ ✅ 存在 → 继续
127
+
128
+ 检查 extra.secret.start 和 extra.secret.end 是否都存在?
129
+ ❌ 不存在 → 输出警告,跳过该漏洞,继续下一个
130
+ ✅ 存在 → 继续
131
+
132
+ 检查 start.col 和 end.col 是否都存在?
133
+ ❌ 不存在 → 输出警告,跳过该漏洞,继续下一个
134
+ ✅ 存在 → 进入修复流程
135
+ ```
136
+
137
+ **标准修复流程**(仅对通过前置检查的漏洞):
138
+
75
139
  1. **按文件聚合**:遍历 `files[]`,处理完一个文件再处理下一个。
76
- 2. **按行倒序处理**:对当前文件的 `vulList[]` 按 `line` **降序**排序后再修复。
77
- 3. **逐漏洞读取关键字段**:`line`、`extra.secret.credentialName`、`extra.secret.start`、`extra.secret.end`。
78
- 4. **独立判断修复方式**:
140
+ 2. **过滤无效漏洞**:对每个 `vulList[]` 执行前置检查,筛除缺少位置信息的漏洞。
141
+ 3. **按行倒序处理**:对通过检查的漏洞按 `extra.secret.start.line` **降序**排序后再修复。
142
+ 4. **逐漏洞读取关键字段**:`extra.secret.start.line`、`extra.secret.credentialName`、`extra.secret.start`、`extra.secret.end`。
143
+ 5. **独立判断修复方式**:
79
144
  - `credentialName` 不为空 → **托管方式**(参考 2.2 / 2.3)
80
145
  - `credentialName` 为空 → **删除方式**(参考 2.4)
81
- 5. **精确替换**:仅替换 `[start.col, end.col]` 范围内的字符,行内其余内容保持原样。
82
- 6. **同行多漏洞**:若同一行存在多个漏洞,按 `start.col` **降序**依次替换,避免列偏移。
83
- 7. **修复后校验**:重新读取文件,确认每个漏洞已按正确方式修复,且无误伤。
146
+ 6. **精确替换**:仅替换 `[start.col, end.col]` 范围内的字符,行内其余内容保持原样。
147
+ 7. **同行多漏洞**:若同一行存在多个漏洞,按 `start.col` **降序**依次替换,避免列偏移。
148
+ 8. **修复后校验**:重新读取文件,确认每个漏洞已按正确方式修复,且无误伤。
84
149
 
85
150
  > **重要**:即使多行内容完全相同,也必须逐行依据各自的 `credentialName` 判断修复方式;不得基于内容相似性批量推断。仅当确认所有目标行的 `credentialName` 都相同且非空时,才可使用 `replace_all`。
86
151
 
87
- > **白名单约束**:仅修复 `poll_result.json` 中列出的漏洞,文件中其他可疑硬编码一律不动。
152
+ > **白名单约束**:仅修复 `poll_result.json` 中列出且位置信息完整的漏洞,文件中其他可疑硬编码一律不动。
153
+
154
+ > **无位置信息漏洞处理**:遇到缺少 `extra.secret.start.line` 等关键字段的漏洞时,必须跳过并输出警告日志,禁止尝试修复。
88
155
 
89
156
  ### 2.2 托管方式 - 代码文件
90
157
 
@@ -147,6 +214,8 @@ spring.datasource.password=${KL_SPRING_DATASOURCE_PASSWORD}
147
214
 
148
215
  初始化代码中的 `credentialID` / `credential_id` / `CredentialID` 必须与 `deployment.credential_id` 完全一致。已有 SDK 依赖与初始化的项目,**不要重复引入**。
149
216
 
217
+ **以下引入client时,一定要检查client的变量引用,保证引用正确**
218
+
150
219
  ### 3.1 Java
151
220
 
152
221
  `pom.xml` 中添加依赖(保留注释):
@@ -225,6 +294,10 @@ func main() {
225
294
  ... ...
226
295
  }
227
296
  ```
297
+ 具体账密漏洞变更成从使用client.GetSecret(credentialName)获取,credentialName从poll_result.json获取。代码如下:
298
+ ```go
299
+ client.GetSecret("credentialName")
300
+ ```
228
301
 
229
302
  ### 3.3 Python
230
303
 
@@ -232,8 +305,8 @@ func main() {
232
305
 
233
306
  ```txt
234
307
  // keyless-sdk dependency
235
- credential-vault-sdk>=0.1.15(Python3 版本添加此依赖)
236
- credential-vault-sdk-py2>=0.1.12(Python2 版本添加此依赖)
308
+ credential-vault-sdk=0.1.15(Python3 版本添加此依赖)
309
+ credential-vault-sdk-py2=0.1.15(Python2 版本添加此依赖)
237
310
  ```
238
311
 
239
312
  初始化代码:
@@ -255,6 +328,11 @@ def main():
255
328
  ... ...
256
329
  ```
257
330
 
331
+ 具体账密漏洞变更成从使用client.get_secret(credentialName)获取, credentialName从poll_result.json获取,代码如下:
332
+ ```python
333
+ client.get_secret("credentialName")
334
+ ```
335
+
258
336
  ### 3.4 C++
259
337
 
260
338
  在文件开始引入头文件和命名空间(保留注释):
@@ -287,3 +365,12 @@ int main(int argc, char *argv[]) {
287
365
  ... ...
288
366
  }
289
367
  ```
368
+ 硬编码的账密位置替换成从使用client.get_secret(credentialName)获取, credentialName从poll_result.json获取。例如原始代码是
369
+ ```C++
370
+ std::string password = "xxxxxxxxxxx";
371
+ ```
372
+ 替换成
373
+ ```C++
374
+
375
+ std::string password = client.get_secret("credentialName");
376
+ ```