Eigent 漏洞模式参考:从注入到反序列化的多语言安全审计规则全解析

发布时间:2026/9/14 12:29:20
Eigent 漏洞模式参考:从注入到反序列化的多语言安全审计规则全解析 Eigent 漏洞模式参考从注入到反序列化的多语言安全审计规则全解析【免费下载链接】eigentEigent: The Open Source Cowork Desktop - Local and Free Alternative to Claude Cowork and Codex项目地址: https://gitcode.com/GitHub_Trending/ei/eigentresources/example-skills/skill-security-auditor/references/vulnerability-patterns.md是 Eigent 内置skill-security-auditor技能的核心参考文档覆盖注入、认证会话、密码学、不安全反序列化、SSRF、文件操作和框架专属模式七大类漏洞模式。本文完整继承该文档的漏洞模式与修复方案并结合 扫描脚本 的源码实现解析每条规则如何从文档模式落地为可执行的检测正则帮助读者建立一套可落地的多语言安全审计规则体系。文档定位技能体系中的漏洞知识库skill-security-auditor是 Eigent 在 resources/example-skills/skill-security-auditor 下提供的一个开箱即用的安全审计技能。其 SKILL.md 明确说明详细的漏洞模式与检测规则见references/vulnerability-patterns.md密钥检测见references/secrets-patterns.md。换句话说本文所基于的vulnerability-patterns.md是 Agent 执行安全审计任务时的规则知识库扫描脚本 scan_project.py 则是它的可执行实现。二者一静一动文档定义什么是漏洞脚本定义如何用正则找出漏洞。技能的快速使用方式来自 SKILL.mdpython scripts/scan_project.py /path/to/project python scripts/scan_project.py /path/to/project --format text python scripts/scan_project.py /path/to/project --format json输出格式分text人类可读与json供程序消费两种退出码在有发现时为 1无发现时为 0便于集成到 CI 流水线。注入漏洞Injection Vulnerabilities注入类漏洞是 OWASP Top 10 中 A03 的核心文档按 SQL、NoSQL、命令、LDAP、XSS 五个子类分别给出危险模式 → 安全替代的成对示例。SQL 注入文档列出各语言中典型的拼接型 SQL# Python execute(f...{var}...) execute(... var ...) execute(...%s... % var)// JavaScript query(...${var}...) query(... var ...)// Go db.Query(... var ...) fmt.Sprintf(SELECT ... %s, var) passed to Query()// Java statement.execute(... var ...)安全替代参数化查询、预编译语句、ORM 查询构造器。脚本侧的实现印证scan_project.py 中.py的规则集直接针对上述两种拼接形态\.execute\s*\(\s*f[]—— 捕获execute(f...)这种 f-string 拼接\.execute\s*\([^)]*%—— 捕获execute(...%s... % var)这种百分号格式化.go规则db\.Query\s*\([^)]*\与fmt\.Sprintf\s*\(SELECT分别覆盖字符串拼接和Sprintf格式化两种 Go 侧形态.java规则Statement.*execute\s*\([^)]*\覆盖 Java 的拼接型 SQL。文档中的每种语言形态都能在脚本里找到一一对应的正则这正是文档即规则的体现。NoSQL 注入// MongoDB: user input directly in query object db.collection.find({ user: req.body.user, pass: req.body.pass }) // Attacker sends: { pass: { $gt: } }攻击者通过构造{ $gt: }这类操作符对象绕过密码比对。安全替代显式校验输入类型、强制使用$eq、借助mongo-sanitize等库做清洗。命令注入文档按语言列出高危函数Python: os.system(), os.popen(), subprocess.call(shellTrue), subprocess.Popen(shellTrue) Node.js: child_process.exec(), child_process.execSync() Go: exec.Command(sh, -c, userInput) Java: Runtime.exec(userInput) PHP: exec(), system(), passthru(), shell_exec(), backticks Ruby: system(), exec(), backticks, %x{}安全替代subprocess传列表参数不启用 shell并对输入做白名单校验。脚本侧印证Python 侧os\.system、os\.popen、subprocess\.\w\(.*shell\s*\s*True三条规则分别对应文档列出的三类形态见 scan_project.pyNode 侧child_process\.exec\s*\(覆盖exec()调用Go 侧exec\.Command\s*\(\s*sh专门捕获exec.Command(sh, -c, userInput)这种显式 shell 调起Java 侧Runtime\.getRuntime\(\)\.exec\s*\(覆盖Runtime.exec(userInput)。LDAP 注入ldap.search_s(base, scope, f(uid{username}))安全替代转义用户输入中的()*\与空字节。跨站脚本XSS文档列出的危险 sinkJavaScript: innerHTML, outerHTML, document.write(), eval(), v-html, dangerouslySetInnerHTML Template: |safe, {% autoescape off %}, !, !{}, {!! !!}安全替代textContent、模板自动转义、CSP 响应头、确需 HTML 时用 DOMPurify。脚本侧印证.js与.ts规则分别含.innerHTML\s*、document\.write\s*\(、dangerouslySetInnerHTML、eval\s*\(、new\sFunction\s*\(见 scan_project.py与文档 sink 列表高度吻合。认证与会话问题弱密码存储危险示例明文或弱哈希# Plaintext or weak hashing hashlib.md5(password.encode()).hexdigest() hashlib.sha256(password.encode()).hexdigest()安全示例自适应加盐哈希import bcrypt hashed bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds12))要点md5/sha256这类非自适应哈希没有加盐、迭代次数不可调面对 GPU 撞库效率极低bcrypt通过rounds参数可调节成本因子。JWT 漏洞文档列出四个常见问题接受alg: none用对称算法HS256却传入公钥未校验exp/iss把敏感数据放进 payloadJWT 是 base64 而非加密。校验清单示例# 显式指定算法 jwt.decode(token, key, algorithms[RS256]) # 显式算法 jwt.decode(token, key) # 危险接受任意算法核心防御解码时必须显式传入algorithms白名单避免库默认接受none或任意算法。会话管理文档列出需重点标记的四类问题会话 ID 出现在 URL 中会话 Cookie 缺少HttpOnly/Secure/SameSite标志无会话超时或登录后未轮换会话 ID会话标识可预测。密码学弱点不安全算法文档给出禁用与可用两套清单可作为代码审计的对照表禁用发现即标记Hash: MD5, SHA1用于安全目的时 Cipher: DES, 3DES, RC4, Blowfish Mode: 任意块加密的 ECB 模式 RSA: 密钥长度 2048 位可用Hash: SHA-256, SHA-384, SHA-512, BLAKE2 Cipher: AES-128/256-GCM, ChaCha20-Poly1305 RSA: 2048 位及以上 OAEP 填充 ECDSA: P-256 或 P-384 曲线硬编码密码学材料在源码中出现即应标记加密密钥、IV / nonce私钥RSA、ECDSA、Ed25519密码哈希的固定盐值。配套的 secrets-patterns.md 进一步给出针对各云厂商与服务的正则例如AKIA[0-9A-Z]{16}AWS Access Key ID、gh[ps]_[A-Za-z0-9_]{36,}GitHub Token、-----BEGIN (RSA |EC |OPENSSH )?PRIVATE KEY-----私钥头等与 scan_project.py 的SECRET_PATTERNS一一对应。不安全反序列化文档按语言列出的高危函数Python: pickle.loads(), yaml.load()未用 SafeLoader, marshal.loads() Java: ObjectInputStream.readObject(), XMLDecoder PHP: unserialize() Ruby: Marshal.load(), YAML.load() Node.js: node-serialize, js-yaml.load()使用危险 schema安全替代数据交换统一使用 JSONYAML 一律走yaml.safe_load()对反序列化结果做类型与结构校验。脚本侧印证Python 侧pickle\.loads?\s*\(与yaml\.load\s*\([^)]*\)两条正则直接对应文档列出的两个函数见 scan_project.pyJava 侧ObjectInputStream.*readObject覆盖ObjectInputStream.readObject()。服务端请求伪造SSRF危险模式# 用户可控 URL requests.get(user_provided_url) urllib.request.urlopen(user_provided_url)缓解措施文档四条建议对目标域名 / IP 走白名单阻断到内网 / 保留段的请求10.x、172.16-31.x、192.168.x、127.x、169.254.x禁用或校验重定向目标在出口防火墙层做网络级拦截。文件操作路径穿越危险模式# 用户可控文件名 open(os.path.join(base_dir, user_filename))安全模式文档给出的完整代码import pathlib base pathlib.Path(base_dir).resolve() target (base / user_filename).resolve() if not str(target).startswith(str(base)): raise ValueError(Path traversal detected)要点先resolve()消解..与符号链接再用前缀判定目标是否落在基目录之内。无限制文件上传文档给出的检查清单按内容magic bytes而非仅扩展名校验文件类型强制限制最大文件尺寸上传目录放在 Web 根目录之外使用随机文件名而非用户提供的名字有条件的情况下对上传内容做恶意软件扫描。框架专属模式Django# 危险原生 SQL 拼接 Model.objects.raw(fSELECT * FROM t WHERE id {user_id}) # 安全ORM 或参数化 raw Model.objects.filter(iduser_id) Model.objects.raw(SELECT * FROM t WHERE id %s, [user_id])settings.py常见需检查项DEBUG True # 生产必须为 False ALLOWED_HOSTS [*] # 必须收紧 CSRF_COOKIE_SECURE False # HTTPS 下必须为 True SESSION_COOKIE_SECURE False # HTTPS 下必须为 TrueFlask# 危险通过 Markup 引发 XSS from markupsafe import Markup return Markup(fp{user_input}/p) # 安全模板自动转义 return render_template(page.html, datauser_input) # 检查 debug 模式 app.run(debugTrue) # 生产必须为 False脚本侧印证Python 规则markupsafe\.Markup\s*\(\s*f直接命中上述Markup(f...)形态见 scan_project.py是文档规则 → 正则的直接映射。Express.js// 缺安全头应启用 helmet const helmet require(helmet); app.use(helmet()); // 缺少 CSRF 保护针对状态变更路由 // 认证端点缺少限流 // 缺少输入校验用 express-validator 或 zodSpring Boot// 危险SpEL 注入 parser.parseExpression(userInput).getValue();application.properties检查项server.error.include-stacktracealways # 泄露内部信息 management.endpoints.web.exposure.include* # 暴露 actuator脚本侧印证Java 规则parseExpression\s*\(.*\)\.getValue精确命中 SpEL 注入的调用形态见 scan_project.py。配置层扫描脚本如何把文档规则变成正则vulnerability-patterns.md中的每条危险模式在 scan_project.py 里都有对应的正则规则按扩展名分组的DANGEROUS_FUNCTIONS字典是核心。以 Python 为例.py: [ (r\beval\s*\(, eval() can execute arbitrary code), (r\bexec\s*\(, exec() can execute arbitrary code), (r\bos\.system\s*\(, os.system() is vulnerable to command injection), (r\bos\.popen\s*\(, os.popen() is vulnerable to command injection), (rsubprocess\.\w\(.*shell\s*\s*True, subprocess with shellTrue is vulnerable to command injection), (r\bpickle\.loads?\s*\(, pickle.load() can execute arbitrary code during deserialization), (r\byaml\.load\s*\([^)]*\), yaml.load() without SafeLoader can execute arbitrary code), (r\.execute\s*\(\s*f[\], f-string in SQL execute() is vulnerable to SQL injection), (r\.execute\s*\([^)]*%, string formatting in SQL execute() is vulnerable to SQL injection), (r\bmarkupsafe\.Markup\s*\(\s*f, Markup() with f-string is vulnerable to XSS), ]每条规则都是文档中列出的危险模式 → 一个正则的翻译。此外脚本还维护三类附加规则SECRET_PATTERNS与 secrets-patterns.md 对齐的密钥正则CONFIG_ISSUES如DEBUG\s*[:]\s*[Tt]rue、ALLOWED_HOSTS\s*\s*\[\s*[\]?\*[\]?\s*\]、SSL_VERIFY\s*[:]\s*[Ff]alse、verify\s*\s*False等覆盖 Django / Flask / 通用配置项目结构检查.gitignore是否缺失.env/*.pem/*.key规则仓库根是否遗留.env/.env.local/.env.production。扫描范围还受SKIP_DIRS.git、node_modules、__pycache__、.venv等与SKIP_EXTENSIONS二进制与图片约束单文件大小上限 1 MB避免对构建产物误报。与 Eigent 技能体系的衔接从 backend/app/service/skill_service.py 的实现看Eigent 后端会通过sync_example_skills()把resources/example-skills/下的每个技能目录同步到用户的技能根目录并用.eigent-example-skill标记管理副本保证示例技能随版本更新而升级。前端侧 src/store/skillsStore.ts 与 src/pages/Agents/Skills.tsx 负责展示与安装入口。因此vulnerability-patterns.md不仅是一份静态文档更是 Eigent 内置 Agent 在执行security audit任务时读取的规则来源——Agent 读到触发词如 vulnerability scan、OWASP、check for vulnerabilities后可依据这份模式清单对项目代码做定向检查。阅读路径与后续深入规则知识库vulnerability-patterns.md 与 secrets-patterns.md可执行扫描器scan_project.py 与 scan_secrets.py技能定义与触发词SKILL.md后端同步逻辑skill_service.py从读文档理解模式 → 用脚本做粗扫 → 按框架专属清单做精查三步走是这份参考文档设计出来的完整工作流它同时服务于人类审计者与 Eigent 内置的 Agent是典型的规则即代码的开源技能实现范例。【免费下载链接】eigentEigent: The Open Source Cowork Desktop - Local and Free Alternative to Claude Cowork and Codex项目地址: https://gitcode.com/GitHub_Trending/ei/eigent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考