ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从 CRITICAL 到 SAFE:scientific-agent-skills 中 peer-review Skill 的安全加固与验证实录

从 CRITICAL 到 SAFE:scientific-agent-skills 中 peer-review Skill 的安全加固与验证实录 从 CRITICAL 到 SAFEscientific-agent-skills 中 peer-review Skill 的安全加固与验证实录【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills本篇技术指南围绕仓库中 peer-review 技能的安全验证记录完整还原一次 Agent Skill 安全整改的完整闭环从安全扫描发现10 项含 CRITICAL 级别的基线问题到删除外部脚本、重构为有界确定性的本地处理再到多维度验证全部 PASS 并仅保留 3 项 LOW 残留的全过程。读完本文你将掌握 Agent Skill 在网络访问、凭据读取、子进程链、图像生成等高危能力上的审计要点、加固手段以及如何用 AST 静态测试、行为扫描与 PR 门禁组合验证一个技能达到可发布的安全状态。一、安全基线一次扫描暴露的 CRITICAL 问题1.1 基线背景在 2026-07-23项目本地日期的安全整改之前仓库 SECURITY.md 记录 peer-review 技能存在10 项安全发现其中最高严重级别为CRITICAL。这些发现涉及七大类风险跨文件环境变量与网络数据外泄Cross-file environment-variable and network exfiltration多文件采集/传输链A multi-file collection/transmission chain两个示意图脚本中的环境信息采集Environment harvesting in both schematic scripts向外部模型服务传输 API KeyAPI-key transmission to an external model service向子进程传播完整环境变量Full environment propagation to a subprocess反复的高成本模型/图像操作Repeated costly model/image operations强制的外部示意图生成与跨技能行为Mandatory external schematic/cross-skill behavior1.2 受影响文件安全发现集中指向三个对象整改后现状如下scripts/generate_schematic.py—— 已删除scripts/generate_schematic_ai.py—— 已删除旧版SKILL.md—— 已重写为 skills/peer-review/SKILL.md从当前测试可以印证删除动作的真实性tests/peer-review/test_scripts.py 中的test_no_bytecode_or_removed_schematic_scripts断言generate_schematic.py与generate_schematic_ai.py均不存在且技能目录内无任何*.pyc字节码产物。二、整改策略以有界确定性本地处理替换外部依赖2.1 修复动作总览本次整改的核心理念是删除一切不必要的外向能力用有界、确定性、纯本地的实现替换之。具体动作包括删除两个外部示意图脚本消除环境采集、API Key 传输、子进程链、网络请求、模型调用、图像生成与强制配图能力移除凭据访问不读取.env、环境变量、API Key也不再向任何子进程传递环境新增严格 schema所有 JSON/CSV/Markdown 输入必须通过结构化校验新增重复键/重复表头检测、尺寸/行数/单元格上限、symlink 拒绝、私有原子输出与禁止隐式覆盖报告最小化输出仅包含 ID、计数、规则编码与行号绝不回显稿件或审稿正文新增 AST 测试拒绝网络库、可执行序列化、动态代码执行与环境凭据访问新增保密门禁机密性、禁止复用、授权、冲突、胜任力、AI 政策、披露、删除/留存共八类检查。2.2 修复后的能力边界SKILL.md 强制安全边界当前 SKILL.md 明确声明了技能的安全边界这些约束与本次安全整改直接对应不向外部服务发送未发表稿件、补充材料、审稿或编辑文本除非获得出版商/作者明确授权及期刊许可不上传机密内容到公开模型、搜索引擎、引用服务、语法工具、查重或图像服务不复用内容用于训练、基准测试、产品改进或不相关研究不读取宽泛的环境状态、.env文件、API Key 或凭据捆绑工具不得调用网络、LLM 或图像 API不自动调用其他技能或 PDF/图像流水线不冒充审稿人、编辑、期刊、资助方或作者不捏造稿件细节、审稿结论、引文、分析、实验、复现结果或编辑结论不代替编辑或评审组宣布决定。三、源码级安全护栏_common.py 的底层实现安全整改不只是文档承诺更落实在 skills/peer-review/scripts/_common.py 的共享安全基座中。这是所有 peer-review 本地 CLI 共用的依赖无关dependency-free安全辅助模块。3.1 有界输入限制模块顶部定义了统一的硬性边界常量L15-L19MAX_INPUT_BYTES 4 * 1024 * 1024 # 单文件上限 4 MiB MAX_ROWS 5_000 # CSV 最大数据行数 MAX_CELL_CHARS 12_000 # 单元格最大字符数 MAX_TEXT_CHARS 50_000 # 文本字段最大字符数 MAX_LIST_ITEMS 2_000 # JSON 数组最大元素数这些正是安全验证记录中输入已限制为 4 MiB、5,000 行 CSV、每单元格 12,000 字符的来源测试 test_oversized_json_is_rejected_before_parsing 用MAX_INPUT_BYTES 1字节的超大文件验证了解析前的拒绝逻辑。3.2 路径安全symlink 拒绝与无隐式覆盖safe_input_pathL39-L59拒绝 symlink 输入、要求必须是常规文件、限制后缀白名单并在解析前检查 4 MiB 尺寸上限safe_output_pathL62-L85则要求输出父目录存在、拒绝 symlink 输出且默认禁止覆盖已有文件必须显式传--force。测试 test_symlink_input_is_rejected 验证了 symlink 拒绝行为。3.3 重复键/重复表头检测_duplicate_safe_objectL30-L36通过object_pairs_hook在 JSON 解析时拦截重复键read_csv_recordsL117-L180检查表头不得为空、必须唯一、必须包含必需列、不得含未知列并逐行校验单元格长度与 NUL 字节。3.4 私有原子输出atomic_write_textL347-L369使用tempfile.NamedTemporaryFile在目标目录内写入临时文件设置0o600私有权限后经os.replace原子替换目标。测试 test_private_output_refuses_implicit_overwrite 同时验证了0o600权限位与--force语义。3.5 报告最小化的代码体现issue()辅助函数L391-L393只产生{code: ..., field: ...}的无内容发现对象——这正是输出 ID 与规则编码而非正文这一保密设计的实现基础。测试中多处断言验证json.dumps(report)不含稿件文本、不含ridiculous等审稿用词、不含引用标题如 L211、L224、L286。四、AST 静态防线测试如何锁定安全属性安全验证记录中显式 AST 解析禁用字节码的承诺在 test_scripts.py 的test_scripts_have_no_network_dynamic_execution_or_secret_access中有完整实现。该测试对 scripts 目录下每个 Python 脚本做 AST 遍历断言无网络库导入aiohttp、httpx、requests、socket、urllib、webbrowser等一律禁止无可执行序列化/动态执行dill、marshal、pickle、shelve、subprocess禁止导入eval/exec/compile/__import__禁止调用无环境凭据访问os.environ与os.getenv属性访问被 AST 层拒绝无外部服务痕迹源码中不得出现openrouter、.env、api_key等字符串。同一测试文件还断言技能本身不再涉及OPENROUTER、generate_schematic、scientific-schematics、venue-templates等外部技能耦合L373-L382与不再有跨技能调用的整改目标一致。五、验证结果完整 PASS 记录整改后的验证矩阵如下全部通过验证项结果Agent Skills 参考校验器reference validatorPASS无依赖 CLI--help检查PASS合成标准库测试26 passed显式 AST 解析禁用字节码8 个脚本解析字节码产物0IDE 静态检查0文档内本地路径链接测试PASSMarkdown 链接检查PASS受控 HTTP 403 视为可达直接行为安全扫描SAFE0 项发现PR 门禁--fail-on HIGHPASSCRITICAL 0 / HIGH 0 / LOW 3其中26 项通过与8 个脚本解析可从当前仓库印证测试文件覆盖 intake 校验、报告指南选择、claim–evidence 矩阵、统计可复现性、引文审计、scaffold 与 lint、文件安全与静态检查共七个测试类而 scripts 目录 恰好包含 8 个.py文件_common.py、audit_citations.py、audit_statistics_reproducibility.py、generate_review_scaffold.py、lint_review.py、select_reporting_guidelines.py、validate_claim_evidence.py、validate_review_intake.py。六、残余 LOW 发现逐条分析与接受理由最终 LLM 辅助的 PR 扫描报告了 3 项 LOW 发现均被判定为可接受的信息性观察没有任何一项允许数据传输或凭据访问缺少allowed-tools声明信息性该字段在 Agent Skills 规范下是可选项。技能的兼容性声明与正文已明确将捆绑工具限制为仅用本地标准库处理无网络、模型、图像、凭据或环境访问。description 较宽泛已接受作为有边界的能力描述被接受。因为强制的授权与期刊政策门禁发生在读取机密内容之前且技能正文将全部功能限定于同行评审评估。有界 CSV/JSON 处理防御性观察无需处理输入已被限制为 4 MiB、5,000 行 CSV、每单元格 12,000 字符与有限列表大小且测试已覆盖超限拒绝。结论无 CRITICAL 或 HIGH 问题残留none of the LOW findings 允许数据传输或凭据访问。七、复现指南如何自行验证安全验证记录给出了四条可复现的命令在仓库根目录执行# 1) 运行全部单元测试禁用字节码写入覆盖 AST 静态断言与功能测试 PYTHONDONTWRITEBYTECODE1 python3 -m unittest discover \ -s tests/peer-review -p test_*.py -v # 2) 用 Agent Skills 参考校验器验证技能结构合规 uv run skills-ref validate skills/peer-review # 3) 行为安全扫描 uv run skill-scanner scan skills/peer-review --use-behavioral # 4) PR 门禁扫描存在 HIGH 及以上发现时以非零码退出 uv run python scan_pr_skills.py \ --fail-on HIGH \ --output /tmp/peer-review-pr-scan.md \ skills/peer-review7.1 PR 门禁的行为语义第 4 条命令调用的 scan_pr_skills.py 是仓库的 PR 安全门禁工具它对传入的技能目录逐个扫描跳过无SKILL.md的目录并将结果格式化为可在 PR 上发布的 sticky comment。其--fail-on参数L206-L211可取值CRITICAL/HIGH/MEDIUM/LOW/NEVER_should_blockL187-L195按严重级别排序表[CRITICAL, HIGH, MEDIUM, LOW, INFO, SAFE]判断是否阻断。这就是验证记录中--fail-on HIGH时 CRITICAL 0 / HIGH 0 / LOW 3 仍通过的原因——LOW 低于阻断阈值。7.2 行为扫描中的注意事项行为扫描依赖 LLM 分析器需要SKILL_SCANNER_LLM_API_KEY环境变量来自 fork 的pull_request工作流拿不到仓库 secrets此时工具会fail open并写入一段说明性注释scan_pr_skills.py这不代表 diff 存在安全问题。因此对 PR 门禁结果需要结合仓库的 安全扫描分流记录 理解——该文件明确强调报告中的一条发现是去复核技能的提示而不是技能恶意的判定并记录了若干系统性误报类别如规则匹配eval/exec子串、把服务认证误报为外泄等。八、与仓库级安全体系的衔接本次 peer-review 整改是仓库整体安全治理的一个样本可对照以下机制理解其上下文SECURITY.md 定义了范围内外判定技能执行其文档化工作的固有能力的范围之外如 API Key 用于其服务的身份认证而读取凭据并传输到意外目的地在范围内——这解释了本次整改为何聚焦于删除示意图脚本的凭据读取与网络传输而非技能本身的评审功能。docs/security-triage.md 维护了已验证并修复与系统性误报两类判定并提供一个可在全仓库验证eval/exec/os.system/os.environ等风险调用点的 AST 片段。每周增量扫描机制记录每项技能的上次扫描时间peer-review 的security_validation.md明确说明仓库级SECURITY.md未被本次局部整改编辑其快照会通过正常扫描流程自动更新。结语peer-review 技能的安全整改给出了一个可复用的 Agent Skill 加固范式凡是不服务于核心评审功能的外向能力网络、模型、图像、凭据、跨技能调用一律删除凡是必须保留的输入输出一律加有界校验与原子私有处理凡是安全承诺一律写成 AST 断言与行为扫描可验证的测试。从10 项发现、最高 CRITICAL到0 CRITICAL / 0 HIGH、仅 3 项 LOW 信息性观察整个过程可复现、可审计、可追溯到具体文件与测试用例这正是 security_validation.md 作为技能安全档案的价值所在。【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表