fix: 无连字符 KEY 变量 + COBOL 专家 10 大攻击面测试

COBOL 专家对抗性审查发现:
- 老式 COBOL 的 WSKEY1/WSKEY2(无连字符)未被 L1 关键词检测
- 结构性检测信号 4 和 5 覆盖不全

修复:
- L1 增加 re:WS[A-Z0-9]*KEY[A-Z0-9]* 覆盖无连字符 KEY 命名
- _matches_key_comparison 扩展支持无连字符变量
- has_key_var 注入扩展支持无连字符
- 结构性检测信号 4 增加 WS\w+ 比较模式
- 结构性检测信号 5 增加两个单独 OPEN 的支持

新测试:
- test_cobol_expert_attacks — 4 个内联攻击测试
  (跨行AT END, 无连字符WSKEY, GO TO风格, NOT=比较)
- test-adversarial: 8 个样本文件攻击测试

全回归: 767 passed (+3 new, 0 failures)
This commit is contained in:
NB-076
2026-06-21 15:35:52 +08:00
parent da5d1058e7
commit 4b22c3754e
11 changed files with 352 additions and 65 deletions
+1 -1
View File
@@ -162,7 +162,7 @@ def _path_rule_engine(
import re
su = features["source_upper"]
features["has_key_var"] = bool(re.search(
r'WS-[\w-]*KEY[A-Z0-9-]*\s*[=<>]|' # WS-KEY = / WS-KEY >
r'(?:WS-[\w-]*KEY[A-Z0-9-]*|WS[A-Z0-9]*KEY[A-Z0-9]*)\s*[=<>]|' # WS-KEY / WSKEY1
r'\b[A-Z]\d{0,2}-[\w-]*KEY\s*[=<>]', # K01-KEY =
su
))