mcpField
A
agent-security-scanning

agent-security-scanning

github.com/itallstartedwithaidea安全4475 次安装28 周前更新
代码仓库

关于 agent-security-scanning

Agent Security Scanning 是用于审查 AI 生成代码和 Agent 应用的安全技能,结合静态分析、依赖检查与 Agent 威胁建模,并提供严重性、CWE 分类及修复示例。

主要功能

  1. 01静态分析代码漏洞
  2. 02扫描依赖中的已知 CVE
  3. 03Agent 威胁建模
  4. 04按严重性和 CWE 分类发现
  5. 05提供代码修复示例

适用场景

  1. 01部署前审查生成的代码
  2. 02安装后检查依赖
  3. 03审计 Agent 工具调用风险
  4. 04在 CI/CD 中设置安全门禁

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill agent-security-scanning

安装后在 Claude Code 中输入/agent-security-scanning确认已加载。

详细介绍

Agent 安全扫描

Agent Skills™ 的一部分,由 googleadsagent.ai™ 提供

描述

Agent 安全扫描可在 AI 生成的代码进入生产环境之前检测其中的漏洞。该 Agent 会应用 OWASP Top 10 for LLM Applications,扫描依赖项中的已知 CVE,识别提示词注入向量,并标记 AI Agent 生成代码中特有的不安全模式,例如未经清理的动态 SQL、eval() 的使用以及未经验证的反序列化。

AI 代码生成器生成的代码虽然“能运行”,但经常包含功能测试无法发现的安全漏洞。研究表明,AI 生成的代码比人工编写的代码更容易包含可利用的漏洞,尤其是在输入验证、身份验证和加密操作方面。此技能专门针对 AI Agent 生成代码的模式进行了安全分析校准。

扫描流程涵盖三个层面:生成代码的静态分析(注入、XSS、SSRF)、依赖项漏洞扫描(匹配 CVE 数据库),以及 Agent 专属威胁建模(提示词注入、工具误用、通过工具调用窃取数据)。每项发现都包含严重性评级、CWE 分类,以及附有代码示例的具体修复方案。

适用场景

  • 在提交或部署前审查 AI 生成的代码
  • 在运行 npm install 或 pip install 后扫描依赖项中的已知 CVE
  • 审计 Agent 工具调用模式,排查潜在误用
  • 在 CI/CD 流水线中实现安全门禁
  • 用户请求安全审查、漏洞扫描或渗透测试时
  • 构建处理用户输入、身份验证或支付的应用程序

工作原理

graph TD
    A[AI-Generated Code] --> B[Layer 1: Static Analysis]
    B --> C[Injection: SQL, XSS, SSRF, Command]
    B --> D[Auth: Hardcoded Secrets, Weak Crypto]
    B --> E[Data: PII Exposure, Logging Secrets]
    A --> F[Layer 2: Dependency Scan]
    F --> G[CVE Database Match]
    F --> H[License Compliance]
    A --> I[Layer 3: Agent Threat Model]
    I --> J[Prompt Injection Vectors]
    I --> K[Tool Call Audit]
    I --> L[Data Exfiltration Paths]
    C --> M[Severity Classification + CWE]
    D --> M
    E --> M
    G --> M
    J --> M
    K --> M
    L --> M
    M --> N[Remediation Report]

三层扫描会并行运行。静态分析可发现代码层面的漏洞,依赖项扫描可发现已知 CVE,Agent 威胁建模则可发现 AI 驱动应用中特有的风险。

实现

import re
from dataclasses import dataclass

@dataclass
class SecurityFinding:
    severity: str  # CRITICAL, HIGH, MEDIUM, LOW
    cwe: str
    title: str
    file: str
    line: int
    description: str
    remediation: str

class AgentSecurityScanner:
    PATTERNS = [
        {
            "name": "SQL Injection",
            "pattern": r'f["\'].*(?:SELECT|INSERT|UPDATE|DELETE).*\{.*\}',
            "severity": "CRITICAL",
            "cwe": "CWE-89",
            "remediation": "Use parameterized queries instead of string interpolation",
        },
        {
            "name": "Command Injection",
            "pattern": r'(?:os\.system|subprocess\.call|exec)\s*\(.*(?:f["\']|\+\s*\w)',
            "severity": "CRITICAL",
            "cwe": "CWE-78",
            "remediation": "Use subprocess with list args, never shell=True with user input",
        },
        {
            "name": "Hardcoded Secret",
            "pattern": r'(?:password|secret|api_key|token)\s*=\s*["\'][^"\']{8,}["\']',
            "severity": "HIGH",
            "cwe": "CWE-798",
            "remediation": "Use environment variables or a secrets manager",
        },
        {
            "name": "Eval Usage",
            "pattern": r'\beval\s*\(',
            "severity": "HIGH",
            "cwe": "CWE-95",
            "remediation": "Use ast.literal_eval for data, or a sandboxed interpreter",
        },
        {
            "name": "Insecure Deserialization",
            "pattern": r'pickle\.loads?\s*\(',
            "severity": "HIGH",
            "cwe": "CWE-502",
            "remediation": "Use JSON or msgpack instead of pickle for untrusted data",
        },
    ]

    def scan_file(self, filepath: str, content: str) -> list[SecurityFinding]:
        findings = []
        for i, line in enumerate(content.splitlines(), 1):
            for pattern in self.PATTERNS:
                if re.search(pattern["pattern"], line, re.IGNORECASE):
                    findings.append(SecurityFinding(
                        severity=pattern["severity"],
                        cwe=pattern["cwe"],
                        title=pattern["name"],
                        file=filepath,
                        line=i,
                        description=f"Detected {pattern['name']} pattern",
                        remediation=pattern["remediation"],
                    ))
        return findings

    def scan_dependencies(self, lockfile: str) -> list[SecurityFinding]:
        """Scan package lockfile against CVE databases."""
        # Delegates to `npm audit` or `pip-audit`
        pass

    def scan_agent_threats(self, tool_calls: list[dict]) -> list[SecurityFinding]:
        findings = []
        for call in tool_calls:
            if call["tool"] == "Shell" and any(
                dangerous in call.get("command", "")
                for dangerous in ["rm -rf", "curl | sh", "wget | bash", "> /dev/"]
            ):
                findings.append(SecurityFinding(
                    severity="CRITICAL", cwe="CWE-78",
                    title="Dangerous Shell Command",
                    file="agent_session", line=0,
                    description=f"Agent issued dangerous command: {call['command'][:100]}",
                    remediation="Restrict agent shell access to an allowlist of safe commands",
                ))
        return findings

最佳实践

  • 对每项 AI 生成的代码变更都运行安全扫描,而不只是对人工编写的代码运行
  • 按 CWE 对发现进行分类,以便标准化跟踪和报告
  • 对 CRITICAL 和 HIGH 级别的发现阻止合并;在后续工单中跟踪 MEDIUM 级别的发现
  • 每周扫描依赖项,而不只是安装时扫描——每天都会发布新的 CVE
  • 审计 Agent 工具调用中的危险模式(删除文件、网络访问、eval)
  • 维护一份已确认误报的抑制列表,并注明到期日期

平台兼容性

平台支持情况备注
Cursor完全支持集成提交前检查和 CI
VS Code完全支持安全扩展生态系统
Windsurf完全支持支持安全扫描
Claude Code完全支持代码审查与扫描
Cline完全支持安全感知审查
aider部分支持代码级扫描

相关技能

  • CodeQL & Semgrep - 通过数据流跟踪进行深度静态分析,发现基于正则表达式的扫描会漏掉的漏洞
  • Secret Protection - 在提交前、CI/CD 和运行时各层防止凭据泄露
  • Sandbox Hardening - 通过执行隔离,限制任何逃过扫描的漏洞造成的影响范围
  • Code Review - 结构化质量门禁,将安全审查作为核心评估维度之一

关键词

security-scanning owasp cve vulnerability-detection prompt-injection agent-security static-analysis dependency-audit


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

评论

支持 Markdown