skills/security-code-review/SKILL.md
多语言安全代码审查 (Security Code Review)。对 Python、C++、Shell、Markdown 文件进行系统性安全漏洞检测与修复指导。覆盖 OWASP Top 10、CWE Top 25、CERT 安全编码标准。当用户提及以下内容时,务必使用此技能:安全审查、安全代码审查、security review、code review 中的安全检查、漏洞扫描、安全合规检查(CWE/CERT/OWASP)、编写安全代码、检查代码安全性、推理服务安全审计、多模态 Token 安全校验、JSON 嵌套深度攻击防护。即使用户没有明确说'安全审查',只要涉及代码安全性评估、漏洞检测、安全最佳实践,都应触发此技能。
npx skillsauth add Ascend/agent-skills security-code-reviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
执行安全审查时,按以下步骤进行:
references/ 下的详细审查指南references/lessons-learned.md 排查已知问题模式详细代码示例和安全/不安全对比:读取
references/python.md
审查覆盖的 10 个关键领域:
| # | 领域 | 核心风险 | 关键搜索模式 |
|---|------|---------|-------------|
| 1 | 代码注入 | 任意代码执行 | eval(, exec(, shell=True |
| 2 | SQL 注入 | 数据泄露/篡改 | f"SELECT, cursor.execute(f" |
| 3 | 反序列化 | RCE | pickle.loads, yaml.load( (无 safe_load) |
| 4 | 路径遍历 | 任意文件读取 | os.path.join( + 用户输入, 无 realpath 校验 |
| 5 | 敏感信息泄露 | 密钥暴露 | 硬编码 API_KEY=, PASSWORD=, logger.*(password |
| 6 | assert 误用 | 权限绕过 | assert user.is_admin, assert.*auth |
| 7 | 临时文件 | 竞态/符号链接攻击 | open("/tmp/ (未用 tempfile) |
| 8 | ReDoS | CPU 耗尽 | (a+)+, (.*)*, 嵌套量词 |
| 9 | JSON 嵌套深度 | 栈溢出/资源耗尽 | json.loads( 无深度限制 (CWE-674, CWE-400) |
| 10 | 特殊 Token 注入 | 进程崩溃/DoS | np.where(np.equal(input_ids, 无配对校验 (CWE-129, CWE-248) |
Python 安全工具:
| 工具 | 用途 | 命令 |
|------|------|------|
| bandit | 静态安全分析 | bandit -r src/ |
| pip-audit | 依赖漏洞扫描 | pip-audit |
| pylint | 代码质量 + 部分安全规则 | pylint src/ |
| mypy | 类型检查,防止类型混淆 | mypy src/ |
| semgrep | 自定义安全规则 | semgrep --config=p/python |
详细代码示例和安全/不安全对比:读取
references/cpp.md
审查覆盖的 11 个关键领域:
| # | 领域 | 核心风险 | 关键搜索模式 |
|---|------|---------|-------------|
| 1 | 缓冲区溢出 | 代码执行 | strcpy(, sprintf(, gets( |
| 2 | 内存管理 | UAF/Double-free | new/delete (非智能指针), raw pointer |
| 3 | 整数溢出 | 缓冲区分配错误 | new char[size] 无范围检查 |
| 4 | 格式化字符串 | 内存读写 | printf(user_input), fprintf(stderr, var) |
| 5 | 未初始化变量 | 未定义行为 | 声明后未赋值即使用 |
| 6 | RAII/资源泄漏 | 资源耗尽 | fopen/fclose, mutex.lock()/.unlock() |
| 7 | 线程安全 | 数据竞争 | 非 atomic 跨线程变量, 无锁共享数据 |
| 8 | 类型转换 | 类型混淆 | C 风格强转 (Type*)ptr, 尤其是向下转型 |
| 9 | JSON 嵌套深度 | 栈溢出 | nlohmann::json::parse( 无深度限制 (CWE-674) |
| 10 | 服务资源上限 | OOM | 配置参数组合峰值内存超物理内存 (CWE-400, CWE-770) |
| 11 | 特殊 Token 注入 | 段错误/崩溃 | Token 配对假设, 固定偏移访问 (CWE-129, CWE-248) |
C++ 安全工具:
| 工具 | 用途 | 命令/用法 |
|------|------|----------|
| AddressSanitizer | 内存错误检测 | -fsanitize=address |
| ThreadSanitizer | 数据竞争检测 | -fsanitize=thread |
| UBSanitizer | 未定义行为检测 | -fsanitize=undefined |
| Valgrind | 内存泄漏检测 | valgrind --leak-check=full ./app |
| cppcheck | 静态分析 | cppcheck --enable=all src/ |
| clang-tidy | Linter + 安全规则 | clang-tidy -checks='*' src/*.cpp |
| Coverity | 企业级静态分析 | CI 集成 |
详细代码示例和安全/不安全对比:读取
references/shell.md
审查覆盖的 8 个关键领域:
| # | 领域 | 核心风险 | 关键搜索模式 |
|---|------|---------|-------------|
| 1 | 脚本头部 | 静默失败 | 缺少 set -euo pipefail |
| 2 | 变量引用 | 命令注入/误删 | $var (未用 "$var") |
| 3 | 命令注入 | 任意命令执行 | eval "$user_input" |
| 4 | 临时文件 | 竞态条件 | > /tmp/fixed_name (未用 mktemp) |
| 5 | 权限 | 未授权访问 | chmod 777, chmod 666 |
| 6 | PATH 安全 | 路径劫持 | 关键命令未用绝对路径 |
| 7 | 信号处理 | 资源泄漏 | 缺少 trap cleanup EXIT |
| 8 | 输入验证 | 路径遍历 | 未校验的 $filename 直接 cat |
Shell 安全工具:
| 工具 | 用途 | 命令 |
|------|------|------|
| ShellCheck | Shell 脚本静态分析 | shellcheck script.sh |
| shfmt | Shell 格式化 | shfmt -d script.sh |
详细代码示例和安全/不安全对比:读取
references/markdown.md
审查覆盖的 4 个关键领域:
| # | 领域 | 核心风险 | 关键搜索模式 |
|---|------|---------|-------------|
| 1 | XSS 注入 | 脚本执行 | <script>, <iframe>, onerror=, onmouseover= |
| 2 | 链接安全 | XSS/钓鱼 | javascript:, data:, vbscript: |
| 3 | 敏感信息 | 密钥泄露 | sk-, ghp_, AKIA, 内部 IP/URL |
| 4 | 图片安全 | 追踪/DoS | 外部追踪像素, 超大图片 |
完整案例分析和排查清单:读取
references/lessons-learned.md
审查推理服务引擎代码时,重点排查以下已知问题模式:
| 编号 | 问题 | 严重级别 | 核心教训 |
|------|------|---------|---------|
| SEC-EXP-001 | 配置参数组合导致 OOM | CRITICAL | 峰值内存 = maxReqs × bodyLimit × JSON放大系数,各参数独立合理但组合后超出物理内存 |
| SEC-EXP-002 | <\|begin_of_image\|> 无 <\|end_of_image\|> 导致 DoS | CRITICAL | 假设特殊 Token 成对出现,未校验即用硬索引访问 |
| SEC-EXP-003 | <\|vision_start\|><\|video_pad\|><\|vision_end\|> 打破格式假设 | CRITICAL | 假设 Token 序列遵循私有协议格式,用固定偏移取值导致越界 |
eval()/exec()、Shell eval、C++ 无等价物但禁止动态代码生成.env、私钥、证书不得提交到版本控制chmod 777、0.0.0.0 无限制监听gets(), sprintf(), strcpy() 等- [ ] 无 eval()/exec() 使用不受信任的输入
- [ ] 无 pickle.loads() 加载不受信任的数据
- [ ] 使用 yaml.safe_load() 替代 yaml.load()
- [ ] subprocess 调用不使用 shell=True
- [ ] SQL 查询使用参数化方式
- [ ] 文件路径操作有路径遍历防护
- [ ] 无硬编码的密钥/密码
- [ ] 日志不记录敏感信息
- [ ] 未使用 assert 进行安全/权限相关检查
- [ ] 依赖已通过 pip-audit/bandit 扫描
- [ ] 正则表达式无 ReDoS 风险
- [ ] 临时文件使用 tempfile 模块
- [ ] JSON 请求解析入口有嵌套深度限制(建议 ≤ 32 层)
- [ ] 递归遍历 JSON 数据结构有深度保护
- [ ] 多模态特殊 Token(begin/end_of_image、vision_start/end 等)校验了配对完整性,不假设成对出现
- [ ] 推理请求处理路径有框架层 IndexError/ValueError/KeyError 兜底捕获,防止单请求异常导致进程崩溃
- [ ] 无缓冲区溢出风险 (strcpy → strncpy/std::string)
- [ ] 使用智能指针管理内存
- [ ] 无 use-after-free / double-free
- [ ] 整数运算有溢出检查
- [ ] printf 系列函数使用固定格式字符串
- [ ] 所有变量在使用前初始化
- [ ] 资源管理遵循 RAII 原则
- [ ] 多线程代码无数据竞争
- [ ] 使用 C++ 风格类型转换 (static_cast/dynamic_cast)
- [ ] 编译启用安全选项 (-Wall -Werror -fsanitize=address)
- [ ] JSON 请求解析入口有嵌套深度限制(建议 ≤ 32 层)
- [ ] 递归遍历 JSON 数据结构有深度参数并设上限
- [ ] 服务配置参数组合后峰值内存不超过部署环境可用内存(考虑 JSON 放大系数)
- [ ] 存在运行时内存水位监控或请求准入控制机制
- [ ] 多模态特殊 Token(boi/eoi、vision_start/end 等)校验了配对完整性和序列格式,不做隐式格式假设
- [ ] model forward / pre-processing 路径有框架层 std::out_of_range/std::invalid_argument 兜底 catch,防止进程崩溃
- [ ] 脚本使用 set -euo pipefail
- [ ] 所有变量使用双引号包裹 ("$var")
- [ ] 无 eval 使用用户输入
- [ ] 临时文件使用 mktemp
- [ ] 文件权限不超过 755(脚本)/ 644(配置)
- [ ] 关键命令使用绝对路径
- [ ] 有 trap 清理机制
- [ ] 输入经过验证和过滤
- [ ] 通过 ShellCheck 无警告
- [ ] 不使用 . 或空目录在 PATH 中
- [ ] 无内嵌 <script>/<iframe> 标签
- [ ] 无 javascript:/data: 协议链接
- [ ] 无硬编码密钥/密码/Token
- [ ] 无内部 IP 地址或内部 URL 泄露
- [ ] 外部图片来源可信
- [ ] 无追踪像素
| 语言 | 工具 | 类型 | 说明 | |------|------|------|------| | Python | bandit | 静态分析 | Python 安全漏洞检测 | | Python | pip-audit | 依赖扫描 | Python 依赖漏洞检查 | | Python | semgrep | 规则引擎 | 自定义安全规则匹配 | | Python | mypy | 类型检查 | 类型安全,防止类型混淆 | | C++ | AddressSanitizer | 运行时检测 | 内存错误检测 | | C++ | ThreadSanitizer | 运行时检测 | 数据竞争检测 | | C++ | cppcheck | 静态分析 | C/C++ 静态分析 | | C++ | clang-tidy | Linter | 代码质量 + 安全规则 | | C++ | Valgrind | 运行时检测 | 内存泄漏检测 | | Shell | ShellCheck | 静态分析 | Shell 脚本安全分析 | | 通用 | git-secrets | 预提交钩子 | 防止提交密钥 | | 通用 | trufflehog | 密钥扫描 | 扫描代码中的密钥 | | 通用 | gitleaks | 密钥扫描 | Git 仓库密钥泄露检测 | | Markdown | markdownlint | Linter | Markdown 格式检查 |
当使用此 Skill 对代码仓库执行安全审查(即参数包含 review 关键字)时,完成所有审查后自动将结果保存为 CSV 文件。这是审查流程的最终必要步骤。
文件名: security_code_review_report.csv
保存位置: 被审查的代码仓库根目录下(即 review <path> 中的 <path> 下)
编码: UTF-8
CSV 必须包含以下 9 列(表头固定):
编号,严重级别,漏洞类别,语言,文件路径,行号,问题描述,风险说明,建议修复方案
| 列名 | 说明 | 示例值 |
|------|------|--------|
| 编号 | 唯一编号,格式为 严重级别首字母-序号 | C-01, H-05, M-12, L-03 |
| 严重级别 | 四级:CRITICAL / HIGH / MEDIUM / LOW | CRITICAL |
| 漏洞类别 | 安全漏洞分类名称 | 命令注入, 不安全反序列化, 线程安全, 路径遍历 |
| 语言 | 代码语言/文件类型 | Python, C++, Shell, Markdown, Docker, Config |
| 文件路径 | 相对于仓库根目录的文件路径 | src/utils/file_utils.py |
| 行号 | 问题代码所在行号,多行用逗号分隔 | 79, 40-44, 220-232 |
| 问题描述 | 简明扼要描述发现的问题 | pickle.loads() 反序列化来自共享内存的数据 |
| 风险说明 | 说明该问题可能导致的安全风险 | 攻击者可注入恶意 pickle payload 实现 RCE |
| 建议修复方案 | 具体的修复建议和代码示例 | 用 json.loads() 替代 pickle.loads() |
"")审查完成后执行以下步骤:
编号,严重级别,漏洞类别,语言,文件路径,行号,问题描述,风险说明,建议修复方案
C-01,CRITICAL,不安全反序列化,Python,src/utils/share_memory.py,79,"pickle.loads() 反序列化来自共享内存的数据","攻击者可注入恶意 pickle payload 实现 RCE","用 json.loads() 替代 pickle.loads()"
H-01,HIGH,命令注入,Shell,scripts/run.sh,52,"eval 执行含用户输入的命令字符串","模型路径含 shell 元字符时可注入任意命令","改用 bash 数组构建命令, 消除 eval"
M-01,MEDIUM,线程安全,C++,src/thread_pool.h,45,"m_shutdown 为非原子 bool 跨线程读写","数据竞争导致工作线程可能无法退出","改为 std::atomic<bool>"
L-01,LOW,临时文件安全,Python,tests/test_utils.py,30,"硬编码 /tmp 路径","共享 CI 环境中符号链接攻击风险","使用 tempfile.mkdtemp()"
#security #code-review #python #cpp #shell #markdown #OWASP #CWEtesting
Kubernetes 集群健康检查与安全修复 — 诊断问题,用户确认后执行修复
tools
昇腾NPU CANN Toolkit+Kernels+NNAL安装部署技能。支持从官网下载run包安装和从Docker镜像提取两种方式,覆盖驱动检查、包下载、安装、环境变量配置与验证全流程。当用户需要安装CANN全套组件或指定版本CANN到自定义路径时调用。
development
编译 ATB (Ascend Transformer Boost) 测试框架。当用户需要编译 ATB 测试框架、 运行 CSV 测试、或构建 atb_test_framework 时调用。支持全量编译(含第三方依赖克隆与源替换) 和增量编译两种模式。需在 Docker 容器内配合 CANN 环境执行。
databases
ATB OPS→ACLNN 迁移标准化工作流主模板。整合前置学习、设计文档生成、CSV用例设计、 实际迁移、编译验证、测试验证全流程,提供明确的阶段 Gates 和用户确认机制。