{
  "executive_summary": {
    "badge": "Unsafe",
    "security_score": 25.0,
    "view": "composite",
    "scanner_badges": {
      "agentshield": "Verified",
      "cisco-skill-scanner": "Unsafe",
      "agent-audit-kit": "Unsafe",
      "bearer": "Verified",
      "trivy": "Unsafe",
      "osv-scanner": "Unsafe"
    },
    "finding_counts": {
      "critical": 0,
      "high": 48,
      "medium": 32,
      "low": 9
    },
    "recommendation": "mcp-project-manager is NOT recommended for integration: the scan surfaced 0 critical and 48 high-severity findings. Treat the Per-Scanner Detail section as a remediation worklist and re-scan before reconsidering."
  },
  "source_provenance": {
    "repository_url": "https://github.com/croffasia/mcp-project-manager",
    "commit_sha_scanned": null,
    "license": "MIT",
    "maintainer": "Andrii Poluosmak",
    "name": "mcp-project-manager",
    "version": "0.2.0"
  },
  "per_scanner_detail": [
    {
      "scanner_name": "agentshield",
      "scanner_version": "1.4.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 3.7705426290049218,
      "status": "complete",
      "metadata": {
        "source": "npm",
        "source_url": "https://www.npmjs.com/package/ecc-agentshield",
        "install_command": "npm install -g ecc-agentshield@1.4.0",
        "scans_performed": [
          "supply_chain"
        ]
      },
      "display_score": 100.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "cisco-skill-scanner",
      "scanner_version": "2.0.11",
      "score": 0.0,
      "scanner_badge": "Unsafe",
      "findings": [
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "policy_violation",
          "file_path": "/repo",
          "line_number": null,
          "rule_identifier": "LOW_ANALYZABILITY",
          "title": "Critically low analyzability score",
          "description": "Only 18% of skill content could be analyzed. 56 of 69 files are opaque to the scanner. The safety assessment has low confidence.",
          "remediation": "Replace opaque files (binaries, encrypted content) with inspectable source code to improve scan confidence."
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "obfuscation",
          "file_path": "/repo/.prettierrc.json",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: .prettierrc.json. Hidden files may contain concealed configuration or data that should be reviewed.",
          "remediation": "Move file to a visible location or document its purpose."
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "social_engineering",
          "file_path": "/repo/SKILL.md",
          "line_number": null,
          "rule_identifier": "SOCIAL_ENG_VAGUE_DESCRIPTION",
          "title": "Vague skill description",
          "description": "Skill description is too short (16 chars). Provide detailed explanation.",
          "remediation": "Provide a clear, detailed description of what the skill does and when to use it"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "policy_violation",
          "file_path": "/repo/SKILL.md",
          "line_number": null,
          "rule_identifier": "MANIFEST_MISSING_LICENSE",
          "title": "Skill does not specify a license",
          "description": "Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.",
          "remediation": "Add 'license' field to SKILL.md frontmatter (e.g., MIT, Apache-2.0)"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/cli/utils/database.ts",
          "line_number": 46,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.readFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/global-registry.ts",
          "line_number": 69,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.readFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/global-registry.ts",
          "line_number": 83,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.writeFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/global-registry.ts",
          "line_number": 108,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.readFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/storage.ts",
          "line_number": 212,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.readFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/storage.ts",
          "line_number": 474,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.readFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/storage.ts",
          "line_number": 487,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.writeFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/tools/init-project.ts",
          "line_number": 147,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.writeFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/tools/init-project.ts",
          "line_number": 243,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.readFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "high",
          "category": "data_exfiltration",
          "file_path": "/repo/src/tools/init-project.ts",
          "line_number": 261,
          "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
          "title": "Node.js filesystem access that could read or write sensitive data",
          "description": "Pattern detected: fs.readFile(",
          "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "social_engineering",
          "file_path": "/repo/docs/SKILL.md",
          "line_number": null,
          "rule_identifier": "SOCIAL_ENG_VAGUE_DESCRIPTION",
          "title": "Vague skill description",
          "description": "Skill description is too short (16 chars). Provide detailed explanation.",
          "remediation": "Provide a clear, detailed description of what the skill does and when to use it"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "policy_violation",
          "file_path": "/repo/docs/SKILL.md",
          "line_number": null,
          "rule_identifier": "MANIFEST_MISSING_LICENSE",
          "title": "Skill does not specify a license",
          "description": "Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.",
          "remediation": "Add 'license' field to SKILL.md frontmatter (e.g., MIT, Apache-2.0)"
        }
      ],
      "execution_duration_seconds": 22.179637865003315,
      "status": "complete",
      "metadata": {
        "source": "pypi",
        "source_url": "https://pypi.org/project/cisco-ai-skill-scanner/2.0.11/",
        "report_type": "cisco-skill-sast",
        "analyzers_used": [
          "bytecode",
          "pipeline",
          "static_analyzer"
        ],
        "skills_scanned": [
          "repo",
          "docs"
        ],
        "install_command": "pip install --require-hashes -r docker/scanner-base/cisco-skill-scanner/requirements.txt",
        "severity_counts": {
          "low": 3,
          "high": 11,
          "medium": 0,
          "critical": 0,
          "informational": 2
        }
      },
      "display_score": 0.0,
      "display_badge": "Unsafe"
    },
    {
      "scanner_name": "agent-audit-kit",
      "scanner_version": "0.3.26",
      "score": 0.0,
      "scanner_badge": "Unsafe",
      "findings": [
        {
          "tool_name": "agent-audit-kit",
          "severity": "low",
          "category": "supply-chain",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "AAK-SUPPLY-005",
          "title": "Dependency count exceeds threshold",
          "description": "More than 200 direct + transitive dependencies in lockfile. Each dependency is a trust decision.",
          "remediation": "Audit and remove unused dependencies. Consider lighter alternatives."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "low",
          "category": "supply-chain",
          "file_path": "SECURITY.md",
          "line_number": null,
          "rule_identifier": "AAK-SEC-MD-001",
          "title": "MCP server repo missing SECURITY.md or security_contact",
          "description": "A repository whose name or pyproject keywords declare it as an MCP server ships without a top-level SECURITY.md AND without a `security_contact` entry in marketplace.json / pyproject.toml / package.json. Anthropic's April 2026 SECURITY.md guidance makes this the baseline expectation so researchers have a channel.",
          "remediation": "Add SECURITY.md at the repo root with a disclosure email and response SLA; OR add `security_contact` to the project manifest."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/index.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/storage.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/tools/next-task.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/tools/create-task.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/tools/init-project.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/tools/get-task.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/tools/list-all-tasks.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/tools/update-task.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/prompts/start-task.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/cli/utils/database-manager.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/cli/screens/task-details/controller.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/cli/screens/task-details/view.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "mcp-config",
          "file_path": "src/cli/screens/task-details/model.ts",
          "line_number": null,
          "rule_identifier": "AAK-TASKS-003",
          "title": "MCP task has no TTL or cancellation path",
          "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
          "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "supply-chain",
          "file_path": "package.json",
          "line_number": 59,
          "rule_identifier": "AAK-OAUTH-3P-001",
          "title": "Repo depends on a third-party agent-platform SDK",
          "description": "The project depends on an agent-platform SDK (context-ai, langsmith, helicone, langfuse, humanloop, MCP SDK). Informational finding so reviewers audit the vendor's OAuth-scope footprint before merging. Raised to MEDIUM because the April 19 2026 Vercel \u00d7 Context.ai incident showed a single vendor compromise can turn into a production breach via transitive OAuth grants.",
          "remediation": "Pin the SDK to an exact version, audit the OAuth scopes it requests, and keep any deployment-level grants (Vercel, GCP, Workspace) in a secrets vault \u2014 never in a committed env file. See Vercel's bulletin for sensitive-env-var guidance: https://vercel.com/kb/bulletin/vercel-april-2026-security-incident"
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "high",
          "category": "supply-chain",
          "file_path": "src/index.ts",
          "line_number": null,
          "rule_identifier": "AAK-ANTHROPIC-SDK-001",
          "title": "MCP server built on the upstream SDK without STDIO sanitizer",
          "description": "Repository declares a dependency on the upstream Anthropic / ModelContextProtocol SDK (Python `mcp` / `modelcontextprotocol`, TS `@modelcontextprotocol/sdk`, Java `io.modelcontextprotocol:*`, Rust `mcp` / `modelcontextprotocol`) and exposes a STDIO transport (`StdioServerTransport`, `stdio_server`, etc.) without a sanitizer on argv assembly. Anthropic declined to CVE this as working as designed \u2014 sanitization is the developer's responsibility. The OX Security disclosure on 2026-04-15 rolled up L",
          "remediation": "Wrap every argv the STDIO transport builds in an allow-list sanitizer \u2014 `shlex.quote` in Python, `execFile` with an explicit argv array in Node, equivalent in Java/Rust. OR switch the transport off STDIO (`transports=['http']` / `['sse']`). If you have deliberately accepted the risk, add `accepts_stdio_risk: true` plus a `justification:` field in `.agent-audit-kit.yml`."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "high",
          "category": "supply-chain",
          "file_path": "package.json",
          "line_number": null,
          "rule_identifier": "AAK-DNS-REBIND-002",
          "title": "Vulnerable MCP SDK version pinned (DNS-rebinding fix missing)",
          "description": "A project dependency manifest (requirements.txt, pyproject.toml, package.json, pom.xml, build.gradle) pins an MCP SDK at a version below the DNS-rebinding fix. Patched versions: Python `mcp` >= 1.23.0, TS `@modelcontextprotocol/sdk` >= 1.21.1, Java `io.modelcontextprotocol.sdk:mcp-core` >= 0.11.0, `@apollo/mcp-server` >= 1.7.0. Even if the project never serves over StreamableHTTP itself, transitive servers built on the SDK inherit the bug.",
          "remediation": "Bump the SDK to the patched version listed in the rule title. If a bump is not yet possible, ensure every transport surface has its own Host-header allow-list (see AAK-DNS-REBIND-001 remediation)."
        }
      ],
      "execution_duration_seconds": 9.693543167988537,
      "status": "complete",
      "metadata": {
        "source": "pypi",
        "source_url": "https://pypi.org/project/agent-audit-kit/0.3.26/",
        "report_type": "agent-audit-kit-sast",
        "files_scanned": 66,
        "install_command": "pip install --require-hashes -r docker/scanner-base/agent-audit-kit/requirements.txt",
        "rules_evaluated": 211,
        "severity_counts": {
          "low": 2,
          "high": 2,
          "medium": 14,
          "critical": 0,
          "informational": 0
        }
      },
      "display_score": 0.0,
      "display_badge": "Unsafe"
    },
    {
      "scanner_name": "bearer",
      "scanner_version": "2.0.2",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 7.907046556996647,
      "status": "complete",
      "metadata": {
        "source": "github-releases",
        "source_url": "https://github.com/Bearer/bearer",
        "report_type": "security",
        "rules_loaded": 1,
        "install_command": "curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.sh | sh -s -- -b /usr/local/bin \"v2.0.2\""
      },
      "display_score": 100.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "trivy",
      "scanner_version": "0.71.0",
      "score": 0.0,
      "scanner_badge": "Unsafe",
      "findings": [
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2025-66414",
          "title": "Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default",
          "description": "MCP TypeScript SDK is the official TypeScript SDK for Model Context Protocol servers and clients. Prior to 1.24.0, The Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default for HTTP-based servers. When an HTTP-based MCP server is run on localhost without authentication with StreamableHTTPServerTransport or SSEServerTransport and has not enabled enableDnsRebindingProtection, a malicious website could exploit DNS rebinding to bypass same-origin policy rest",
          "remediation": "Upgrade @modelcontextprotocol/sdk from 1.15.1 to 1.24.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-0621",
          "title": "Anthropic's MCP TypeScript SDK has a ReDoS vulnerability",
          "description": "Anthropic's MCP TypeScript SDK versions up to and including 1.25.1 contain a regular expression denial of service (ReDoS) vulnerability in the UriTemplate class when processing RFC 6570 exploded array patterns. The dynamically generated regular expression used during URI matching contains nested quantifiers that can trigger catastrophic backtracking on specially crafted inputs, resulting in excessive CPU consumption. An attacker can exploit this by supplying a malicious URI that causes the Node.",
          "remediation": "Upgrade @modelcontextprotocol/sdk from 1.15.1 to 1.25.2 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-25536",
          "title": "@modelcontextprotocol/sdk: @modelcontextprotocol/sdk cross-client data leak",
          "description": "MCP TypeScript SDK is the official TypeScript SDK for Model Context Protocol servers and clients. From version 1.10.0 to 1.25.3, cross-client response data leak when a single McpServer/Server and transport instance is reused across multiple client connections, most commonly in stateless StreamableHTTPServerTransport deployments. This issue has been patched in version 1.26.0.",
          "remediation": "Upgrade @modelcontextprotocol/sdk from 1.15.1 to 1.26.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "low",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-3449",
          "title": "@tootallnate/once: @tootallnate/once: Denial of Service due to incorrect control flow scoping with AbortSignal",
          "description": "Versions of the package @tootallnate/once before 3.0.1 are vulnerable to Incorrect Control Flow Scoping in promise resolving when AbortSignal option is used. The Promise remains in a permanently pending state after the signal is aborted, causing any await or .then() usage to hang indefinitely. This can cause a control-flow leak that can lead to stalled requests, blocked workers, or degraded application availability.",
          "remediation": "Upgrade @tootallnate/once from 1.1.2 to 3.0.1, 2.0.1 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2025-69873",
          "title": "ajv: ReDoS via $data reference",
          "description": "ajv (Another JSON Schema Validator) before 8.18.0 is vulnerable to Regular Expression Denial of Service (ReDoS) when the $data option is enabled. The pattern keyword accepts runtime data via JSON Pointer syntax ($data reference), which is passed directly to the JavaScript RegExp() constructor without validation. An attacker can inject a malicious regex pattern (e.g., \"^(a|a)*$\") combined with crafted input to cause catastrophic backtracking. A 31-character payload causes approximately 44 seconds",
          "remediation": "Upgrade ajv from 6.12.6 to 8.18.0, 6.14.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2025-13466",
          "title": "body-parser: body-parser denial of service",
          "description": "body-parser 2.2.0 is vulnerable to denial of service due to inefficient handling of URL-encoded bodies with very large numbers of parameters. An attacker can send payloads containing thousands of parameters within the default 100KB request size limit, causing elevated CPU and memory usage. This can lead to service slowdown or partial outages under sustained malicious traffic.\nThis issue is addressed in version 2.2.1.",
          "remediation": "Upgrade body-parser from 2.2.0 to 2.2.1 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-33750",
          "title": "brace-expansion: brace-expansion: Denial of Service via zero step value in brace pattern",
          "description": "The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., `{1..2..0}`) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to `expand()` to ensure a step value of `0` is not used.",
          "remediation": "Upgrade brace-expansion from 1.1.12 to 5.0.5, 3.0.2, 2.0.3, 1.1.13 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-42338",
          "title": "ip-address: ip-address: Cross-site scripting via improper HTML escaping of untrusted input",
          "description": "ip-address is a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript. Prior to 10.1.1, Address6.group() and Address6.link() do not HTML-escape attacker-controlled content before embedding it in the HTML strings they return, and AddressError.parseMessage (emitted by the Address6 constructor for invalid input) can contain unescaped attacker-controlled content in one branch. An application that (1) passes untrusted input to Address6 and (2) renders the output of these methods,",
          "remediation": "Upgrade ip-address from 9.0.5 to 10.1.1 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-26996",
          "title": "minimatch: minimatch: Denial of Service via specially crafted glob patterns",
          "description": "minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Versions 10.2.0 and below are vulnerable to Regular Expression Denial of Service (ReDoS) when a glob pattern contains many consecutive * wildcards followed by a literal character that doesn't appear in the test string. Each * compiles to a separate [^/]*? regex group, and when the match fails, V8's regex engine backtracks exponentially across all possible splits. The time complexity is O(4^N) ",
          "remediation": "Upgrade minimatch from 3.1.2 to 10.2.1, 9.0.6, 8.0.5, 7.4.7, 6.2.1, 5.1.7, 4.2.4, 3.1.3 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-27903",
          "title": "minimatch: minimatch: Denial of Service due to unbounded recursive backtracking via crafted glob patterns",
          "description": "minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Prior to version 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3, `matchOne()` performs unbounded recursive backtracking when a glob pattern contains multiple non-adjacent `**` (GLOBSTAR) segments and the input path does not match. The time complexity is O(C(n, k)) -- binomial -- where `n` is the number of path segments and `k` is the number of globstars. With k=11 and n=30, a call",
          "remediation": "Upgrade minimatch from 3.1.2 to 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, 3.1.3 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-27904",
          "title": "minimatch: Minimatch: Denial of Service via catastrophic backtracking in glob expressions",
          "description": "minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Prior to version 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.4, nested `*()` extglobs produce regexps with nested unbounded quantifiers (e.g. `(?:(?:a|b)*)*`), which exhibit catastrophic backtracking in V8. With a 12-byte pattern `*(*(*(a|b)))` and an 18-byte non-matching input, `minimatch()` stalls for over 7 seconds. Adding a single nesting level or a few input characters pushe",
          "remediation": "Upgrade minimatch from 3.1.2 to 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, 3.1.4 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-4926",
          "title": "path-to-regexp: path-to-regexp: Denial of Service via crafted regular expressions",
          "description": "Impact:\n\nA bad regular expression is generated any time you have multiple sequential optional groups (curly brace syntax), such as `{a}{b}{c}:z`. The generated regex grows exponentially with the number of groups, causing denial of service.\n\nPatches:\n\nFixed in version 8.4.0.\n\nWorkarounds:\n\nLimit the number of sequential optional groups in route patterns. Avoid passing user-controlled input as route patterns.",
          "remediation": "Upgrade path-to-regexp from 8.2.0 to 8.4.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-4923",
          "title": "path-to-regexp: path-to-regexp: Denial of Service via specially crafted paths with multiple wildcards",
          "description": "Impact:\n\nWhen using multiple wildcards, combined with at least one parameter, a regular expression can be generated that is vulnerable to ReDoS. This backtracking vulnerability requires the second wildcard to be somewhere other than the end of the path.\n\nUnsafe examples:\n\n/*foo-*bar-:baz\n/*a-:b-*c-:d\n/x/*a-:b/*c/y\n\nSafe examples:\n\n/*foo-:bar\n/*foo-:bar-*baz\n\nPatches:\n\nUpgrade to version 8.4.0.\n\nWorkarounds:\n\nIf you are using multiple wildcard parameters, you can check the regex output with a too",
          "remediation": "Upgrade path-to-regexp from 8.2.0 to 8.4.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2025-15284",
          "title": "qs: qs: Denial of Service via improper input validation in array parsing",
          "description": "Improper Input Validation vulnerability in qs (parse modules) allows HTTP DoS.This issue affects qs: < 6.14.1.\n\n\nSummary\n\nThe arrayLimit\u00a0option in qs did not enforce limits for bracket notation (a[]=1&a[]=2), only for indexed notation (a[0]=1). This is a consistency bug; arrayLimit\u00a0should apply uniformly across all array notations.\n\nNote:\u00a0The default parameterLimit\u00a0of 1000 effectively mitigates the DoS scenario originally described. With default options, bracket notation cannot produce arrays la",
          "remediation": "Upgrade qs from 6.14.0 to 6.14.1 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-8723",
          "title": "### Summary    `qs.stringify` throws `TypeError` when called with `arr ...",
          "description": "### Summary\n\n\n\n`qs.stringify` throws `TypeError` when called with `arrayFormat: 'comma'` and `encodeValuesOnly: true` on an array containing `null` or `undefined`. The throw is synchronous and not handled by any of qs's null-related options (`skipNulls`, `strictNullHandling`).\n\n\n\n### Details\n\n\n\nIn the comma + `encodeValuesOnly` branch, `lib/stringify.js:145` mapped the array through the raw encoder before joining:\n\n\n\n```js\n\n\n\nobj = utils.maybeMap(obj, encoder);\n\n\n\n```\n\n\n\n`utils.encode` (`lib/uti",
          "remediation": "Upgrade qs from 6.14.0 to 6.15.2 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "low",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-2391",
          "title": "qs: qs's arrayLimit bypass in comma parsing allows denial of service",
          "description": "### Summary\nThe `arrayLimit` option in qs does not enforce limits for comma-separated values when `comma: true` is enabled, allowing attackers to cause denial-of-service via memory exhaustion. This is a bypass of the array limit enforcement, similar to the bracket notation bypass addressed in GHSA-6rw7-vpxm-498p (CVE-2025-15284).\n\n### Details\nWhen the `comma` option is set to `true` (not the default, but configurable in applications), qs allows parsing comma-separated strings as arrays (e.g., `?",
          "remediation": "Upgrade qs from 6.14.0 to 6.14.2 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-23745",
          "title": "node-tar: tar: node-tar: Arbitrary file overwrite and symlink poisoning via unsanitized linkpaths in archives",
          "description": "node-tar is a Tar for Node.js. The node-tar library (<= 7.5.2) fails to sanitize the linkpath of Link (hardlink) and SymbolicLink entries when preservePaths is false (the default secure behavior). This allows malicious archives to bypass the extraction root restriction, leading to Arbitrary File Overwrite via hardlinks and Symlink Poisoning via absolute symlink targets. This vulnerability is fixed in 7.5.3.",
          "remediation": "Upgrade tar from 6.2.1 to 7.5.3 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-23950",
          "title": "node-tar: tar: node-tar: Arbitrary file overwrite via Unicode path collision race condition",
          "description": "node-tar,a Tar for Node.js, has a race condition vulnerability in versions up to and including 7.5.3. This is due to an incomplete handling of Unicode path collisions in the `path-reservations` system. On case-insensitive or normalization-insensitive filesystems (such as macOS APFS, In which it has been tested), the library fails to lock colliding paths (e.g., `\u00df` and `ss`), allowing them to be processed in parallel. This bypasses the library's internal concurrency safeguards and permits Symlink",
          "remediation": "Upgrade tar from 6.2.1 to 7.5.4 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-24842",
          "title": "node-tar: tar: node-tar: Arbitrary file creation via path traversal bypass in hardlink security check",
          "description": "node-tar,a Tar for Node.js, contains a vulnerability in versions prior to 7.5.7 where the security check for hardlink entries uses different path resolution semantics than the actual hardlink creation logic. This mismatch allows an attacker to craft a malicious TAR archive that bypasses path traversal protections and creates hardlinks to arbitrary files outside the extraction directory. Version 7.5.7 contains a fix for the issue.",
          "remediation": "Upgrade tar from 6.2.1 to 7.5.7 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-26960",
          "title": "node-tar: node-tar: Arbitrary file read/write via malicious archive hardlink creation",
          "description": "node-tar is a full-featured Tar for Node.js. When using default options in versions 7.5.7 and below, an attacker-controlled archive can create a hardlink inside the extraction directory that points to a file outside the extraction root, enabling arbitrary file read and write as the extracting user. Severity is high because the primitive bypasses path protections and turns archive extraction into a direct filesystem access primitive. This issue has been fixed in version 7.5.8.",
          "remediation": "Upgrade tar from 6.2.1 to 7.5.8 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-29786",
          "title": "node-tar: hardlink path traversal via drive-relative linkpath",
          "description": "node-tar is a full-featured Tar for Node.js. Prior to version 7.5.10, tar can be tricked into creating a hardlink that points outside the extraction directory by using a drive-relative link target such as C:../target.txt, which enables file overwrite outside cwd during normal tar.x() extraction. This issue has been patched in version 7.5.10.",
          "remediation": "Upgrade tar from 6.2.1 to 7.5.10 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-31802",
          "title": "tar: tar: File overwrite via drive-relative symlink traversal",
          "description": "node-tar is a full-featured Tar for Node.js. Prior to version 7.5.11, tar (npm) can be tricked into creating a symlink that points outside the extraction directory by using a drive-relative symlink target such as C:../../../target.txt, which enables file overwrite outside cwd during normal tar.x() extraction. This vulnerability is fixed in 7.5.11.",
          "remediation": "Upgrade tar from 6.2.1 to 7.5.11 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-53655",
          "title": "node-tar: node-tar: File smuggling due to inconsistent tar archive parsing",
          "description": "node-tar is a full-featured Tar for Node.js. Prior to 7.5.16, tar (node-tar) applies a PAX extended header's size= record (and other PAX overrides) to the next header entry of any type, including intermediary metadata headers such as a GNU long-name (L) or long-link (K) entry. Per POSIX pax, a PAX extended header (x) describes the next file entry, not the intermediary extension headers that may sit between the x header and the file it annotates. Because node-tar lets the PAX size override the by",
          "remediation": "Upgrade tar from 6.2.1 to 7.5.16 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2025-59343",
          "title": "tar-fs: tar-fs symlink validation bypass",
          "description": "tar-fs provides filesystem bindings for tar-stream. Versions prior to 3.1.1, 2.1.3, and 1.16.5 are vulnerable to symlink validation bypass if the destination directory is predictable with a specific tarball. This issue has been patched in version 3.1.1, 2.1.4, and 1.16.6. A workaround involves using the ignore option on non files/directories.",
          "remediation": "Upgrade tar-fs from 2.1.3 to 3.1.1, 2.1.4, 1.16.6 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "npm",
          "file_path": "package-lock.json",
          "line_number": null,
          "rule_identifier": "CVE-2026-41907",
          "title": "uuid: uuid: Out-of-bounds write vulnerability impacts data integrity and confidentiality",
          "description": "uuid is for the creation of RFC9562 (formerly RFC4122) UUIDs. Prior to 14.0.0, v3, v5, and v6 accept external output buffers but do not reject out-of-range writes (small buf or large offset). This allows silent partial writes into caller-provided buffers. This vulnerability is fixed in 14.0.0.",
          "remediation": "Upgrade uuid from 11.1.0 to 11.1.1, 12.0.1, 13.0.1 or later"
        }
      ],
      "execution_duration_seconds": 2.0946472409996204,
      "status": "complete",
      "metadata": {
        "source": "github-releases",
        "source_url": "https://github.com/aquasecurity/trivy/releases/tag/v0.71.0",
        "report_type": "filesystem-vulnerability",
        "install_command": "curl -sfL -o /tmp/trivy.deb https://github.com/aquasecurity/trivy/releases/download/v0.71.0/trivy_0.71.0_Linux-64bit.deb && echo '<sha256>  /tmp/trivy.deb' | sha256sum -c - && dpkg -i /tmp/trivy.deb",
        "severity_counts": {
          "low": 2,
          "high": 14,
          "medium": 9,
          "critical": 0,
          "informational": 0
        },
        "manifests_scanned": [
          "package-lock.json"
        ]
      },
      "display_score": 0.0,
      "display_badge": "Unsafe"
    },
    {
      "scanner_name": "osv-scanner",
      "scanner_version": "2.3.8",
      "score": 0.0,
      "scanner_badge": "Unsafe",
      "findings": [
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-7h2j-956f-4vf2",
          "title": "GHSA-7h2j-956f-4vf2 \u2014 npm @isaacs/brace-expansion@5.0.0",
          "description": "aliases: CVE-2026-25547, GHSA-7h2j-956f-4vf2 | CVSS: 8.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-345p-7cg4-v4c7",
          "title": "GHSA-345p-7cg4-v4c7 \u2014 npm @modelcontextprotocol/sdk@1.15.1",
          "description": "aliases: CVE-2026-25536, GHSA-345p-7cg4-v4c7 | CVSS: 7.1",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-8r9q-7v3j-jr4g",
          "title": "GHSA-8r9q-7v3j-jr4g \u2014 npm @modelcontextprotocol/sdk@1.15.1",
          "description": "aliases: CVE-2026-0621, GHSA-8r9q-7v3j-jr4g | CVSS: 8.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-w48q-cv73-mx4w",
          "title": "GHSA-w48q-cv73-mx4w \u2014 npm @modelcontextprotocol/sdk@1.15.1",
          "description": "aliases: CVE-2025-66414, GHSA-w48q-cv73-mx4w | CVSS: 7.6",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "low",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-vpq2-c234-7xj6",
          "title": "GHSA-vpq2-c234-7xj6 \u2014 npm @tootallnate/once@1.1.2",
          "description": "aliases: CVE-2026-3449, GHSA-vpq2-c234-7xj6 | CVSS: 3.3",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-2g4f-4pwh-qvx6",
          "title": "GHSA-2g4f-4pwh-qvx6 \u2014 npm ajv@6.12.6",
          "description": "aliases: CVE-2025-69873, GHSA-2g4f-4pwh-qvx6 | CVSS: 5.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-wqch-xfxh-vrr4",
          "title": "GHSA-wqch-xfxh-vrr4 \u2014 npm body-parser@2.2.0",
          "description": "aliases: CVE-2025-13466, GHSA-wqch-xfxh-vrr4 | CVSS: 5.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-f886-m6hf-6m8v",
          "title": "GHSA-f886-m6hf-6m8v \u2014 npm brace-expansion@1.1.12",
          "description": "aliases: CVE-2026-33750, GHSA-f886-m6hf-6m8v | CVSS: 6.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-5j98-mcp5-4vw2",
          "title": "GHSA-5j98-mcp5-4vw2 \u2014 npm glob@11.0.3",
          "description": "aliases: CVE-2025-64756, GHSA-5j98-mcp5-4vw2 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-v2v4-37r5-5v8g",
          "title": "GHSA-v2v4-37r5-5v8g \u2014 npm ip-address@9.0.5",
          "description": "aliases: CVE-2026-42338, GHSA-v2v4-37r5-5v8g | CVSS: 5.3",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-f23m-r3pf-42rh",
          "title": "GHSA-f23m-r3pf-42rh \u2014 npm lodash@4.17.21",
          "description": "aliases: CVE-2025-13465, CVE-2026-2950, GHSA-f23m-r3pf-42rh, GHSA-xxjr-mmjv-4gpg | CVSS: 6.9",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-r5fr-rjxr-66jc",
          "title": "GHSA-r5fr-rjxr-66jc \u2014 npm lodash@4.17.21",
          "description": "aliases: CVE-2021-23337, CVE-2026-4800, GHSA-35jh-r3h4-6jhm, GHSA-r5fr-rjxr-66jc | CVSS: 8.1",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-23c5-xmqv-rm74",
          "title": "GHSA-23c5-xmqv-rm74 \u2014 npm minimatch@10.0.3",
          "description": "aliases: CVE-2026-27904, GHSA-23c5-xmqv-rm74 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-3ppc-4f35-3m26",
          "title": "GHSA-3ppc-4f35-3m26 \u2014 npm minimatch@10.0.3",
          "description": "aliases: CVE-2026-26996, GHSA-3ppc-4f35-3m26 | CVSS: 8.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-7r86-cg39-jmmj",
          "title": "GHSA-7r86-cg39-jmmj \u2014 npm minimatch@10.0.3",
          "description": "aliases: CVE-2026-27903, GHSA-7r86-cg39-jmmj | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-23c5-xmqv-rm74",
          "title": "GHSA-23c5-xmqv-rm74 \u2014 npm minimatch@3.1.2",
          "description": "aliases: CVE-2026-27904, GHSA-23c5-xmqv-rm74 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-3ppc-4f35-3m26",
          "title": "GHSA-3ppc-4f35-3m26 \u2014 npm minimatch@3.1.2",
          "description": "aliases: CVE-2026-26996, GHSA-3ppc-4f35-3m26 | CVSS: 8.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-7r86-cg39-jmmj",
          "title": "GHSA-7r86-cg39-jmmj \u2014 npm minimatch@3.1.2",
          "description": "aliases: CVE-2026-27903, GHSA-7r86-cg39-jmmj | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-27v5-c462-wpq7",
          "title": "GHSA-27v5-c462-wpq7 \u2014 npm path-to-regexp@8.2.0",
          "description": "aliases: CVE-2026-4923, GHSA-27v5-c462-wpq7 | CVSS: 5.9",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-j3q9-mxjg-w52f",
          "title": "GHSA-j3q9-mxjg-w52f \u2014 npm path-to-regexp@8.2.0",
          "description": "aliases: CVE-2026-4926, GHSA-j3q9-mxjg-w52f | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-6rw7-vpxm-498p",
          "title": "GHSA-6rw7-vpxm-498p \u2014 npm qs@6.14.0",
          "description": "aliases: CVE-2025-15284, GHSA-6rw7-vpxm-498p | CVSS: 6.3",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-q8mj-m7cp-5q26",
          "title": "GHSA-q8mj-m7cp-5q26 \u2014 npm qs@6.14.0",
          "description": "aliases: CVE-2026-8723, GHSA-q8mj-m7cp-5q26 | CVSS: 6.3",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "low",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-w7fw-mjwx-w883",
          "title": "GHSA-w7fw-mjwx-w883 \u2014 npm qs@6.14.0",
          "description": "aliases: CVE-2026-2391, GHSA-w7fw-mjwx-w883 | CVSS: 3.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-34x7-hfp2-rc4v",
          "title": "GHSA-34x7-hfp2-rc4v \u2014 npm tar@6.2.1",
          "description": "aliases: CVE-2026-24842, GHSA-34x7-hfp2-rc4v | CVSS: 8.2",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-83g3-92jg-28cx",
          "title": "GHSA-83g3-92jg-28cx \u2014 npm tar@6.2.1",
          "description": "aliases: CVE-2026-26960, GHSA-83g3-92jg-28cx | CVSS: 7.1",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-8qq5-rm4j-mr97",
          "title": "GHSA-8qq5-rm4j-mr97 \u2014 npm tar@6.2.1",
          "description": "aliases: CVE-2026-23745, GHSA-8qq5-rm4j-mr97 | CVSS: 8.2",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-9ppj-qmqm-q256",
          "title": "GHSA-9ppj-qmqm-q256 \u2014 npm tar@6.2.1",
          "description": "aliases: CVE-2026-31802, GHSA-9ppj-qmqm-q256 | CVSS: 8.2",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-qffp-2rhf-9h96",
          "title": "GHSA-qffp-2rhf-9h96 \u2014 npm tar@6.2.1",
          "description": "aliases: CVE-2026-29786, GHSA-qffp-2rhf-9h96 | CVSS: 8.2",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-r6q2-hw4h-h46w",
          "title": "GHSA-r6q2-hw4h-h46w \u2014 npm tar@6.2.1",
          "description": "aliases: CVE-2026-23950, GHSA-r6q2-hw4h-h46w | CVSS: 8.8",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-vmf3-w455-68vh",
          "title": "GHSA-vmf3-w455-68vh \u2014 npm tar@6.2.1",
          "description": "aliases: CVE-2026-53655, GHSA-vmf3-w455-68vh | CVSS: 6.9",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-vj76-c3g6-qr5v",
          "title": "GHSA-vj76-c3g6-qr5v \u2014 npm tar-fs@2.1.3",
          "description": "aliases: CVE-2025-59343, GHSA-vj76-c3g6-qr5v | CVSS: 8.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-w5hq-g745-h8pq",
          "title": "GHSA-w5hq-g745-h8pq \u2014 npm uuid@11.1.0",
          "description": "aliases: CVE-2026-41907, CVE-2026-41988, GHSA-w5hq-g745-h8pq | CVSS: 7.5",
          "remediation": null
        }
      ],
      "execution_duration_seconds": 24.08450548199471,
      "status": "complete",
      "metadata": {
        "source": "github-releases",
        "source_url": "https://github.com/google/osv-scanner/releases/tag/v2.3.8",
        "report_type": "osv-vulnerability",
        "ecosystems_seen": [
          "npm"
        ],
        "install_command": "curl -sfL -o /usr/local/bin/osv-scanner https://github.com/google/osv-scanner/releases/download/v2.3.8/osv-scanner_linux_amd64 && echo '<sha256>  /usr/local/bin/osv-scanner' | sha256sum -c - && chmod +x /usr/local/bin/osv-scanner",
        "severity_counts": {
          "low": 2,
          "high": 21,
          "medium": 9,
          "critical": 0,
          "informational": 0
        },
        "manifests_scanned": [
          "/repo/package-lock.json"
        ],
        "finding_id_aliases": {
          "GHSA-23c5-xmqv-rm74": [
            "CVE-2026-27904",
            "CVE-2026-27904"
          ],
          "GHSA-27v5-c462-wpq7": [
            "CVE-2026-4923"
          ],
          "GHSA-2g4f-4pwh-qvx6": [
            "CVE-2025-69873"
          ],
          "GHSA-345p-7cg4-v4c7": [
            "CVE-2026-25536"
          ],
          "GHSA-34x7-hfp2-rc4v": [
            "CVE-2026-24842"
          ],
          "GHSA-3ppc-4f35-3m26": [
            "CVE-2026-26996",
            "CVE-2026-26996"
          ],
          "GHSA-5j98-mcp5-4vw2": [
            "CVE-2025-64756"
          ],
          "GHSA-6rw7-vpxm-498p": [
            "CVE-2025-15284"
          ],
          "GHSA-7h2j-956f-4vf2": [
            "CVE-2026-25547"
          ],
          "GHSA-7r86-cg39-jmmj": [
            "CVE-2026-27903",
            "CVE-2026-27903"
          ],
          "GHSA-83g3-92jg-28cx": [
            "CVE-2026-26960"
          ],
          "GHSA-8qq5-rm4j-mr97": [
            "CVE-2026-23745"
          ],
          "GHSA-8r9q-7v3j-jr4g": [
            "CVE-2026-0621"
          ],
          "GHSA-9ppj-qmqm-q256": [
            "CVE-2026-31802"
          ],
          "GHSA-f23m-r3pf-42rh": [
            "CVE-2025-13465",
            "CVE-2026-2950",
            "GHSA-xxjr-mmjv-4gpg"
          ],
          "GHSA-f886-m6hf-6m8v": [
            "CVE-2026-33750"
          ],
          "GHSA-j3q9-mxjg-w52f": [
            "CVE-2026-4926"
          ],
          "GHSA-q8mj-m7cp-5q26": [
            "CVE-2026-8723"
          ],
          "GHSA-qffp-2rhf-9h96": [
            "CVE-2026-29786"
          ],
          "GHSA-r5fr-rjxr-66jc": [
            "CVE-2021-23337",
            "CVE-2026-4800",
            "GHSA-35jh-r3h4-6jhm"
          ],
          "GHSA-r6q2-hw4h-h46w": [
            "CVE-2026-23950"
          ],
          "GHSA-v2v4-37r5-5v8g": [
            "CVE-2026-42338"
          ],
          "GHSA-vj76-c3g6-qr5v": [
            "CVE-2025-59343"
          ],
          "GHSA-vmf3-w455-68vh": [
            "CVE-2026-53655"
          ],
          "GHSA-vpq2-c234-7xj6": [
            "CVE-2026-3449"
          ],
          "GHSA-w48q-cv73-mx4w": [
            "CVE-2025-66414"
          ],
          "GHSA-w5hq-g745-h8pq": [
            "CVE-2026-41907",
            "CVE-2026-41988"
          ],
          "GHSA-w7fw-mjwx-w883": [
            "CVE-2026-2391"
          ],
          "GHSA-wqch-xfxh-vrr4": [
            "CVE-2025-13466"
          ]
        },
        "cross_scanner_correlation": {
          "only_osv": [
            "GHSA-5j98-mcp5-4vw2",
            "GHSA-7h2j-956f-4vf2",
            "GHSA-f23m-r3pf-42rh",
            "GHSA-r5fr-rjxr-66jc"
          ],
          "only_trivy": [],
          "intersection_ids": [
            "CVE-2025-13466",
            "CVE-2025-15284",
            "CVE-2025-59343",
            "CVE-2025-66414",
            "CVE-2025-69873",
            "CVE-2026-0621",
            "CVE-2026-23745",
            "CVE-2026-2391",
            "CVE-2026-23950",
            "CVE-2026-24842",
            "CVE-2026-25536",
            "CVE-2026-26960",
            "CVE-2026-26996",
            "CVE-2026-27903",
            "CVE-2026-27904",
            "CVE-2026-29786",
            "CVE-2026-31802",
            "CVE-2026-33750",
            "CVE-2026-3449",
            "CVE-2026-41907",
            "CVE-2026-42338",
            "CVE-2026-4923",
            "CVE-2026-4926",
            "CVE-2026-53655",
            "CVE-2026-8723"
          ]
        }
      },
      "display_score": 0.0,
      "display_badge": "Unsafe"
    }
  ],
  "threat_model": "Threat model synthesis has not yet run for this scan. This section is generated by the registry's LLM pipeline (Req 22.3) and will appear in the next regeneration of this report.",
  "audit_chain": {
    "scan_job_id": "88deff59-54a7-45d1-b71d-583618dda5de",
    "scan_completed_at": "2026-07-20T17:50:59.240351+00:00",
    "scanner_versions": {
      "agentshield": "1.4.0",
      "cisco-skill-scanner": "2.0.11",
      "agent-audit-kit": "0.3.26",
      "bearer": "2.0.2",
      "trivy": "0.71.0",
      "osv-scanner": "2.3.8"
    },
    "scanner_base_image": "us-central1-docker.pkg.dev/nerlo-vsk-prod/nerlo/scanner-base@sha256:0d7a0f702716ad30f03909f728be7c48ecb0d11e336553babe5fda357f15fba8",
    "ai_decision_log_ids": [
      "102c1847-6303-4a9f-abca-d643ed792409"
    ],
    "self_attestation_url": "http://localhost:8000/api/v1/registry/self-attestation"
  },
  "appendix": {
    "raw_scanner_reports": [
      {
        "scanner_name": "agentshield",
        "scanner_version": "1.4.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 3.7705426290049218,
        "status": "complete",
        "metadata": {
          "source": "npm",
          "source_url": "https://www.npmjs.com/package/ecc-agentshield",
          "install_command": "npm install -g ecc-agentshield@1.4.0",
          "scans_performed": [
            "supply_chain"
          ]
        },
        "display_score": 100.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "cisco-skill-scanner",
        "scanner_version": "2.0.11",
        "score": 0.0,
        "scanner_badge": "Unsafe",
        "findings": [
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "policy_violation",
            "file_path": "/repo",
            "line_number": null,
            "rule_identifier": "LOW_ANALYZABILITY",
            "title": "Critically low analyzability score",
            "description": "Only 18% of skill content could be analyzed. 56 of 69 files are opaque to the scanner. The safety assessment has low confidence.",
            "remediation": "Replace opaque files (binaries, encrypted content) with inspectable source code to improve scan confidence."
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "obfuscation",
            "file_path": "/repo/.prettierrc.json",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: .prettierrc.json. Hidden files may contain concealed configuration or data that should be reviewed.",
            "remediation": "Move file to a visible location or document its purpose."
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "social_engineering",
            "file_path": "/repo/SKILL.md",
            "line_number": null,
            "rule_identifier": "SOCIAL_ENG_VAGUE_DESCRIPTION",
            "title": "Vague skill description",
            "description": "Skill description is too short (16 chars). Provide detailed explanation.",
            "remediation": "Provide a clear, detailed description of what the skill does and when to use it"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "policy_violation",
            "file_path": "/repo/SKILL.md",
            "line_number": null,
            "rule_identifier": "MANIFEST_MISSING_LICENSE",
            "title": "Skill does not specify a license",
            "description": "Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.",
            "remediation": "Add 'license' field to SKILL.md frontmatter (e.g., MIT, Apache-2.0)"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/cli/utils/database.ts",
            "line_number": 46,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.readFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/global-registry.ts",
            "line_number": 69,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.readFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/global-registry.ts",
            "line_number": 83,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.writeFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/global-registry.ts",
            "line_number": 108,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.readFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/storage.ts",
            "line_number": 212,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.readFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/storage.ts",
            "line_number": 474,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.readFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/storage.ts",
            "line_number": 487,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.writeFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/tools/init-project.ts",
            "line_number": 147,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.writeFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/tools/init-project.ts",
            "line_number": 243,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.readFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "high",
            "category": "data_exfiltration",
            "file_path": "/repo/src/tools/init-project.ts",
            "line_number": 261,
            "rule_identifier": "DATA_EXFIL_JS_FS_ACCESS",
            "title": "Node.js filesystem access that could read or write sensitive data",
            "description": "Pattern detected: fs.readFile(",
            "remediation": "Review filesystem operations. Ensure they don't access sensitive system files or credential stores"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "social_engineering",
            "file_path": "/repo/docs/SKILL.md",
            "line_number": null,
            "rule_identifier": "SOCIAL_ENG_VAGUE_DESCRIPTION",
            "title": "Vague skill description",
            "description": "Skill description is too short (16 chars). Provide detailed explanation.",
            "remediation": "Provide a clear, detailed description of what the skill does and when to use it"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "policy_violation",
            "file_path": "/repo/docs/SKILL.md",
            "line_number": null,
            "rule_identifier": "MANIFEST_MISSING_LICENSE",
            "title": "Skill does not specify a license",
            "description": "Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.",
            "remediation": "Add 'license' field to SKILL.md frontmatter (e.g., MIT, Apache-2.0)"
          }
        ],
        "execution_duration_seconds": 22.179637865003315,
        "status": "complete",
        "metadata": {
          "source": "pypi",
          "source_url": "https://pypi.org/project/cisco-ai-skill-scanner/2.0.11/",
          "report_type": "cisco-skill-sast",
          "analyzers_used": [
            "bytecode",
            "pipeline",
            "static_analyzer"
          ],
          "skills_scanned": [
            "repo",
            "docs"
          ],
          "install_command": "pip install --require-hashes -r docker/scanner-base/cisco-skill-scanner/requirements.txt",
          "severity_counts": {
            "low": 3,
            "high": 11,
            "medium": 0,
            "critical": 0,
            "informational": 2
          }
        },
        "display_score": 0.0,
        "display_badge": "Unsafe"
      },
      {
        "scanner_name": "agent-audit-kit",
        "scanner_version": "0.3.26",
        "score": 0.0,
        "scanner_badge": "Unsafe",
        "findings": [
          {
            "tool_name": "agent-audit-kit",
            "severity": "low",
            "category": "supply-chain",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "AAK-SUPPLY-005",
            "title": "Dependency count exceeds threshold",
            "description": "More than 200 direct + transitive dependencies in lockfile. Each dependency is a trust decision.",
            "remediation": "Audit and remove unused dependencies. Consider lighter alternatives."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "low",
            "category": "supply-chain",
            "file_path": "SECURITY.md",
            "line_number": null,
            "rule_identifier": "AAK-SEC-MD-001",
            "title": "MCP server repo missing SECURITY.md or security_contact",
            "description": "A repository whose name or pyproject keywords declare it as an MCP server ships without a top-level SECURITY.md AND without a `security_contact` entry in marketplace.json / pyproject.toml / package.json. Anthropic's April 2026 SECURITY.md guidance makes this the baseline expectation so researchers have a channel.",
            "remediation": "Add SECURITY.md at the repo root with a disclosure email and response SLA; OR add `security_contact` to the project manifest."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/index.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/storage.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/tools/next-task.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/tools/create-task.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/tools/init-project.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/tools/get-task.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/tools/list-all-tasks.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/tools/update-task.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/prompts/start-task.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/cli/utils/database-manager.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/cli/screens/task-details/controller.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/cli/screens/task-details/view.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "mcp-config",
            "file_path": "src/cli/screens/task-details/model.ts",
            "line_number": null,
            "rule_identifier": "AAK-TASKS-003",
            "title": "MCP task has no TTL or cancellation path",
            "description": "A task record has no expiration and no cancellation endpoint. Orphaned tasks accumulate forever, including their inputs.",
            "remediation": "Set a TTL on every task; expose a cancellation endpoint that zeroizes inputs and credentials."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "supply-chain",
            "file_path": "package.json",
            "line_number": 59,
            "rule_identifier": "AAK-OAUTH-3P-001",
            "title": "Repo depends on a third-party agent-platform SDK",
            "description": "The project depends on an agent-platform SDK (context-ai, langsmith, helicone, langfuse, humanloop, MCP SDK). Informational finding so reviewers audit the vendor's OAuth-scope footprint before merging. Raised to MEDIUM because the April 19 2026 Vercel \u00d7 Context.ai incident showed a single vendor compromise can turn into a production breach via transitive OAuth grants.",
            "remediation": "Pin the SDK to an exact version, audit the OAuth scopes it requests, and keep any deployment-level grants (Vercel, GCP, Workspace) in a secrets vault \u2014 never in a committed env file. See Vercel's bulletin for sensitive-env-var guidance: https://vercel.com/kb/bulletin/vercel-april-2026-security-incident"
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "high",
            "category": "supply-chain",
            "file_path": "src/index.ts",
            "line_number": null,
            "rule_identifier": "AAK-ANTHROPIC-SDK-001",
            "title": "MCP server built on the upstream SDK without STDIO sanitizer",
            "description": "Repository declares a dependency on the upstream Anthropic / ModelContextProtocol SDK (Python `mcp` / `modelcontextprotocol`, TS `@modelcontextprotocol/sdk`, Java `io.modelcontextprotocol:*`, Rust `mcp` / `modelcontextprotocol`) and exposes a STDIO transport (`StdioServerTransport`, `stdio_server`, etc.) without a sanitizer on argv assembly. Anthropic declined to CVE this as working as designed \u2014 sanitization is the developer's responsibility. The OX Security disclosure on 2026-04-15 rolled up L",
            "remediation": "Wrap every argv the STDIO transport builds in an allow-list sanitizer \u2014 `shlex.quote` in Python, `execFile` with an explicit argv array in Node, equivalent in Java/Rust. OR switch the transport off STDIO (`transports=['http']` / `['sse']`). If you have deliberately accepted the risk, add `accepts_stdio_risk: true` plus a `justification:` field in `.agent-audit-kit.yml`."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "high",
            "category": "supply-chain",
            "file_path": "package.json",
            "line_number": null,
            "rule_identifier": "AAK-DNS-REBIND-002",
            "title": "Vulnerable MCP SDK version pinned (DNS-rebinding fix missing)",
            "description": "A project dependency manifest (requirements.txt, pyproject.toml, package.json, pom.xml, build.gradle) pins an MCP SDK at a version below the DNS-rebinding fix. Patched versions: Python `mcp` >= 1.23.0, TS `@modelcontextprotocol/sdk` >= 1.21.1, Java `io.modelcontextprotocol.sdk:mcp-core` >= 0.11.0, `@apollo/mcp-server` >= 1.7.0. Even if the project never serves over StreamableHTTP itself, transitive servers built on the SDK inherit the bug.",
            "remediation": "Bump the SDK to the patched version listed in the rule title. If a bump is not yet possible, ensure every transport surface has its own Host-header allow-list (see AAK-DNS-REBIND-001 remediation)."
          }
        ],
        "execution_duration_seconds": 9.693543167988537,
        "status": "complete",
        "metadata": {
          "source": "pypi",
          "source_url": "https://pypi.org/project/agent-audit-kit/0.3.26/",
          "report_type": "agent-audit-kit-sast",
          "files_scanned": 66,
          "install_command": "pip install --require-hashes -r docker/scanner-base/agent-audit-kit/requirements.txt",
          "rules_evaluated": 211,
          "severity_counts": {
            "low": 2,
            "high": 2,
            "medium": 14,
            "critical": 0,
            "informational": 0
          }
        },
        "display_score": 0.0,
        "display_badge": "Unsafe"
      },
      {
        "scanner_name": "bearer",
        "scanner_version": "2.0.2",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 7.907046556996647,
        "status": "complete",
        "metadata": {
          "source": "github-releases",
          "source_url": "https://github.com/Bearer/bearer",
          "report_type": "security",
          "rules_loaded": 1,
          "install_command": "curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.sh | sh -s -- -b /usr/local/bin \"v2.0.2\""
        },
        "display_score": 100.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "trivy",
        "scanner_version": "0.71.0",
        "score": 0.0,
        "scanner_badge": "Unsafe",
        "findings": [
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2025-66414",
            "title": "Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default",
            "description": "MCP TypeScript SDK is the official TypeScript SDK for Model Context Protocol servers and clients. Prior to 1.24.0, The Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default for HTTP-based servers. When an HTTP-based MCP server is run on localhost without authentication with StreamableHTTPServerTransport or SSEServerTransport and has not enabled enableDnsRebindingProtection, a malicious website could exploit DNS rebinding to bypass same-origin policy rest",
            "remediation": "Upgrade @modelcontextprotocol/sdk from 1.15.1 to 1.24.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-0621",
            "title": "Anthropic's MCP TypeScript SDK has a ReDoS vulnerability",
            "description": "Anthropic's MCP TypeScript SDK versions up to and including 1.25.1 contain a regular expression denial of service (ReDoS) vulnerability in the UriTemplate class when processing RFC 6570 exploded array patterns. The dynamically generated regular expression used during URI matching contains nested quantifiers that can trigger catastrophic backtracking on specially crafted inputs, resulting in excessive CPU consumption. An attacker can exploit this by supplying a malicious URI that causes the Node.",
            "remediation": "Upgrade @modelcontextprotocol/sdk from 1.15.1 to 1.25.2 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-25536",
            "title": "@modelcontextprotocol/sdk: @modelcontextprotocol/sdk cross-client data leak",
            "description": "MCP TypeScript SDK is the official TypeScript SDK for Model Context Protocol servers and clients. From version 1.10.0 to 1.25.3, cross-client response data leak when a single McpServer/Server and transport instance is reused across multiple client connections, most commonly in stateless StreamableHTTPServerTransport deployments. This issue has been patched in version 1.26.0.",
            "remediation": "Upgrade @modelcontextprotocol/sdk from 1.15.1 to 1.26.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "low",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-3449",
            "title": "@tootallnate/once: @tootallnate/once: Denial of Service due to incorrect control flow scoping with AbortSignal",
            "description": "Versions of the package @tootallnate/once before 3.0.1 are vulnerable to Incorrect Control Flow Scoping in promise resolving when AbortSignal option is used. The Promise remains in a permanently pending state after the signal is aborted, causing any await or .then() usage to hang indefinitely. This can cause a control-flow leak that can lead to stalled requests, blocked workers, or degraded application availability.",
            "remediation": "Upgrade @tootallnate/once from 1.1.2 to 3.0.1, 2.0.1 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2025-69873",
            "title": "ajv: ReDoS via $data reference",
            "description": "ajv (Another JSON Schema Validator) before 8.18.0 is vulnerable to Regular Expression Denial of Service (ReDoS) when the $data option is enabled. The pattern keyword accepts runtime data via JSON Pointer syntax ($data reference), which is passed directly to the JavaScript RegExp() constructor without validation. An attacker can inject a malicious regex pattern (e.g., \"^(a|a)*$\") combined with crafted input to cause catastrophic backtracking. A 31-character payload causes approximately 44 seconds",
            "remediation": "Upgrade ajv from 6.12.6 to 8.18.0, 6.14.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2025-13466",
            "title": "body-parser: body-parser denial of service",
            "description": "body-parser 2.2.0 is vulnerable to denial of service due to inefficient handling of URL-encoded bodies with very large numbers of parameters. An attacker can send payloads containing thousands of parameters within the default 100KB request size limit, causing elevated CPU and memory usage. This can lead to service slowdown or partial outages under sustained malicious traffic.\nThis issue is addressed in version 2.2.1.",
            "remediation": "Upgrade body-parser from 2.2.0 to 2.2.1 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-33750",
            "title": "brace-expansion: brace-expansion: Denial of Service via zero step value in brace pattern",
            "description": "The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., `{1..2..0}`) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to `expand()` to ensure a step value of `0` is not used.",
            "remediation": "Upgrade brace-expansion from 1.1.12 to 5.0.5, 3.0.2, 2.0.3, 1.1.13 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-42338",
            "title": "ip-address: ip-address: Cross-site scripting via improper HTML escaping of untrusted input",
            "description": "ip-address is a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript. Prior to 10.1.1, Address6.group() and Address6.link() do not HTML-escape attacker-controlled content before embedding it in the HTML strings they return, and AddressError.parseMessage (emitted by the Address6 constructor for invalid input) can contain unescaped attacker-controlled content in one branch. An application that (1) passes untrusted input to Address6 and (2) renders the output of these methods,",
            "remediation": "Upgrade ip-address from 9.0.5 to 10.1.1 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-26996",
            "title": "minimatch: minimatch: Denial of Service via specially crafted glob patterns",
            "description": "minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Versions 10.2.0 and below are vulnerable to Regular Expression Denial of Service (ReDoS) when a glob pattern contains many consecutive * wildcards followed by a literal character that doesn't appear in the test string. Each * compiles to a separate [^/]*? regex group, and when the match fails, V8's regex engine backtracks exponentially across all possible splits. The time complexity is O(4^N) ",
            "remediation": "Upgrade minimatch from 3.1.2 to 10.2.1, 9.0.6, 8.0.5, 7.4.7, 6.2.1, 5.1.7, 4.2.4, 3.1.3 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-27903",
            "title": "minimatch: minimatch: Denial of Service due to unbounded recursive backtracking via crafted glob patterns",
            "description": "minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Prior to version 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.3, `matchOne()` performs unbounded recursive backtracking when a glob pattern contains multiple non-adjacent `**` (GLOBSTAR) segments and the input path does not match. The time complexity is O(C(n, k)) -- binomial -- where `n` is the number of path segments and `k` is the number of globstars. With k=11 and n=30, a call",
            "remediation": "Upgrade minimatch from 3.1.2 to 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, 3.1.3 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-27904",
            "title": "minimatch: Minimatch: Denial of Service via catastrophic backtracking in glob expressions",
            "description": "minimatch is a minimal matching utility for converting glob expressions into JavaScript RegExp objects. Prior to version 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, and 3.1.4, nested `*()` extglobs produce regexps with nested unbounded quantifiers (e.g. `(?:(?:a|b)*)*`), which exhibit catastrophic backtracking in V8. With a 12-byte pattern `*(*(*(a|b)))` and an 18-byte non-matching input, `minimatch()` stalls for over 7 seconds. Adding a single nesting level or a few input characters pushe",
            "remediation": "Upgrade minimatch from 3.1.2 to 10.2.3, 9.0.7, 8.0.6, 7.4.8, 6.2.2, 5.1.8, 4.2.5, 3.1.4 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-4926",
            "title": "path-to-regexp: path-to-regexp: Denial of Service via crafted regular expressions",
            "description": "Impact:\n\nA bad regular expression is generated any time you have multiple sequential optional groups (curly brace syntax), such as `{a}{b}{c}:z`. The generated regex grows exponentially with the number of groups, causing denial of service.\n\nPatches:\n\nFixed in version 8.4.0.\n\nWorkarounds:\n\nLimit the number of sequential optional groups in route patterns. Avoid passing user-controlled input as route patterns.",
            "remediation": "Upgrade path-to-regexp from 8.2.0 to 8.4.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-4923",
            "title": "path-to-regexp: path-to-regexp: Denial of Service via specially crafted paths with multiple wildcards",
            "description": "Impact:\n\nWhen using multiple wildcards, combined with at least one parameter, a regular expression can be generated that is vulnerable to ReDoS. This backtracking vulnerability requires the second wildcard to be somewhere other than the end of the path.\n\nUnsafe examples:\n\n/*foo-*bar-:baz\n/*a-:b-*c-:d\n/x/*a-:b/*c/y\n\nSafe examples:\n\n/*foo-:bar\n/*foo-:bar-*baz\n\nPatches:\n\nUpgrade to version 8.4.0.\n\nWorkarounds:\n\nIf you are using multiple wildcard parameters, you can check the regex output with a too",
            "remediation": "Upgrade path-to-regexp from 8.2.0 to 8.4.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2025-15284",
            "title": "qs: qs: Denial of Service via improper input validation in array parsing",
            "description": "Improper Input Validation vulnerability in qs (parse modules) allows HTTP DoS.This issue affects qs: < 6.14.1.\n\n\nSummary\n\nThe arrayLimit\u00a0option in qs did not enforce limits for bracket notation (a[]=1&a[]=2), only for indexed notation (a[0]=1). This is a consistency bug; arrayLimit\u00a0should apply uniformly across all array notations.\n\nNote:\u00a0The default parameterLimit\u00a0of 1000 effectively mitigates the DoS scenario originally described. With default options, bracket notation cannot produce arrays la",
            "remediation": "Upgrade qs from 6.14.0 to 6.14.1 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-8723",
            "title": "### Summary    `qs.stringify` throws `TypeError` when called with `arr ...",
            "description": "### Summary\n\n\n\n`qs.stringify` throws `TypeError` when called with `arrayFormat: 'comma'` and `encodeValuesOnly: true` on an array containing `null` or `undefined`. The throw is synchronous and not handled by any of qs's null-related options (`skipNulls`, `strictNullHandling`).\n\n\n\n### Details\n\n\n\nIn the comma + `encodeValuesOnly` branch, `lib/stringify.js:145` mapped the array through the raw encoder before joining:\n\n\n\n```js\n\n\n\nobj = utils.maybeMap(obj, encoder);\n\n\n\n```\n\n\n\n`utils.encode` (`lib/uti",
            "remediation": "Upgrade qs from 6.14.0 to 6.15.2 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "low",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-2391",
            "title": "qs: qs's arrayLimit bypass in comma parsing allows denial of service",
            "description": "### Summary\nThe `arrayLimit` option in qs does not enforce limits for comma-separated values when `comma: true` is enabled, allowing attackers to cause denial-of-service via memory exhaustion. This is a bypass of the array limit enforcement, similar to the bracket notation bypass addressed in GHSA-6rw7-vpxm-498p (CVE-2025-15284).\n\n### Details\nWhen the `comma` option is set to `true` (not the default, but configurable in applications), qs allows parsing comma-separated strings as arrays (e.g., `?",
            "remediation": "Upgrade qs from 6.14.0 to 6.14.2 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-23745",
            "title": "node-tar: tar: node-tar: Arbitrary file overwrite and symlink poisoning via unsanitized linkpaths in archives",
            "description": "node-tar is a Tar for Node.js. The node-tar library (<= 7.5.2) fails to sanitize the linkpath of Link (hardlink) and SymbolicLink entries when preservePaths is false (the default secure behavior). This allows malicious archives to bypass the extraction root restriction, leading to Arbitrary File Overwrite via hardlinks and Symlink Poisoning via absolute symlink targets. This vulnerability is fixed in 7.5.3.",
            "remediation": "Upgrade tar from 6.2.1 to 7.5.3 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-23950",
            "title": "node-tar: tar: node-tar: Arbitrary file overwrite via Unicode path collision race condition",
            "description": "node-tar,a Tar for Node.js, has a race condition vulnerability in versions up to and including 7.5.3. This is due to an incomplete handling of Unicode path collisions in the `path-reservations` system. On case-insensitive or normalization-insensitive filesystems (such as macOS APFS, In which it has been tested), the library fails to lock colliding paths (e.g., `\u00df` and `ss`), allowing them to be processed in parallel. This bypasses the library's internal concurrency safeguards and permits Symlink",
            "remediation": "Upgrade tar from 6.2.1 to 7.5.4 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-24842",
            "title": "node-tar: tar: node-tar: Arbitrary file creation via path traversal bypass in hardlink security check",
            "description": "node-tar,a Tar for Node.js, contains a vulnerability in versions prior to 7.5.7 where the security check for hardlink entries uses different path resolution semantics than the actual hardlink creation logic. This mismatch allows an attacker to craft a malicious TAR archive that bypasses path traversal protections and creates hardlinks to arbitrary files outside the extraction directory. Version 7.5.7 contains a fix for the issue.",
            "remediation": "Upgrade tar from 6.2.1 to 7.5.7 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-26960",
            "title": "node-tar: node-tar: Arbitrary file read/write via malicious archive hardlink creation",
            "description": "node-tar is a full-featured Tar for Node.js. When using default options in versions 7.5.7 and below, an attacker-controlled archive can create a hardlink inside the extraction directory that points to a file outside the extraction root, enabling arbitrary file read and write as the extracting user. Severity is high because the primitive bypasses path protections and turns archive extraction into a direct filesystem access primitive. This issue has been fixed in version 7.5.8.",
            "remediation": "Upgrade tar from 6.2.1 to 7.5.8 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-29786",
            "title": "node-tar: hardlink path traversal via drive-relative linkpath",
            "description": "node-tar is a full-featured Tar for Node.js. Prior to version 7.5.10, tar can be tricked into creating a hardlink that points outside the extraction directory by using a drive-relative link target such as C:../target.txt, which enables file overwrite outside cwd during normal tar.x() extraction. This issue has been patched in version 7.5.10.",
            "remediation": "Upgrade tar from 6.2.1 to 7.5.10 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-31802",
            "title": "tar: tar: File overwrite via drive-relative symlink traversal",
            "description": "node-tar is a full-featured Tar for Node.js. Prior to version 7.5.11, tar (npm) can be tricked into creating a symlink that points outside the extraction directory by using a drive-relative symlink target such as C:../../../target.txt, which enables file overwrite outside cwd during normal tar.x() extraction. This vulnerability is fixed in 7.5.11.",
            "remediation": "Upgrade tar from 6.2.1 to 7.5.11 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-53655",
            "title": "node-tar: node-tar: File smuggling due to inconsistent tar archive parsing",
            "description": "node-tar is a full-featured Tar for Node.js. Prior to 7.5.16, tar (node-tar) applies a PAX extended header's size= record (and other PAX overrides) to the next header entry of any type, including intermediary metadata headers such as a GNU long-name (L) or long-link (K) entry. Per POSIX pax, a PAX extended header (x) describes the next file entry, not the intermediary extension headers that may sit between the x header and the file it annotates. Because node-tar lets the PAX size override the by",
            "remediation": "Upgrade tar from 6.2.1 to 7.5.16 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2025-59343",
            "title": "tar-fs: tar-fs symlink validation bypass",
            "description": "tar-fs provides filesystem bindings for tar-stream. Versions prior to 3.1.1, 2.1.3, and 1.16.5 are vulnerable to symlink validation bypass if the destination directory is predictable with a specific tarball. This issue has been patched in version 3.1.1, 2.1.4, and 1.16.6. A workaround involves using the ignore option on non files/directories.",
            "remediation": "Upgrade tar-fs from 2.1.3 to 3.1.1, 2.1.4, 1.16.6 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "npm",
            "file_path": "package-lock.json",
            "line_number": null,
            "rule_identifier": "CVE-2026-41907",
            "title": "uuid: uuid: Out-of-bounds write vulnerability impacts data integrity and confidentiality",
            "description": "uuid is for the creation of RFC9562 (formerly RFC4122) UUIDs. Prior to 14.0.0, v3, v5, and v6 accept external output buffers but do not reject out-of-range writes (small buf or large offset). This allows silent partial writes into caller-provided buffers. This vulnerability is fixed in 14.0.0.",
            "remediation": "Upgrade uuid from 11.1.0 to 11.1.1, 12.0.1, 13.0.1 or later"
          }
        ],
        "execution_duration_seconds": 2.0946472409996204,
        "status": "complete",
        "metadata": {
          "source": "github-releases",
          "source_url": "https://github.com/aquasecurity/trivy/releases/tag/v0.71.0",
          "report_type": "filesystem-vulnerability",
          "install_command": "curl -sfL -o /tmp/trivy.deb https://github.com/aquasecurity/trivy/releases/download/v0.71.0/trivy_0.71.0_Linux-64bit.deb && echo '<sha256>  /tmp/trivy.deb' | sha256sum -c - && dpkg -i /tmp/trivy.deb",
          "severity_counts": {
            "low": 2,
            "high": 14,
            "medium": 9,
            "critical": 0,
            "informational": 0
          },
          "manifests_scanned": [
            "package-lock.json"
          ]
        },
        "display_score": 0.0,
        "display_badge": "Unsafe"
      },
      {
        "scanner_name": "osv-scanner",
        "scanner_version": "2.3.8",
        "score": 0.0,
        "scanner_badge": "Unsafe",
        "findings": [
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-7h2j-956f-4vf2",
            "title": "GHSA-7h2j-956f-4vf2 \u2014 npm @isaacs/brace-expansion@5.0.0",
            "description": "aliases: CVE-2026-25547, GHSA-7h2j-956f-4vf2 | CVSS: 8.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-345p-7cg4-v4c7",
            "title": "GHSA-345p-7cg4-v4c7 \u2014 npm @modelcontextprotocol/sdk@1.15.1",
            "description": "aliases: CVE-2026-25536, GHSA-345p-7cg4-v4c7 | CVSS: 7.1",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-8r9q-7v3j-jr4g",
            "title": "GHSA-8r9q-7v3j-jr4g \u2014 npm @modelcontextprotocol/sdk@1.15.1",
            "description": "aliases: CVE-2026-0621, GHSA-8r9q-7v3j-jr4g | CVSS: 8.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-w48q-cv73-mx4w",
            "title": "GHSA-w48q-cv73-mx4w \u2014 npm @modelcontextprotocol/sdk@1.15.1",
            "description": "aliases: CVE-2025-66414, GHSA-w48q-cv73-mx4w | CVSS: 7.6",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "low",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-vpq2-c234-7xj6",
            "title": "GHSA-vpq2-c234-7xj6 \u2014 npm @tootallnate/once@1.1.2",
            "description": "aliases: CVE-2026-3449, GHSA-vpq2-c234-7xj6 | CVSS: 3.3",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-2g4f-4pwh-qvx6",
            "title": "GHSA-2g4f-4pwh-qvx6 \u2014 npm ajv@6.12.6",
            "description": "aliases: CVE-2025-69873, GHSA-2g4f-4pwh-qvx6 | CVSS: 5.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-wqch-xfxh-vrr4",
            "title": "GHSA-wqch-xfxh-vrr4 \u2014 npm body-parser@2.2.0",
            "description": "aliases: CVE-2025-13466, GHSA-wqch-xfxh-vrr4 | CVSS: 5.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-f886-m6hf-6m8v",
            "title": "GHSA-f886-m6hf-6m8v \u2014 npm brace-expansion@1.1.12",
            "description": "aliases: CVE-2026-33750, GHSA-f886-m6hf-6m8v | CVSS: 6.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-5j98-mcp5-4vw2",
            "title": "GHSA-5j98-mcp5-4vw2 \u2014 npm glob@11.0.3",
            "description": "aliases: CVE-2025-64756, GHSA-5j98-mcp5-4vw2 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-v2v4-37r5-5v8g",
            "title": "GHSA-v2v4-37r5-5v8g \u2014 npm ip-address@9.0.5",
            "description": "aliases: CVE-2026-42338, GHSA-v2v4-37r5-5v8g | CVSS: 5.3",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-f23m-r3pf-42rh",
            "title": "GHSA-f23m-r3pf-42rh \u2014 npm lodash@4.17.21",
            "description": "aliases: CVE-2025-13465, CVE-2026-2950, GHSA-f23m-r3pf-42rh, GHSA-xxjr-mmjv-4gpg | CVSS: 6.9",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-r5fr-rjxr-66jc",
            "title": "GHSA-r5fr-rjxr-66jc \u2014 npm lodash@4.17.21",
            "description": "aliases: CVE-2021-23337, CVE-2026-4800, GHSA-35jh-r3h4-6jhm, GHSA-r5fr-rjxr-66jc | CVSS: 8.1",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-23c5-xmqv-rm74",
            "title": "GHSA-23c5-xmqv-rm74 \u2014 npm minimatch@10.0.3",
            "description": "aliases: CVE-2026-27904, GHSA-23c5-xmqv-rm74 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-3ppc-4f35-3m26",
            "title": "GHSA-3ppc-4f35-3m26 \u2014 npm minimatch@10.0.3",
            "description": "aliases: CVE-2026-26996, GHSA-3ppc-4f35-3m26 | CVSS: 8.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-7r86-cg39-jmmj",
            "title": "GHSA-7r86-cg39-jmmj \u2014 npm minimatch@10.0.3",
            "description": "aliases: CVE-2026-27903, GHSA-7r86-cg39-jmmj | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-23c5-xmqv-rm74",
            "title": "GHSA-23c5-xmqv-rm74 \u2014 npm minimatch@3.1.2",
            "description": "aliases: CVE-2026-27904, GHSA-23c5-xmqv-rm74 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-3ppc-4f35-3m26",
            "title": "GHSA-3ppc-4f35-3m26 \u2014 npm minimatch@3.1.2",
            "description": "aliases: CVE-2026-26996, GHSA-3ppc-4f35-3m26 | CVSS: 8.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-7r86-cg39-jmmj",
            "title": "GHSA-7r86-cg39-jmmj \u2014 npm minimatch@3.1.2",
            "description": "aliases: CVE-2026-27903, GHSA-7r86-cg39-jmmj | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-27v5-c462-wpq7",
            "title": "GHSA-27v5-c462-wpq7 \u2014 npm path-to-regexp@8.2.0",
            "description": "aliases: CVE-2026-4923, GHSA-27v5-c462-wpq7 | CVSS: 5.9",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-j3q9-mxjg-w52f",
            "title": "GHSA-j3q9-mxjg-w52f \u2014 npm path-to-regexp@8.2.0",
            "description": "aliases: CVE-2026-4926, GHSA-j3q9-mxjg-w52f | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-6rw7-vpxm-498p",
            "title": "GHSA-6rw7-vpxm-498p \u2014 npm qs@6.14.0",
            "description": "aliases: CVE-2025-15284, GHSA-6rw7-vpxm-498p | CVSS: 6.3",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-q8mj-m7cp-5q26",
            "title": "GHSA-q8mj-m7cp-5q26 \u2014 npm qs@6.14.0",
            "description": "aliases: CVE-2026-8723, GHSA-q8mj-m7cp-5q26 | CVSS: 6.3",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "low",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-w7fw-mjwx-w883",
            "title": "GHSA-w7fw-mjwx-w883 \u2014 npm qs@6.14.0",
            "description": "aliases: CVE-2026-2391, GHSA-w7fw-mjwx-w883 | CVSS: 3.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-34x7-hfp2-rc4v",
            "title": "GHSA-34x7-hfp2-rc4v \u2014 npm tar@6.2.1",
            "description": "aliases: CVE-2026-24842, GHSA-34x7-hfp2-rc4v | CVSS: 8.2",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-83g3-92jg-28cx",
            "title": "GHSA-83g3-92jg-28cx \u2014 npm tar@6.2.1",
            "description": "aliases: CVE-2026-26960, GHSA-83g3-92jg-28cx | CVSS: 7.1",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-8qq5-rm4j-mr97",
            "title": "GHSA-8qq5-rm4j-mr97 \u2014 npm tar@6.2.1",
            "description": "aliases: CVE-2026-23745, GHSA-8qq5-rm4j-mr97 | CVSS: 8.2",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-9ppj-qmqm-q256",
            "title": "GHSA-9ppj-qmqm-q256 \u2014 npm tar@6.2.1",
            "description": "aliases: CVE-2026-31802, GHSA-9ppj-qmqm-q256 | CVSS: 8.2",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-qffp-2rhf-9h96",
            "title": "GHSA-qffp-2rhf-9h96 \u2014 npm tar@6.2.1",
            "description": "aliases: CVE-2026-29786, GHSA-qffp-2rhf-9h96 | CVSS: 8.2",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-r6q2-hw4h-h46w",
            "title": "GHSA-r6q2-hw4h-h46w \u2014 npm tar@6.2.1",
            "description": "aliases: CVE-2026-23950, GHSA-r6q2-hw4h-h46w | CVSS: 8.8",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-vmf3-w455-68vh",
            "title": "GHSA-vmf3-w455-68vh \u2014 npm tar@6.2.1",
            "description": "aliases: CVE-2026-53655, GHSA-vmf3-w455-68vh | CVSS: 6.9",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-vj76-c3g6-qr5v",
            "title": "GHSA-vj76-c3g6-qr5v \u2014 npm tar-fs@2.1.3",
            "description": "aliases: CVE-2025-59343, GHSA-vj76-c3g6-qr5v | CVSS: 8.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-w5hq-g745-h8pq",
            "title": "GHSA-w5hq-g745-h8pq \u2014 npm uuid@11.1.0",
            "description": "aliases: CVE-2026-41907, CVE-2026-41988, GHSA-w5hq-g745-h8pq | CVSS: 7.5",
            "remediation": null
          }
        ],
        "execution_duration_seconds": 24.08450548199471,
        "status": "complete",
        "metadata": {
          "source": "github-releases",
          "source_url": "https://github.com/google/osv-scanner/releases/tag/v2.3.8",
          "report_type": "osv-vulnerability",
          "ecosystems_seen": [
            "npm"
          ],
          "install_command": "curl -sfL -o /usr/local/bin/osv-scanner https://github.com/google/osv-scanner/releases/download/v2.3.8/osv-scanner_linux_amd64 && echo '<sha256>  /usr/local/bin/osv-scanner' | sha256sum -c - && chmod +x /usr/local/bin/osv-scanner",
          "severity_counts": {
            "low": 2,
            "high": 21,
            "medium": 9,
            "critical": 0,
            "informational": 0
          },
          "manifests_scanned": [
            "/repo/package-lock.json"
          ],
          "finding_id_aliases": {
            "GHSA-23c5-xmqv-rm74": [
              "CVE-2026-27904",
              "CVE-2026-27904"
            ],
            "GHSA-27v5-c462-wpq7": [
              "CVE-2026-4923"
            ],
            "GHSA-2g4f-4pwh-qvx6": [
              "CVE-2025-69873"
            ],
            "GHSA-345p-7cg4-v4c7": [
              "CVE-2026-25536"
            ],
            "GHSA-34x7-hfp2-rc4v": [
              "CVE-2026-24842"
            ],
            "GHSA-3ppc-4f35-3m26": [
              "CVE-2026-26996",
              "CVE-2026-26996"
            ],
            "GHSA-5j98-mcp5-4vw2": [
              "CVE-2025-64756"
            ],
            "GHSA-6rw7-vpxm-498p": [
              "CVE-2025-15284"
            ],
            "GHSA-7h2j-956f-4vf2": [
              "CVE-2026-25547"
            ],
            "GHSA-7r86-cg39-jmmj": [
              "CVE-2026-27903",
              "CVE-2026-27903"
            ],
            "GHSA-83g3-92jg-28cx": [
              "CVE-2026-26960"
            ],
            "GHSA-8qq5-rm4j-mr97": [
              "CVE-2026-23745"
            ],
            "GHSA-8r9q-7v3j-jr4g": [
              "CVE-2026-0621"
            ],
            "GHSA-9ppj-qmqm-q256": [
              "CVE-2026-31802"
            ],
            "GHSA-f23m-r3pf-42rh": [
              "CVE-2025-13465",
              "CVE-2026-2950",
              "GHSA-xxjr-mmjv-4gpg"
            ],
            "GHSA-f886-m6hf-6m8v": [
              "CVE-2026-33750"
            ],
            "GHSA-j3q9-mxjg-w52f": [
              "CVE-2026-4926"
            ],
            "GHSA-q8mj-m7cp-5q26": [
              "CVE-2026-8723"
            ],
            "GHSA-qffp-2rhf-9h96": [
              "CVE-2026-29786"
            ],
            "GHSA-r5fr-rjxr-66jc": [
              "CVE-2021-23337",
              "CVE-2026-4800",
              "GHSA-35jh-r3h4-6jhm"
            ],
            "GHSA-r6q2-hw4h-h46w": [
              "CVE-2026-23950"
            ],
            "GHSA-v2v4-37r5-5v8g": [
              "CVE-2026-42338"
            ],
            "GHSA-vj76-c3g6-qr5v": [
              "CVE-2025-59343"
            ],
            "GHSA-vmf3-w455-68vh": [
              "CVE-2026-53655"
            ],
            "GHSA-vpq2-c234-7xj6": [
              "CVE-2026-3449"
            ],
            "GHSA-w48q-cv73-mx4w": [
              "CVE-2025-66414"
            ],
            "GHSA-w5hq-g745-h8pq": [
              "CVE-2026-41907",
              "CVE-2026-41988"
            ],
            "GHSA-w7fw-mjwx-w883": [
              "CVE-2026-2391"
            ],
            "GHSA-wqch-xfxh-vrr4": [
              "CVE-2025-13466"
            ]
          },
          "cross_scanner_correlation": {
            "only_osv": [
              "GHSA-5j98-mcp5-4vw2",
              "GHSA-7h2j-956f-4vf2",
              "GHSA-f23m-r3pf-42rh",
              "GHSA-r5fr-rjxr-66jc"
            ],
            "only_trivy": [],
            "intersection_ids": [
              "CVE-2025-13466",
              "CVE-2025-15284",
              "CVE-2025-59343",
              "CVE-2025-66414",
              "CVE-2025-69873",
              "CVE-2026-0621",
              "CVE-2026-23745",
              "CVE-2026-2391",
              "CVE-2026-23950",
              "CVE-2026-24842",
              "CVE-2026-25536",
              "CVE-2026-26960",
              "CVE-2026-26996",
              "CVE-2026-27903",
              "CVE-2026-27904",
              "CVE-2026-29786",
              "CVE-2026-31802",
              "CVE-2026-33750",
              "CVE-2026-3449",
              "CVE-2026-41907",
              "CVE-2026-42338",
              "CVE-2026-4923",
              "CVE-2026-4926",
              "CVE-2026-53655",
              "CVE-2026-8723"
            ]
          }
        },
        "display_score": 0.0,
        "display_badge": "Unsafe"
      }
    ]
  },
  "report": {
    "report_id": "cc0e2857-ee42-4aab-9e48-758bf3f57c0c",
    "format": "json",
    "generated_at": "2026-07-21T20:41:00.326906+00:00",
    "scanner_filter": null,
    "signature": null
  }
}