{
  "executive_summary": {
    "badge": "Unsafe",
    "security_score": 41.35,
    "view": "composite",
    "aggregate_verdict_withheld": false,
    "aggregate_verdict_withheld_reason": null,
    "scanner_badges": {
      "agentshield": "not_applicable",
      "cisco-skill-scanner": "Unsafe",
      "agent-audit-kit": "Caution",
      "bearer": "Verified",
      "nerlo-behavioral": "Verified",
      "nerlo-install-instruction": "Verified",
      "capslock": "not_applicable",
      "trivy": "Unsafe",
      "osv-scanner": "Unsafe",
      "trivy_image": "not_applicable",
      "govulncheck": "not_applicable"
    },
    "finding_counts": {
      "critical": 1,
      "high": 12,
      "medium": 38,
      "low": 17,
      "informational": 3
    },
    "recommendation": "100x_discovery is NOT recommended for integration: the scan surfaced 1 critical and 12 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/ajitpandiyan/100x_discovery",
    "commit_sha_scanned": null,
    "license": null,
    "maintainer": null,
    "name": "100x_discovery",
    "version": null
  },
  "per_scanner_detail": [
    {
      "scanner_name": "agentshield",
      "scanner_version": "1.4.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 0.4958783310139552,
      "status": "not_applicable",
      "examined": {
        "unit": "scan_targets",
        "count": 0
      },
      "metadata": {
        "source": "npm",
        "source_url": "https://www.npmjs.com/package/ecc-agentshield",
        "install_command": "npm install -g ecc-agentshield@1.4.0",
        "scans_performed": []
      },
      "display_score": null,
      "display_badge": "not_applicable"
    },
    {
      "scanner_name": "cisco-skill-scanner",
      "scanner_version": "2.0.11",
      "score": 33.5,
      "scanner_badge": "Unsafe",
      "findings": [
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "obfuscation",
          "file_path": "/repo/.pre-commit-config.yaml",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: .pre-commit-config.yaml. 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": "medium",
          "category": "unauthorized_tool_use",
          "file_path": "/repo/repo/README.md",
          "line_number": null,
          "rule_identifier": "TOOL_ABUSE_UNDECLARED_NETWORK",
          "title": "Undeclared network usage",
          "description": "Skill code uses network libraries but doesn't declare network requirement",
          "remediation": "Declare network usage in compatibility field or remove network calls"
        },
        {
          "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": "low",
          "category": "obfuscation",
          "file_path": "/repo/backend/.env.test",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: backend/.env.test. 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": "obfuscation",
          "file_path": "/repo/frontend/.env.local",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: frontend/.env.local. 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": "obfuscation",
          "file_path": "/repo/frontend/.streamlit/config.toml",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: frontend/.streamlit/config.toml. 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": "medium",
          "category": "data_exfiltration",
          "file_path": "/repo/frontend/src/utils/api.py",
          "line_number": 23,
          "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
          "title": "Outbound network request primitives that can transmit data externally",
          "description": "Pattern detected: httpx.post(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "medium",
          "category": "data_exfiltration",
          "file_path": "/repo/frontend/src/utils/api.py",
          "line_number": 64,
          "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
          "title": "Outbound network request primitives that can transmit data externally",
          "description": "Pattern detected: httpx.post(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "medium",
          "category": "data_exfiltration",
          "file_path": "/repo/frontend/src/utils/api.py",
          "line_number": 104,
          "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
          "title": "Outbound network request primitives that can transmit data externally",
          "description": "Pattern detected: httpx.get(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "obfuscation",
          "file_path": "/repo/frontend/.env.local",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: .env.local. 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": "obfuscation",
          "file_path": "/repo/frontend/.streamlit/config.toml",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: .streamlit/config.toml. 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": "medium",
          "category": "unauthorized_tool_use",
          "file_path": "/repo/frontend/repo/frontend/README.md",
          "line_number": null,
          "rule_identifier": "TOOL_ABUSE_UNDECLARED_NETWORK",
          "title": "Undeclared network usage",
          "description": "Skill code uses network libraries but doesn't declare network requirement",
          "remediation": "Declare network usage in compatibility field or remove network calls"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "social_engineering",
          "file_path": "/repo/frontend/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/frontend/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": "medium",
          "category": "data_exfiltration",
          "file_path": "/repo/frontend/src/utils/api.py",
          "line_number": 23,
          "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
          "title": "Outbound network request primitives that can transmit data externally",
          "description": "Pattern detected: httpx.post(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "medium",
          "category": "data_exfiltration",
          "file_path": "/repo/frontend/src/utils/api.py",
          "line_number": 64,
          "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
          "title": "Outbound network request primitives that can transmit data externally",
          "description": "Pattern detected: httpx.post(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "medium",
          "category": "data_exfiltration",
          "file_path": "/repo/frontend/src/utils/api.py",
          "line_number": 104,
          "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
          "title": "Outbound network request primitives that can transmit data externally",
          "description": "Pattern detected: httpx.get(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "obfuscation",
          "file_path": "/repo/backend/.env.test",
          "line_number": null,
          "rule_identifier": "HIDDEN_DATA_FILE",
          "title": "Hidden data file detected",
          "description": "Hidden file found: .env.test. 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": "medium",
          "category": "unauthorized_tool_use",
          "file_path": "/repo/backend/repo/backend/README.md",
          "line_number": null,
          "rule_identifier": "TOOL_ABUSE_UNDECLARED_NETWORK",
          "title": "Undeclared network usage",
          "description": "Skill code uses network libraries but doesn't declare network requirement",
          "remediation": "Declare network usage in compatibility field or remove network calls"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "low",
          "category": "social_engineering",
          "file_path": "/repo/backend/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/backend/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": 16.791684777999762,
      "status": "complete",
      "examined": {
        "unit": "skills",
        "count": 3
      },
      "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",
          "frontend",
          "backend"
        ],
        "install_command": "pip install --require-hashes -r docker/scanner-base/cisco-skill-scanner/requirements.txt",
        "severity_counts": {
          "low": 10,
          "high": 0,
          "medium": 9,
          "critical": 0,
          "informational": 3
        },
        "artifact_type_policy": "cursor_rule"
      },
      "display_score": 33.5,
      "display_badge": "Unsafe"
    },
    {
      "scanner_name": "agent-audit-kit",
      "scanner_version": "0.3.26",
      "score": 80.0,
      "scanner_badge": "Caution",
      "findings": [
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "supply-chain",
          "file_path": "pyproject.toml",
          "line_number": null,
          "rule_identifier": "AAK-SUPPLY-004",
          "title": "No lockfile present",
          "description": "A package manifest exists but no lockfile was found. Without lockfiles, dependency versions float and can be silently updated.",
          "remediation": "Generate and commit lockfile."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "supply-chain",
          "file_path": ".github/workflows/backend-ci.yml",
          "line_number": 94,
          "rule_identifier": "AAK-GHA-IMMUTABLE-001",
          "title": "Third-party GitHub Action not pinned by full commit SHA",
          "description": "A workflow in `.github/workflows/` uses a third-party Action (`owner/action@ref`) where `ref` is a tag or branch name instead of a 40-character commit SHA. A repo-takeover of the Action's publisher can re-point the tag to a malicious revision \u2014 the downstream repo consuming it will happily run the new code with `GITHUB_TOKEN` and write permissions. GitHub's April 2026 Security Roadmap ships Immutable Actions and makes SHA pinning the default policy.",
          "remediation": "Repin third-party Actions to a 40-character commit SHA and add a `# v1.2.3`-style trailing comment for humans. First-party Actions under `actions/` and `github/` are exempt (they now ship Immutable Actions). Dependabot will auto-bump SHA pins when `update-type: all` is set."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "supply-chain",
          "file_path": ".github/workflows/backend-ci.yml",
          "line_number": 97,
          "rule_identifier": "AAK-GHA-IMMUTABLE-001",
          "title": "Third-party GitHub Action not pinned by full commit SHA",
          "description": "A workflow in `.github/workflows/` uses a third-party Action (`owner/action@ref`) where `ref` is a tag or branch name instead of a 40-character commit SHA. A repo-takeover of the Action's publisher can re-point the tag to a malicious revision \u2014 the downstream repo consuming it will happily run the new code with `GITHUB_TOKEN` and write permissions. GitHub's April 2026 Security Roadmap ships Immutable Actions and makes SHA pinning the default policy.",
          "remediation": "Repin third-party Actions to a 40-character commit SHA and add a `# v1.2.3`-style trailing comment for humans. First-party Actions under `actions/` and `github/` are exempt (they now ship Immutable Actions). Dependabot will auto-bump SHA pins when `update-type: all` is set."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "medium",
          "category": "supply-chain",
          "file_path": ".github/workflows/backend-ci.yml",
          "line_number": 104,
          "rule_identifier": "AAK-GHA-IMMUTABLE-001",
          "title": "Third-party GitHub Action not pinned by full commit SHA",
          "description": "A workflow in `.github/workflows/` uses a third-party Action (`owner/action@ref`) where `ref` is a tag or branch name instead of a 40-character commit SHA. A repo-takeover of the Action's publisher can re-point the tag to a malicious revision \u2014 the downstream repo consuming it will happily run the new code with `GITHUB_TOKEN` and write permissions. GitHub's April 2026 Security Roadmap ships Immutable Actions and makes SHA pinning the default policy.",
          "remediation": "Repin third-party Actions to a 40-character commit SHA and add a `# v1.2.3`-style trailing comment for humans. First-party Actions under `actions/` and `github/` are exempt (they now ship Immutable Actions). Dependabot will auto-bump SHA pins when `update-type: all` is set."
        }
      ],
      "execution_duration_seconds": 2.7815055290120654,
      "status": "complete",
      "examined": {
        "unit": "files",
        "count": 59
      },
      "metadata": {
        "source": "pypi",
        "source_url": "https://pypi.org/project/agent-audit-kit/0.3.26/",
        "report_type": "agent-audit-kit-sast",
        "install_command": "pip install --require-hashes -r docker/scanner-base/agent-audit-kit/requirements.txt",
        "rules_evaluated": 211,
        "severity_counts": {
          "low": 0,
          "high": 0,
          "medium": 4,
          "critical": 0,
          "informational": 0
        }
      },
      "display_score": 80.0,
      "display_badge": "Caution"
    },
    {
      "scanner_name": "bearer",
      "scanner_version": "2.0.2",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 12.266112915996928,
      "status": "complete",
      "examined": {
        "unit": "files",
        "count": 38
      },
      "metadata": {
        "source": "github-releases",
        "source_url": "https://github.com/Bearer/bearer",
        "report_type": "security",
        "stderr_tail": "Analyzing codebase",
        "rules_loaded": 554,
        "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": "nerlo-behavioral",
      "scanner_version": "0.1.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 6.066562272026204,
      "status": "complete",
      "examined": {
        "unit": "files",
        "count": 30
      },
      "metadata": {
        "source": "nerlo-original",
        "source_url": "https://github.com/nerlo-ai/nerlo",
        "report_type": "nerlo-behavioral",
        "ruleset_path": "/opt/nerlo-rules/exfiltration.yaml",
        "ruleset_paths": [
          "/opt/nerlo-rules/exfiltration.yaml",
          "/opt/nerlo-rules/clipboard_exfiltration.yaml",
          "/opt/nerlo-rules/rce_endpoint.yaml",
          "/opt/nerlo-rules/taint_egress.yaml"
        ],
        "install_command": "pip install 'semgrep==1.97.0'",
        "merged_invocation": true
      },
      "display_score": 100.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "nerlo-install-instruction",
      "scanner_version": "0.1.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 6.068275701021776,
      "status": "complete",
      "examined": {
        "unit": "files",
        "count": 9
      },
      "metadata": {
        "source": "nerlo-original",
        "source_url": "https://github.com/nerlo-ai/nerlo",
        "report_type": "nerlo-install-instruction",
        "ruleset_path": "/opt/nerlo-rules/install_instructions.yaml",
        "ruleset_paths": [
          "/opt/nerlo-rules/install_instructions.yaml",
          "/opt/nerlo-rules/cursor_rules.yaml"
        ],
        "install_command": "pip install 'semgrep==1.97.0'",
        "merged_invocation": true
      },
      "display_score": 100.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "capslock",
      "scanner_version": "v0.3.2",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 0.13418891897890717,
      "status": "not_applicable",
      "examined": {
        "unit": "packages",
        "count": 0
      },
      "metadata": {
        "source": "go-module-proxy",
        "source_url": "https://github.com/google/capslock/releases/tag/v0.3.2",
        "report_type": "go-capability",
        "vendor_mode": false,
        "install_command": "GOTOOLCHAIN=local GOFLAGS=-mod=mod GOSUMDB=sum.golang.org GOBIN=/usr/local/bin go install github.com/google/capslock/cmd/capslock@v0.3.2  # github.com/google/capslock v0.3.2 h1:0ZQa9YR8s9ewFu1g5w6Rgd/lW/4dga7qJew3K6Ql7aM=",
        "environment_note": "capslock found no .go files to analyze; reported not_applicable rather than a clean 100 \u2014 the scanner never ran, so it has no verdict to contribute",
        "go_files_present": 0,
        "artifact_type_policy": "cursor_rule",
        "expected_capabilities": null,
        "artifact_type_explicit": true
      },
      "display_score": null,
      "display_badge": "not_applicable"
    },
    {
      "scanner_name": "trivy",
      "scanner_version": "0.71.0",
      "score": 0.0,
      "scanner_badge": "Unsafe",
      "findings": [
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2025-71176",
          "title": "pytest: pytest: Denial of Service or Privilege Escalation via insecure temporary directory handling",
          "description": "pytest through 9.0.2 on UNIX relies on directories with the /tmp/pytest-of-{user} name pattern, which allows local users to cause a denial of service or possibly gain privileges.",
          "remediation": "Upgrade pytest from 7.4.3 to 9.0.3 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-28684",
          "title": "python-dotenv: python-dotenv: Arbitrary file overwrite via symbolic link following",
          "description": "python-dotenv reads key-value pairs from a .env file and can set them as environment variables. Prior to version 1.2.2, `set_key()` and `unset_key()` in python-dotenv follow symbolic links when rewriting `.env` files, allowing a local attacker to overwrite arbitrary files via a crafted symlink when a cross-device rename fallback is triggered. Users should upgrade to v.1.2.2 or, as a workaround, apply the patch manually.",
          "remediation": "Upgrade python-dotenv from 1.0.0 to 1.2.2 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2024-24762",
          "title": "`python-multipart` is a streaming multipart parser for Python. When us ...",
          "description": "`python-multipart` is a streaming multipart parser for Python. When using form data, `python-multipart` uses a Regular Expression to parse the HTTP `Content-Type` header, including options. An attacker could send a custom-made `Content-Type` option that is very difficult for the RegEx to process, consuming CPU resources and stalling indefinitely (minutes or more) while holding the main event loop. This means that process can't handle any more requests, leading to regular expression denial of ser",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.7 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2024-53981",
          "title": "python-multipart: python-multipart has a DoS via deformation `multipart/form-data` boundary",
          "description": "python-multipart is a streaming multipart parser for Python. When parsing form data, python-multipart skips line breaks (CR \\r or LF \\n) in front of the first boundary and any tailing bytes after the last boundary. This happens one byte at a time and emits a log event each time, which may cause excessive logging for certain inputs. An attacker could abuse this by sending a malicious request with lots of data before the first or after the last boundary, causing high CPU load and stalling the proc",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.18 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-24486",
          "title": "python-multipart: Python-Multipart: Arbitrary file write via path traversal vulnerability",
          "description": "Python-Multipart is a streaming multipart parser for Python. Prior to version 0.0.22, a Path Traversal vulnerability exists when using non-default configuration options `UPLOAD_DIR` and `UPLOAD_KEEP_FILENAME=True`. An attacker can write uploaded files to arbitrary locations on the filesystem by crafting a malicious filename. Users should upgrade to version 0.0.22 to receive a patch or, as a workaround, avoid using `UPLOAD_KEEP_FILENAME=True` in project configurations.",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.22 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-42561",
          "title": "python-multipart: python-multipart: Denial of Service via excessive multipart part headers",
          "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.27, python-multipart has a denial of service vulnerability in multipart part header parsing. When parsing multipart/form-data, MultipartParser previously had no limit on the number of part headers or the size of an individual part header. An attacker could send a request with either many repeated headers without terminating the header block or a single very large header value, causing excessive CPU work before request reje",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.27 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "high",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-53539",
          "title": "python-multipart: Python-Multipart: Denial of Service via crafted form-urlencoded bodies",
          "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.30, when parsing application/x-www-form-urlencoded bodies, QuerystringParser located the field separator with a two step lookup: it first scanned the entire remaining buffer for &, and only when no & existed anywhere ahead did it fall back to scanning for ;. For a body that uses ; as the separator and contains no &, every field iteration performed a full failed & scan over the entire remaining buffer before locating the ne",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.30 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-40347",
          "title": "python-multipart: Python-Multipart: Denial of Service via crafted multipart/form-data requests",
          "description": "Python-Multipart is a streaming multipart parser for Python. Versions prior to 0.0.26 have a denial of service vulnerability when parsing crafted `multipart/form-data` requests with large preamble or epilogue sections. Upgrade to version 0.0.26 or later, which skips ahead to the next boundary candidate when processing leading CR/LF data and immediately discards epilogue data after the closing boundary.",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.26 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "low",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-53537",
          "title": "multipart: Python-Multipart: Information disclosure via header parsing discrepancy",
          "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.30, parse_options_header parsed Content-Disposition (and Content-Type) headers with email.message.Message, which transparently applies RFC 2231/5987 decoding. The extended parameter syntax (filename*=charset'lang'value, name*=..., and the filename*0/filename*1 continuation form) is decoded and surfaced under the bare filename/name key, and overrides the plain parameter when both are present. RFC 7578 \u00a74.2 explicitly forbid",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.30 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "low",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-53538",
          "title": "python-multipart: Python-Multipart: Information disclosure due to parser differential in form data handling",
          "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.30, QuerystringParser treated ; as a field separator in application/x-www-form-urlencoded bodies, in addition to &. The WHATWG URL standard, modern browsers, and Python's urllib.parse (since the CVE-2021-23336 fix) treat only & as a separator. This creates a parser differential: the same bytes are tokenized into different fields than a WHATWG compliant intermediary would produce, allowing an attacker to smuggle extra form ",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.30 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "low",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-53540",
          "title": "python-multipart: Python-Multipart: Negative Content-Length in parse_form buffers the entire body in memory",
          "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.31, parse_form() did not validate the Content-Length header before using it to bound its chunked read of the request body. A negative Content-Length turned the bounded read into a read-until-EOF, so the entire body was loaded into memory in a single read instead of in fixed-size chunks. This vulnerability is fixed in 0.0.31.",
          "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.31 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2024-35195",
          "title": "requests: subsequent requests to the same host ignore cert verification",
          "description": "Requests is a HTTP library. Prior to 2.32.0, when making requests through a Requests `Session`, if the first request is made with `verify=False` to disable cert verification, all subsequent requests to the same host will continue to ignore cert verification regardless of changes to the value of `verify`. This behavior will continue for the lifecycle of the connection in the connection pool. This vulnerability is fixed in 2.32.0.",
          "remediation": "Upgrade requests from 2.31.0 to 2.32.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2024-47081",
          "title": "requests: Requests vulnerable to .netrc credentials leak via malicious URLs",
          "description": "Requests is a HTTP library. Due to a URL parsing issue, Requests releases prior to 2.32.4 may leak .netrc credentials to third parties for specific maliciously-crafted URLs. Users should upgrade to version 2.32.4 to receive a fix. For older versions of Requests, use of the .netrc file can be disabled with `trust_env=False` on one's Requests Session.",
          "remediation": "Upgrade requests from 2.31.0 to 2.32.4 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-25645",
          "title": "requests: Requests: Security bypass due to predictable temporary file creation",
          "description": "Requests is a HTTP library. Prior to version 2.33.0, the `requests.utils.extract_zipped_paths()` utility function uses a predictable filename when extracting files from zip archives into the system temporary directory. If the target file already exists, it is reused without validation. A local attacker with write access to the temp directory could pre-create a malicious file that would be loaded in place of the legitimate one. Standard usage of the Requests library is not affected by this vulner",
          "remediation": "Upgrade requests from 2.31.0 to 2.33.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2024-21503",
          "title": "psf/black: ReDoS via the lines_with_leading_tabs_expanded() function in strings.py file",
          "description": "Versions of the package black before 24.3.0 are vulnerable to Regular Expression Denial of Service (ReDoS) via the lines_with_leading_tabs_expanded function in the strings.py file. An attacker could exploit this vulnerability by crafting a malicious input that causes a denial of service.\r\rExploiting this vulnerability is possible when running Black on untrusted input, or if you habitually put thousands of leading tab characters in your docstrings.",
          "remediation": "Upgrade black from 23.11.0 to 24.3.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2025-71176",
          "title": "pytest: pytest: Denial of Service or Privilege Escalation via insecure temporary directory handling",
          "description": "pytest through 9.0.2 on UNIX relies on directories with the /tmp/pytest-of-{user} name pattern, which allows local users to cause a denial of service or possibly gain privileges.",
          "remediation": "Upgrade pytest from 7.4.3 to 9.0.3 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-28684",
          "title": "python-dotenv: python-dotenv: Arbitrary file overwrite via symbolic link following",
          "description": "python-dotenv reads key-value pairs from a .env file and can set them as environment variables. Prior to version 1.2.2, `set_key()` and `unset_key()` in python-dotenv follow symbolic links when rewriting `.env` files, allowing a local attacker to overwrite arbitrary files via a crafted symlink when a cross-device rename fallback is triggered. Users should upgrade to v.1.2.2 or, as a workaround, apply the patch manually.",
          "remediation": "Upgrade python-dotenv from 1.0.0 to 1.2.2 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2024-42474",
          "title": "Path traveral in Streamlit on windows",
          "description": "Streamlit is a data oriented application development framework for python. Snowflake Streamlit open source addressed a security vulnerability via the static file sharing feature. Users of hosted Streamlit app(s) on Windows were vulnerable to a path traversal vulnerability when the static file sharing feature is enabled. An attacker could utilize the vulnerability to leak the password hash of the Windows user running Streamlit. The vulnerability was patched on Jul 25, 2024, as part of Streamlit o",
          "remediation": "Upgrade streamlit from 1.29.0 to 1.37.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-33682",
          "title": "Unauthenticated SSRF Vulnerability in Streamlit on Windows (NTLM Credential Exposure)",
          "description": "Streamlit is a data oriented application development framework for python. Streamlit Open Source versions prior to 1.54.0 running on Windows hosts have an unauthenticated Server-Side Request Forgery (SSRF) vulnerability. The vulnerability arises from improper validation of attacker-supplied filesystem paths. In certain code paths, including within the `ComponentRequestHandler`, filesystem paths are resolved using `os.path.realpath()` or `Path.resolve()` before sufficient validation occurs. On Wi",
          "remediation": "Upgrade streamlit from 1.29.0 to 1.54.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "medium",
          "category": "pip",
          "file_path": "frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "GHSA-8qw9-gf7w-42x5",
          "title": "Minor fix to previous patch for CVE-2022-35918",
          "description": "### Impact\n\nThe initial vulnerability identified in Streamlit apps using custom components, allowing for directory traversal attacks, was addressed in version 1.11.1. However, a minor issue persisted, which could still potentially expose certain files on the server file-system under specific conditions.\n\n### Patches\n\nWe released an update in version 1.30.0 to further tighten security measures. Users are strongly advised to update to version 1.30.0 immediately for optimal security.\n\n### Workaroun",
          "remediation": "Upgrade streamlit from 1.29.0 to 1.30.0 or later"
        },
        {
          "tool_name": "trivy",
          "severity": "low",
          "category": "pip",
          "file_path": "frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "CVE-2026-10804",
          "title": "streamlit: Streamlit: Weak hash usage leading to low integrity and availability impact",
          "description": "A vulnerability has been found in Streamlit up to 1.53.0. Impacted is an unknown function in the library lib/streamlit/runtime/caching/hashing.py of the component Palette Handler. Such manipulation leads to use of weak hash. Local access is required to approach this attack. The attack requires a high level of complexity. The exploitability is considered difficult. The exploit has been disclosed to the public and may be used. The pull request to fix this issue awaits acceptance.",
          "remediation": "Upgrade streamlit from 1.29.0 to 1.53.1 or later"
        }
      ],
      "execution_duration_seconds": 0.34858905302826315,
      "status": "complete",
      "examined": {
        "unit": "manifests",
        "count": 2
      },
      "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": 4,
          "high": 5,
          "medium": 12,
          "critical": 0,
          "informational": 0
        },
        "manifests_scanned": [
          "backend/requirements.txt",
          "frontend/requirements.txt"
        ]
      },
      "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": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2024-38",
          "title": "PYSEC-2024-38 \u2014 PyPI fastapi@0.104.1",
          "description": "aliases: CVE-2024-24762, GHSA-2jv5-9r88-3w3p, GHSA-qf9m-vfgh-m389, PYSEC-2024-38, PYSEC-2026-1850 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-1845",
          "title": "PYSEC-2026-1845 \u2014 PyPI pytest@7.4.3",
          "description": "aliases: CVE-2025-71176, GHSA-6w46-j5rx-g56g, PYSEC-2026-1845 | CVSS: 6.8",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-2270",
          "title": "PYSEC-2026-2270 \u2014 PyPI python-dotenv@1.0.0",
          "description": "aliases: CVE-2026-28684, GHSA-mf9w-mj56-hr94, PYSEC-2026-2270 | CVSS: 6.6",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-1850",
          "title": "PYSEC-2026-1850 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2024-24762, GHSA-2jv5-9r88-3w3p, GHSA-qf9m-vfgh-m389, PYSEC-2024-38, PYSEC-2026-1850 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-1851",
          "title": "PYSEC-2026-1851 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2024-53981, GHSA-59g5-xgcq-4qw3, PYSEC-2026-1851 | CVSS: 8.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-1852",
          "title": "PYSEC-2026-1852 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2026-24486, GHSA-wp53-j4wj-2cfg, PYSEC-2026-1852 | CVSS: 8.6",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-3036",
          "title": "PYSEC-2026-3036 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2026-53539, GHSA-5rvq-cxj2-64vf, PYSEC-2026-3036 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "low",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-3037",
          "title": "PYSEC-2026-3037 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2026-53538, GHSA-6jv3-5f52-599m, PYSEC-2026-3037 | CVSS: 3.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-3038",
          "title": "PYSEC-2026-3038 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2026-40347, GHSA-mj87-hwqh-73pj, PYSEC-2026-3038 | CVSS: 5.3",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-3039",
          "title": "PYSEC-2026-3039 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2026-42561, GHSA-pp6c-gr5w-3c5g, PYSEC-2026-3039 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "low",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-3040",
          "title": "PYSEC-2026-3040 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2026-53540, GHSA-v9pg-7xvm-68hf, PYSEC-2026-3040 | CVSS: 3.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "low",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-3041",
          "title": "PYSEC-2026-3041 \u2014 PyPI python-multipart@0.0.6",
          "description": "aliases: CVE-2026-53537, GHSA-vffw-93wf-4j4q, PYSEC-2026-3041 | CVSS: 3.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-1872",
          "title": "PYSEC-2026-1872 \u2014 PyPI requests@2.31.0",
          "description": "aliases: CVE-2024-47081, GHSA-9hjg-9r4m-mvj7, PYSEC-2026-1872 | CVSS: 5.3",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-1873",
          "title": "PYSEC-2026-1873 \u2014 PyPI requests@2.31.0",
          "description": "aliases: CVE-2024-35195, GHSA-9wx4-h78v-vm56, PYSEC-2026-1873 | CVSS: 5.6",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/backend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-2275",
          "title": "PYSEC-2026-2275 \u2014 PyPI requests@2.31.0",
          "description": "aliases: CVE-2026-25645, GHSA-gc5v-m9x4-r6x2, PYSEC-2026-2275 | CVSS: 5.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2024-48",
          "title": "PYSEC-2024-48 \u2014 PyPI black@23.11.0",
          "description": "aliases: CVE-2024-21503, GHSA-fj7x-q9j7-g6q6, PYSEC-2024-48 | CVSS: 5.3",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "critical",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-2120",
          "title": "PYSEC-2026-2120 \u2014 PyPI black@23.11.0",
          "description": "aliases: CVE-2026-31900, GHSA-v53h-f6m7-xcgm, PYSEC-2026-2120 | CVSS: 9.8",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "high",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-2121",
          "title": "PYSEC-2026-2121 \u2014 PyPI black@23.11.0",
          "description": "aliases: CVE-2026-32274, GHSA-3936-cmfr-pm3m, PYSEC-2026-2121 | CVSS: 7.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-1845",
          "title": "PYSEC-2026-1845 \u2014 PyPI pytest@7.4.3",
          "description": "aliases: CVE-2025-71176, GHSA-6w46-j5rx-g56g, PYSEC-2026-1845 | CVSS: 6.8",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-2270",
          "title": "PYSEC-2026-2270 \u2014 PyPI python-dotenv@1.0.0",
          "description": "aliases: CVE-2026-28684, GHSA-mf9w-mj56-hr94, PYSEC-2026-2270 | CVSS: 6.6",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2024-153",
          "title": "PYSEC-2024-153 \u2014 PyPI streamlit@1.29.0",
          "description": "aliases: CVE-2024-42474, GHSA-rxff-vr5r-8cj5, PYSEC-2024-153 | CVSS: 6.5",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-212",
          "title": "PYSEC-2026-212 \u2014 PyPI streamlit@1.29.0",
          "description": "aliases: CVE-2026-10804, GHSA-vqwp-45wm-r9r5, PYSEC-2026-212 | CVSS: 4.7",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "PYSEC-2026-2285",
          "title": "PYSEC-2026-2285 \u2014 PyPI streamlit@1.29.0",
          "description": "aliases: CVE-2026-33682, GHSA-7p48-42j8-8846, PYSEC-2026-2285 | CVSS: 4.8",
          "remediation": null
        },
        {
          "tool_name": "osv-scanner",
          "severity": "medium",
          "category": "PyPI",
          "file_path": "/repo/frontend/requirements.txt",
          "line_number": null,
          "rule_identifier": "GHSA-8qw9-gf7w-42x5",
          "title": "GHSA-8qw9-gf7w-42x5 \u2014 PyPI streamlit@1.29.0",
          "description": "aliases: GHSA-8qw9-gf7w-42x5 | CVSS: 5.3",
          "remediation": null
        }
      ],
      "execution_duration_seconds": 2.038832780031953,
      "status": "complete",
      "examined": {
        "unit": "manifests",
        "count": 2
      },
      "metadata": {
        "source": "github-releases",
        "source_url": "https://github.com/google/osv-scanner/releases/tag/v2.3.8",
        "report_type": "osv-vulnerability",
        "ecosystems_seen": [
          "PyPI"
        ],
        "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": 3,
          "high": 7,
          "medium": 13,
          "critical": 1,
          "informational": 0
        },
        "manifests_scanned": [
          "/repo/backend/requirements.txt",
          "/repo/frontend/requirements.txt"
        ],
        "finding_id_aliases": {
          "PYSEC-2024-38": [
            "CVE-2024-24762",
            "GHSA-2jv5-9r88-3w3p",
            "GHSA-qf9m-vfgh-m389",
            "PYSEC-2026-1850"
          ],
          "PYSEC-2024-48": [
            "CVE-2024-21503",
            "GHSA-fj7x-q9j7-g6q6"
          ],
          "PYSEC-2024-153": [
            "CVE-2024-42474",
            "GHSA-rxff-vr5r-8cj5"
          ],
          "PYSEC-2026-212": [
            "CVE-2026-10804",
            "GHSA-vqwp-45wm-r9r5"
          ],
          "PYSEC-2026-1845": [
            "CVE-2025-71176",
            "GHSA-6w46-j5rx-g56g",
            "CVE-2025-71176",
            "GHSA-6w46-j5rx-g56g"
          ],
          "PYSEC-2026-1850": [
            "CVE-2024-24762",
            "GHSA-2jv5-9r88-3w3p",
            "GHSA-qf9m-vfgh-m389",
            "PYSEC-2024-38"
          ],
          "PYSEC-2026-1851": [
            "CVE-2024-53981",
            "GHSA-59g5-xgcq-4qw3"
          ],
          "PYSEC-2026-1852": [
            "CVE-2026-24486",
            "GHSA-wp53-j4wj-2cfg"
          ],
          "PYSEC-2026-1872": [
            "CVE-2024-47081",
            "GHSA-9hjg-9r4m-mvj7"
          ],
          "PYSEC-2026-1873": [
            "CVE-2024-35195",
            "GHSA-9wx4-h78v-vm56"
          ],
          "PYSEC-2026-2120": [
            "CVE-2026-31900",
            "GHSA-v53h-f6m7-xcgm"
          ],
          "PYSEC-2026-2121": [
            "CVE-2026-32274",
            "GHSA-3936-cmfr-pm3m"
          ],
          "PYSEC-2026-2270": [
            "CVE-2026-28684",
            "GHSA-mf9w-mj56-hr94",
            "CVE-2026-28684",
            "GHSA-mf9w-mj56-hr94"
          ],
          "PYSEC-2026-2275": [
            "CVE-2026-25645",
            "GHSA-gc5v-m9x4-r6x2"
          ],
          "PYSEC-2026-2285": [
            "CVE-2026-33682",
            "GHSA-7p48-42j8-8846"
          ],
          "PYSEC-2026-3036": [
            "CVE-2026-53539",
            "GHSA-5rvq-cxj2-64vf"
          ],
          "PYSEC-2026-3037": [
            "CVE-2026-53538",
            "GHSA-6jv3-5f52-599m"
          ],
          "PYSEC-2026-3038": [
            "CVE-2026-40347",
            "GHSA-mj87-hwqh-73pj"
          ],
          "PYSEC-2026-3039": [
            "CVE-2026-42561",
            "GHSA-pp6c-gr5w-3c5g"
          ],
          "PYSEC-2026-3040": [
            "CVE-2026-53540",
            "GHSA-v9pg-7xvm-68hf"
          ],
          "PYSEC-2026-3041": [
            "CVE-2026-53537",
            "GHSA-vffw-93wf-4j4q"
          ]
        },
        "cross_scanner_correlation": {
          "only_osv": [
            "PYSEC-2026-2120",
            "PYSEC-2026-2121"
          ],
          "only_trivy": [],
          "intersection_ids": [
            "CVE-2024-21503",
            "CVE-2024-24762",
            "CVE-2024-35195",
            "CVE-2024-42474",
            "CVE-2024-47081",
            "CVE-2024-53981",
            "CVE-2025-71176",
            "CVE-2026-10804",
            "CVE-2026-24486",
            "CVE-2026-25645",
            "CVE-2026-28684",
            "CVE-2026-33682",
            "CVE-2026-40347",
            "CVE-2026-42561",
            "CVE-2026-53537",
            "CVE-2026-53538",
            "CVE-2026-53539",
            "CVE-2026-53540",
            "GHSA-8qw9-gf7w-42x5"
          ]
        }
      },
      "display_score": 0.0,
      "display_badge": "Unsafe"
    },
    {
      "scanner_name": "trivy_image",
      "scanner_version": "0.71.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 4.353997064754367e-05,
      "status": "not_applicable",
      "examined": {
        "unit": "image_targets",
        "count": 0
      },
      "metadata": {
        "reason": "no OCI image acquired for this artifact"
      },
      "display_score": null,
      "display_badge": "not_applicable"
    },
    {
      "scanner_name": "govulncheck",
      "scanner_version": "v1.6.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 0.10004216700326651,
      "status": "not_applicable",
      "examined": {
        "unit": "modules",
        "count": 0
      },
      "metadata": {
        "source": "go-module-proxy",
        "source_url": "https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck",
        "report_type": "go-reachability",
        "vendor_mode": false,
        "go_mod_present": false,
        "install_command": "GOTOOLCHAIN=local GOFLAGS=-mod=mod GOSUMDB=sum.golang.org GOBIN=/usr/local/bin go install golang.org/x/vuln/cmd/govulncheck@v1.6.0  # golang.org/x/vuln v1.6.0 h1:FeMO9Rm/HwyduOztbvKcOw+zvDEPr4I4aQNSfevFcKY=",
        "offline_db_path": "/opt/govulncheck-db",
        "environment_note": "govulncheck found no go.mod, so this tree declares no Go module and no Go dependencies; reported not_applicable rather than a clean 100 \u2014 the scanner never ran, so it has no verdict to contribute"
      },
      "display_score": null,
      "display_badge": "not_applicable"
    }
  ],
  "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": "97d9e222-0fde-40b1-ac7e-2ba8c0d68d4c",
    "scan_completed_at": "2026-08-12T19:19:48.141721+00:00",
    "scanner_versions": {
      "agentshield": "1.4.0",
      "cisco-skill-scanner": "2.0.11",
      "agent-audit-kit": "0.3.26",
      "bearer": "2.0.2",
      "nerlo-behavioral": "0.1.0",
      "nerlo-install-instruction": "0.1.0",
      "capslock": "v0.3.2",
      "trivy": "0.71.0",
      "osv-scanner": "2.3.8",
      "trivy_image": "0.71.0",
      "govulncheck": "v1.6.0"
    },
    "scanner_base_image": "us-central1-docker.pkg.dev/nerlo-vsk-prod/nerlo/scanner-base@sha256:d5aaefa8b517d1f03832091ab094e20dc73160a07ae1102af1b2e395ce6ce852",
    "ai_decision_log_ids": [
      "4aba9d4a-153b-4925-9a73-a0b8b3197110",
      "463f44e0-30e2-4f4a-aa82-c17ef6f4a0ad"
    ],
    "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": 0.4958783310139552,
        "status": "not_applicable",
        "examined": {
          "unit": "scan_targets",
          "count": 0
        },
        "metadata": {
          "source": "npm",
          "source_url": "https://www.npmjs.com/package/ecc-agentshield",
          "install_command": "npm install -g ecc-agentshield@1.4.0",
          "scans_performed": []
        },
        "display_score": null,
        "display_badge": "not_applicable"
      },
      {
        "scanner_name": "cisco-skill-scanner",
        "scanner_version": "2.0.11",
        "score": 33.5,
        "scanner_badge": "Unsafe",
        "findings": [
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "obfuscation",
            "file_path": "/repo/.pre-commit-config.yaml",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: .pre-commit-config.yaml. 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": "medium",
            "category": "unauthorized_tool_use",
            "file_path": "/repo/repo/README.md",
            "line_number": null,
            "rule_identifier": "TOOL_ABUSE_UNDECLARED_NETWORK",
            "title": "Undeclared network usage",
            "description": "Skill code uses network libraries but doesn't declare network requirement",
            "remediation": "Declare network usage in compatibility field or remove network calls"
          },
          {
            "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": "low",
            "category": "obfuscation",
            "file_path": "/repo/backend/.env.test",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: backend/.env.test. 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": "obfuscation",
            "file_path": "/repo/frontend/.env.local",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: frontend/.env.local. 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": "obfuscation",
            "file_path": "/repo/frontend/.streamlit/config.toml",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: frontend/.streamlit/config.toml. 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": "medium",
            "category": "data_exfiltration",
            "file_path": "/repo/frontend/src/utils/api.py",
            "line_number": 23,
            "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
            "title": "Outbound network request primitives that can transmit data externally",
            "description": "Pattern detected: httpx.post(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "medium",
            "category": "data_exfiltration",
            "file_path": "/repo/frontend/src/utils/api.py",
            "line_number": 64,
            "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
            "title": "Outbound network request primitives that can transmit data externally",
            "description": "Pattern detected: httpx.post(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "medium",
            "category": "data_exfiltration",
            "file_path": "/repo/frontend/src/utils/api.py",
            "line_number": 104,
            "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
            "title": "Outbound network request primitives that can transmit data externally",
            "description": "Pattern detected: httpx.get(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "obfuscation",
            "file_path": "/repo/frontend/.env.local",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: .env.local. 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": "obfuscation",
            "file_path": "/repo/frontend/.streamlit/config.toml",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: .streamlit/config.toml. 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": "medium",
            "category": "unauthorized_tool_use",
            "file_path": "/repo/frontend/repo/frontend/README.md",
            "line_number": null,
            "rule_identifier": "TOOL_ABUSE_UNDECLARED_NETWORK",
            "title": "Undeclared network usage",
            "description": "Skill code uses network libraries but doesn't declare network requirement",
            "remediation": "Declare network usage in compatibility field or remove network calls"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "social_engineering",
            "file_path": "/repo/frontend/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/frontend/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": "medium",
            "category": "data_exfiltration",
            "file_path": "/repo/frontend/src/utils/api.py",
            "line_number": 23,
            "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
            "title": "Outbound network request primitives that can transmit data externally",
            "description": "Pattern detected: httpx.post(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "medium",
            "category": "data_exfiltration",
            "file_path": "/repo/frontend/src/utils/api.py",
            "line_number": 64,
            "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
            "title": "Outbound network request primitives that can transmit data externally",
            "description": "Pattern detected: httpx.post(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "medium",
            "category": "data_exfiltration",
            "file_path": "/repo/frontend/src/utils/api.py",
            "line_number": 104,
            "rule_identifier": "DATA_EXFIL_NETWORK_REQUESTS",
            "title": "Outbound network request primitives that can transmit data externally",
            "description": "Pattern detected: httpx.get(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "obfuscation",
            "file_path": "/repo/backend/.env.test",
            "line_number": null,
            "rule_identifier": "HIDDEN_DATA_FILE",
            "title": "Hidden data file detected",
            "description": "Hidden file found: .env.test. 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": "medium",
            "category": "unauthorized_tool_use",
            "file_path": "/repo/backend/repo/backend/README.md",
            "line_number": null,
            "rule_identifier": "TOOL_ABUSE_UNDECLARED_NETWORK",
            "title": "Undeclared network usage",
            "description": "Skill code uses network libraries but doesn't declare network requirement",
            "remediation": "Declare network usage in compatibility field or remove network calls"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "low",
            "category": "social_engineering",
            "file_path": "/repo/backend/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/backend/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": 16.791684777999762,
        "status": "complete",
        "examined": {
          "unit": "skills",
          "count": 3
        },
        "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",
            "frontend",
            "backend"
          ],
          "install_command": "pip install --require-hashes -r docker/scanner-base/cisco-skill-scanner/requirements.txt",
          "severity_counts": {
            "low": 10,
            "high": 0,
            "medium": 9,
            "critical": 0,
            "informational": 3
          },
          "artifact_type_policy": "cursor_rule"
        },
        "display_score": 33.5,
        "display_badge": "Unsafe"
      },
      {
        "scanner_name": "agent-audit-kit",
        "scanner_version": "0.3.26",
        "score": 80.0,
        "scanner_badge": "Caution",
        "findings": [
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "supply-chain",
            "file_path": "pyproject.toml",
            "line_number": null,
            "rule_identifier": "AAK-SUPPLY-004",
            "title": "No lockfile present",
            "description": "A package manifest exists but no lockfile was found. Without lockfiles, dependency versions float and can be silently updated.",
            "remediation": "Generate and commit lockfile."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "supply-chain",
            "file_path": ".github/workflows/backend-ci.yml",
            "line_number": 94,
            "rule_identifier": "AAK-GHA-IMMUTABLE-001",
            "title": "Third-party GitHub Action not pinned by full commit SHA",
            "description": "A workflow in `.github/workflows/` uses a third-party Action (`owner/action@ref`) where `ref` is a tag or branch name instead of a 40-character commit SHA. A repo-takeover of the Action's publisher can re-point the tag to a malicious revision \u2014 the downstream repo consuming it will happily run the new code with `GITHUB_TOKEN` and write permissions. GitHub's April 2026 Security Roadmap ships Immutable Actions and makes SHA pinning the default policy.",
            "remediation": "Repin third-party Actions to a 40-character commit SHA and add a `# v1.2.3`-style trailing comment for humans. First-party Actions under `actions/` and `github/` are exempt (they now ship Immutable Actions). Dependabot will auto-bump SHA pins when `update-type: all` is set."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "supply-chain",
            "file_path": ".github/workflows/backend-ci.yml",
            "line_number": 97,
            "rule_identifier": "AAK-GHA-IMMUTABLE-001",
            "title": "Third-party GitHub Action not pinned by full commit SHA",
            "description": "A workflow in `.github/workflows/` uses a third-party Action (`owner/action@ref`) where `ref` is a tag or branch name instead of a 40-character commit SHA. A repo-takeover of the Action's publisher can re-point the tag to a malicious revision \u2014 the downstream repo consuming it will happily run the new code with `GITHUB_TOKEN` and write permissions. GitHub's April 2026 Security Roadmap ships Immutable Actions and makes SHA pinning the default policy.",
            "remediation": "Repin third-party Actions to a 40-character commit SHA and add a `# v1.2.3`-style trailing comment for humans. First-party Actions under `actions/` and `github/` are exempt (they now ship Immutable Actions). Dependabot will auto-bump SHA pins when `update-type: all` is set."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "medium",
            "category": "supply-chain",
            "file_path": ".github/workflows/backend-ci.yml",
            "line_number": 104,
            "rule_identifier": "AAK-GHA-IMMUTABLE-001",
            "title": "Third-party GitHub Action not pinned by full commit SHA",
            "description": "A workflow in `.github/workflows/` uses a third-party Action (`owner/action@ref`) where `ref` is a tag or branch name instead of a 40-character commit SHA. A repo-takeover of the Action's publisher can re-point the tag to a malicious revision \u2014 the downstream repo consuming it will happily run the new code with `GITHUB_TOKEN` and write permissions. GitHub's April 2026 Security Roadmap ships Immutable Actions and makes SHA pinning the default policy.",
            "remediation": "Repin third-party Actions to a 40-character commit SHA and add a `# v1.2.3`-style trailing comment for humans. First-party Actions under `actions/` and `github/` are exempt (they now ship Immutable Actions). Dependabot will auto-bump SHA pins when `update-type: all` is set."
          }
        ],
        "execution_duration_seconds": 2.7815055290120654,
        "status": "complete",
        "examined": {
          "unit": "files",
          "count": 59
        },
        "metadata": {
          "source": "pypi",
          "source_url": "https://pypi.org/project/agent-audit-kit/0.3.26/",
          "report_type": "agent-audit-kit-sast",
          "install_command": "pip install --require-hashes -r docker/scanner-base/agent-audit-kit/requirements.txt",
          "rules_evaluated": 211,
          "severity_counts": {
            "low": 0,
            "high": 0,
            "medium": 4,
            "critical": 0,
            "informational": 0
          }
        },
        "display_score": 80.0,
        "display_badge": "Caution"
      },
      {
        "scanner_name": "bearer",
        "scanner_version": "2.0.2",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 12.266112915996928,
        "status": "complete",
        "examined": {
          "unit": "files",
          "count": 38
        },
        "metadata": {
          "source": "github-releases",
          "source_url": "https://github.com/Bearer/bearer",
          "report_type": "security",
          "stderr_tail": "Analyzing codebase",
          "rules_loaded": 554,
          "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": "nerlo-behavioral",
        "scanner_version": "0.1.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 6.066562272026204,
        "status": "complete",
        "examined": {
          "unit": "files",
          "count": 30
        },
        "metadata": {
          "source": "nerlo-original",
          "source_url": "https://github.com/nerlo-ai/nerlo",
          "report_type": "nerlo-behavioral",
          "ruleset_path": "/opt/nerlo-rules/exfiltration.yaml",
          "ruleset_paths": [
            "/opt/nerlo-rules/exfiltration.yaml",
            "/opt/nerlo-rules/clipboard_exfiltration.yaml",
            "/opt/nerlo-rules/rce_endpoint.yaml",
            "/opt/nerlo-rules/taint_egress.yaml"
          ],
          "install_command": "pip install 'semgrep==1.97.0'",
          "merged_invocation": true
        },
        "display_score": 100.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "nerlo-install-instruction",
        "scanner_version": "0.1.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 6.068275701021776,
        "status": "complete",
        "examined": {
          "unit": "files",
          "count": 9
        },
        "metadata": {
          "source": "nerlo-original",
          "source_url": "https://github.com/nerlo-ai/nerlo",
          "report_type": "nerlo-install-instruction",
          "ruleset_path": "/opt/nerlo-rules/install_instructions.yaml",
          "ruleset_paths": [
            "/opt/nerlo-rules/install_instructions.yaml",
            "/opt/nerlo-rules/cursor_rules.yaml"
          ],
          "install_command": "pip install 'semgrep==1.97.0'",
          "merged_invocation": true
        },
        "display_score": 100.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "capslock",
        "scanner_version": "v0.3.2",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 0.13418891897890717,
        "status": "not_applicable",
        "examined": {
          "unit": "packages",
          "count": 0
        },
        "metadata": {
          "source": "go-module-proxy",
          "source_url": "https://github.com/google/capslock/releases/tag/v0.3.2",
          "report_type": "go-capability",
          "vendor_mode": false,
          "install_command": "GOTOOLCHAIN=local GOFLAGS=-mod=mod GOSUMDB=sum.golang.org GOBIN=/usr/local/bin go install github.com/google/capslock/cmd/capslock@v0.3.2  # github.com/google/capslock v0.3.2 h1:0ZQa9YR8s9ewFu1g5w6Rgd/lW/4dga7qJew3K6Ql7aM=",
          "environment_note": "capslock found no .go files to analyze; reported not_applicable rather than a clean 100 \u2014 the scanner never ran, so it has no verdict to contribute",
          "go_files_present": 0,
          "artifact_type_policy": "cursor_rule",
          "expected_capabilities": null,
          "artifact_type_explicit": true
        },
        "display_score": null,
        "display_badge": "not_applicable"
      },
      {
        "scanner_name": "trivy",
        "scanner_version": "0.71.0",
        "score": 0.0,
        "scanner_badge": "Unsafe",
        "findings": [
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2025-71176",
            "title": "pytest: pytest: Denial of Service or Privilege Escalation via insecure temporary directory handling",
            "description": "pytest through 9.0.2 on UNIX relies on directories with the /tmp/pytest-of-{user} name pattern, which allows local users to cause a denial of service or possibly gain privileges.",
            "remediation": "Upgrade pytest from 7.4.3 to 9.0.3 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-28684",
            "title": "python-dotenv: python-dotenv: Arbitrary file overwrite via symbolic link following",
            "description": "python-dotenv reads key-value pairs from a .env file and can set them as environment variables. Prior to version 1.2.2, `set_key()` and `unset_key()` in python-dotenv follow symbolic links when rewriting `.env` files, allowing a local attacker to overwrite arbitrary files via a crafted symlink when a cross-device rename fallback is triggered. Users should upgrade to v.1.2.2 or, as a workaround, apply the patch manually.",
            "remediation": "Upgrade python-dotenv from 1.0.0 to 1.2.2 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2024-24762",
            "title": "`python-multipart` is a streaming multipart parser for Python. When us ...",
            "description": "`python-multipart` is a streaming multipart parser for Python. When using form data, `python-multipart` uses a Regular Expression to parse the HTTP `Content-Type` header, including options. An attacker could send a custom-made `Content-Type` option that is very difficult for the RegEx to process, consuming CPU resources and stalling indefinitely (minutes or more) while holding the main event loop. This means that process can't handle any more requests, leading to regular expression denial of ser",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.7 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2024-53981",
            "title": "python-multipart: python-multipart has a DoS via deformation `multipart/form-data` boundary",
            "description": "python-multipart is a streaming multipart parser for Python. When parsing form data, python-multipart skips line breaks (CR \\r or LF \\n) in front of the first boundary and any tailing bytes after the last boundary. This happens one byte at a time and emits a log event each time, which may cause excessive logging for certain inputs. An attacker could abuse this by sending a malicious request with lots of data before the first or after the last boundary, causing high CPU load and stalling the proc",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.18 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-24486",
            "title": "python-multipart: Python-Multipart: Arbitrary file write via path traversal vulnerability",
            "description": "Python-Multipart is a streaming multipart parser for Python. Prior to version 0.0.22, a Path Traversal vulnerability exists when using non-default configuration options `UPLOAD_DIR` and `UPLOAD_KEEP_FILENAME=True`. An attacker can write uploaded files to arbitrary locations on the filesystem by crafting a malicious filename. Users should upgrade to version 0.0.22 to receive a patch or, as a workaround, avoid using `UPLOAD_KEEP_FILENAME=True` in project configurations.",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.22 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-42561",
            "title": "python-multipart: python-multipart: Denial of Service via excessive multipart part headers",
            "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.27, python-multipart has a denial of service vulnerability in multipart part header parsing. When parsing multipart/form-data, MultipartParser previously had no limit on the number of part headers or the size of an individual part header. An attacker could send a request with either many repeated headers without terminating the header block or a single very large header value, causing excessive CPU work before request reje",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.27 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "high",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-53539",
            "title": "python-multipart: Python-Multipart: Denial of Service via crafted form-urlencoded bodies",
            "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.30, when parsing application/x-www-form-urlencoded bodies, QuerystringParser located the field separator with a two step lookup: it first scanned the entire remaining buffer for &, and only when no & existed anywhere ahead did it fall back to scanning for ;. For a body that uses ; as the separator and contains no &, every field iteration performed a full failed & scan over the entire remaining buffer before locating the ne",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.30 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-40347",
            "title": "python-multipart: Python-Multipart: Denial of Service via crafted multipart/form-data requests",
            "description": "Python-Multipart is a streaming multipart parser for Python. Versions prior to 0.0.26 have a denial of service vulnerability when parsing crafted `multipart/form-data` requests with large preamble or epilogue sections. Upgrade to version 0.0.26 or later, which skips ahead to the next boundary candidate when processing leading CR/LF data and immediately discards epilogue data after the closing boundary.",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.26 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "low",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-53537",
            "title": "multipart: Python-Multipart: Information disclosure via header parsing discrepancy",
            "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.30, parse_options_header parsed Content-Disposition (and Content-Type) headers with email.message.Message, which transparently applies RFC 2231/5987 decoding. The extended parameter syntax (filename*=charset'lang'value, name*=..., and the filename*0/filename*1 continuation form) is decoded and surfaced under the bare filename/name key, and overrides the plain parameter when both are present. RFC 7578 \u00a74.2 explicitly forbid",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.30 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "low",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-53538",
            "title": "python-multipart: Python-Multipart: Information disclosure due to parser differential in form data handling",
            "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.30, QuerystringParser treated ; as a field separator in application/x-www-form-urlencoded bodies, in addition to &. The WHATWG URL standard, modern browsers, and Python's urllib.parse (since the CVE-2021-23336 fix) treat only & as a separator. This creates a parser differential: the same bytes are tokenized into different fields than a WHATWG compliant intermediary would produce, allowing an attacker to smuggle extra form ",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.30 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "low",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-53540",
            "title": "python-multipart: Python-Multipart: Negative Content-Length in parse_form buffers the entire body in memory",
            "description": "Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.31, parse_form() did not validate the Content-Length header before using it to bound its chunked read of the request body. A negative Content-Length turned the bounded read into a read-until-EOF, so the entire body was loaded into memory in a single read instead of in fixed-size chunks. This vulnerability is fixed in 0.0.31.",
            "remediation": "Upgrade python-multipart from 0.0.6 to 0.0.31 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2024-35195",
            "title": "requests: subsequent requests to the same host ignore cert verification",
            "description": "Requests is a HTTP library. Prior to 2.32.0, when making requests through a Requests `Session`, if the first request is made with `verify=False` to disable cert verification, all subsequent requests to the same host will continue to ignore cert verification regardless of changes to the value of `verify`. This behavior will continue for the lifecycle of the connection in the connection pool. This vulnerability is fixed in 2.32.0.",
            "remediation": "Upgrade requests from 2.31.0 to 2.32.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2024-47081",
            "title": "requests: Requests vulnerable to .netrc credentials leak via malicious URLs",
            "description": "Requests is a HTTP library. Due to a URL parsing issue, Requests releases prior to 2.32.4 may leak .netrc credentials to third parties for specific maliciously-crafted URLs. Users should upgrade to version 2.32.4 to receive a fix. For older versions of Requests, use of the .netrc file can be disabled with `trust_env=False` on one's Requests Session.",
            "remediation": "Upgrade requests from 2.31.0 to 2.32.4 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-25645",
            "title": "requests: Requests: Security bypass due to predictable temporary file creation",
            "description": "Requests is a HTTP library. Prior to version 2.33.0, the `requests.utils.extract_zipped_paths()` utility function uses a predictable filename when extracting files from zip archives into the system temporary directory. If the target file already exists, it is reused without validation. A local attacker with write access to the temp directory could pre-create a malicious file that would be loaded in place of the legitimate one. Standard usage of the Requests library is not affected by this vulner",
            "remediation": "Upgrade requests from 2.31.0 to 2.33.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2024-21503",
            "title": "psf/black: ReDoS via the lines_with_leading_tabs_expanded() function in strings.py file",
            "description": "Versions of the package black before 24.3.0 are vulnerable to Regular Expression Denial of Service (ReDoS) via the lines_with_leading_tabs_expanded function in the strings.py file. An attacker could exploit this vulnerability by crafting a malicious input that causes a denial of service.\r\rExploiting this vulnerability is possible when running Black on untrusted input, or if you habitually put thousands of leading tab characters in your docstrings.",
            "remediation": "Upgrade black from 23.11.0 to 24.3.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2025-71176",
            "title": "pytest: pytest: Denial of Service or Privilege Escalation via insecure temporary directory handling",
            "description": "pytest through 9.0.2 on UNIX relies on directories with the /tmp/pytest-of-{user} name pattern, which allows local users to cause a denial of service or possibly gain privileges.",
            "remediation": "Upgrade pytest from 7.4.3 to 9.0.3 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-28684",
            "title": "python-dotenv: python-dotenv: Arbitrary file overwrite via symbolic link following",
            "description": "python-dotenv reads key-value pairs from a .env file and can set them as environment variables. Prior to version 1.2.2, `set_key()` and `unset_key()` in python-dotenv follow symbolic links when rewriting `.env` files, allowing a local attacker to overwrite arbitrary files via a crafted symlink when a cross-device rename fallback is triggered. Users should upgrade to v.1.2.2 or, as a workaround, apply the patch manually.",
            "remediation": "Upgrade python-dotenv from 1.0.0 to 1.2.2 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2024-42474",
            "title": "Path traveral in Streamlit on windows",
            "description": "Streamlit is a data oriented application development framework for python. Snowflake Streamlit open source addressed a security vulnerability via the static file sharing feature. Users of hosted Streamlit app(s) on Windows were vulnerable to a path traversal vulnerability when the static file sharing feature is enabled. An attacker could utilize the vulnerability to leak the password hash of the Windows user running Streamlit. The vulnerability was patched on Jul 25, 2024, as part of Streamlit o",
            "remediation": "Upgrade streamlit from 1.29.0 to 1.37.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-33682",
            "title": "Unauthenticated SSRF Vulnerability in Streamlit on Windows (NTLM Credential Exposure)",
            "description": "Streamlit is a data oriented application development framework for python. Streamlit Open Source versions prior to 1.54.0 running on Windows hosts have an unauthenticated Server-Side Request Forgery (SSRF) vulnerability. The vulnerability arises from improper validation of attacker-supplied filesystem paths. In certain code paths, including within the `ComponentRequestHandler`, filesystem paths are resolved using `os.path.realpath()` or `Path.resolve()` before sufficient validation occurs. On Wi",
            "remediation": "Upgrade streamlit from 1.29.0 to 1.54.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "medium",
            "category": "pip",
            "file_path": "frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "GHSA-8qw9-gf7w-42x5",
            "title": "Minor fix to previous patch for CVE-2022-35918",
            "description": "### Impact\n\nThe initial vulnerability identified in Streamlit apps using custom components, allowing for directory traversal attacks, was addressed in version 1.11.1. However, a minor issue persisted, which could still potentially expose certain files on the server file-system under specific conditions.\n\n### Patches\n\nWe released an update in version 1.30.0 to further tighten security measures. Users are strongly advised to update to version 1.30.0 immediately for optimal security.\n\n### Workaroun",
            "remediation": "Upgrade streamlit from 1.29.0 to 1.30.0 or later"
          },
          {
            "tool_name": "trivy",
            "severity": "low",
            "category": "pip",
            "file_path": "frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "CVE-2026-10804",
            "title": "streamlit: Streamlit: Weak hash usage leading to low integrity and availability impact",
            "description": "A vulnerability has been found in Streamlit up to 1.53.0. Impacted is an unknown function in the library lib/streamlit/runtime/caching/hashing.py of the component Palette Handler. Such manipulation leads to use of weak hash. Local access is required to approach this attack. The attack requires a high level of complexity. The exploitability is considered difficult. The exploit has been disclosed to the public and may be used. The pull request to fix this issue awaits acceptance.",
            "remediation": "Upgrade streamlit from 1.29.0 to 1.53.1 or later"
          }
        ],
        "execution_duration_seconds": 0.34858905302826315,
        "status": "complete",
        "examined": {
          "unit": "manifests",
          "count": 2
        },
        "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": 4,
            "high": 5,
            "medium": 12,
            "critical": 0,
            "informational": 0
          },
          "manifests_scanned": [
            "backend/requirements.txt",
            "frontend/requirements.txt"
          ]
        },
        "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": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2024-38",
            "title": "PYSEC-2024-38 \u2014 PyPI fastapi@0.104.1",
            "description": "aliases: CVE-2024-24762, GHSA-2jv5-9r88-3w3p, GHSA-qf9m-vfgh-m389, PYSEC-2024-38, PYSEC-2026-1850 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-1845",
            "title": "PYSEC-2026-1845 \u2014 PyPI pytest@7.4.3",
            "description": "aliases: CVE-2025-71176, GHSA-6w46-j5rx-g56g, PYSEC-2026-1845 | CVSS: 6.8",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-2270",
            "title": "PYSEC-2026-2270 \u2014 PyPI python-dotenv@1.0.0",
            "description": "aliases: CVE-2026-28684, GHSA-mf9w-mj56-hr94, PYSEC-2026-2270 | CVSS: 6.6",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-1850",
            "title": "PYSEC-2026-1850 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2024-24762, GHSA-2jv5-9r88-3w3p, GHSA-qf9m-vfgh-m389, PYSEC-2024-38, PYSEC-2026-1850 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-1851",
            "title": "PYSEC-2026-1851 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2024-53981, GHSA-59g5-xgcq-4qw3, PYSEC-2026-1851 | CVSS: 8.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-1852",
            "title": "PYSEC-2026-1852 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2026-24486, GHSA-wp53-j4wj-2cfg, PYSEC-2026-1852 | CVSS: 8.6",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-3036",
            "title": "PYSEC-2026-3036 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2026-53539, GHSA-5rvq-cxj2-64vf, PYSEC-2026-3036 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "low",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-3037",
            "title": "PYSEC-2026-3037 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2026-53538, GHSA-6jv3-5f52-599m, PYSEC-2026-3037 | CVSS: 3.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-3038",
            "title": "PYSEC-2026-3038 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2026-40347, GHSA-mj87-hwqh-73pj, PYSEC-2026-3038 | CVSS: 5.3",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-3039",
            "title": "PYSEC-2026-3039 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2026-42561, GHSA-pp6c-gr5w-3c5g, PYSEC-2026-3039 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "low",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-3040",
            "title": "PYSEC-2026-3040 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2026-53540, GHSA-v9pg-7xvm-68hf, PYSEC-2026-3040 | CVSS: 3.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "low",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-3041",
            "title": "PYSEC-2026-3041 \u2014 PyPI python-multipart@0.0.6",
            "description": "aliases: CVE-2026-53537, GHSA-vffw-93wf-4j4q, PYSEC-2026-3041 | CVSS: 3.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-1872",
            "title": "PYSEC-2026-1872 \u2014 PyPI requests@2.31.0",
            "description": "aliases: CVE-2024-47081, GHSA-9hjg-9r4m-mvj7, PYSEC-2026-1872 | CVSS: 5.3",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-1873",
            "title": "PYSEC-2026-1873 \u2014 PyPI requests@2.31.0",
            "description": "aliases: CVE-2024-35195, GHSA-9wx4-h78v-vm56, PYSEC-2026-1873 | CVSS: 5.6",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/backend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-2275",
            "title": "PYSEC-2026-2275 \u2014 PyPI requests@2.31.0",
            "description": "aliases: CVE-2026-25645, GHSA-gc5v-m9x4-r6x2, PYSEC-2026-2275 | CVSS: 5.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2024-48",
            "title": "PYSEC-2024-48 \u2014 PyPI black@23.11.0",
            "description": "aliases: CVE-2024-21503, GHSA-fj7x-q9j7-g6q6, PYSEC-2024-48 | CVSS: 5.3",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "critical",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-2120",
            "title": "PYSEC-2026-2120 \u2014 PyPI black@23.11.0",
            "description": "aliases: CVE-2026-31900, GHSA-v53h-f6m7-xcgm, PYSEC-2026-2120 | CVSS: 9.8",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "high",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-2121",
            "title": "PYSEC-2026-2121 \u2014 PyPI black@23.11.0",
            "description": "aliases: CVE-2026-32274, GHSA-3936-cmfr-pm3m, PYSEC-2026-2121 | CVSS: 7.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-1845",
            "title": "PYSEC-2026-1845 \u2014 PyPI pytest@7.4.3",
            "description": "aliases: CVE-2025-71176, GHSA-6w46-j5rx-g56g, PYSEC-2026-1845 | CVSS: 6.8",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-2270",
            "title": "PYSEC-2026-2270 \u2014 PyPI python-dotenv@1.0.0",
            "description": "aliases: CVE-2026-28684, GHSA-mf9w-mj56-hr94, PYSEC-2026-2270 | CVSS: 6.6",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2024-153",
            "title": "PYSEC-2024-153 \u2014 PyPI streamlit@1.29.0",
            "description": "aliases: CVE-2024-42474, GHSA-rxff-vr5r-8cj5, PYSEC-2024-153 | CVSS: 6.5",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-212",
            "title": "PYSEC-2026-212 \u2014 PyPI streamlit@1.29.0",
            "description": "aliases: CVE-2026-10804, GHSA-vqwp-45wm-r9r5, PYSEC-2026-212 | CVSS: 4.7",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "PYSEC-2026-2285",
            "title": "PYSEC-2026-2285 \u2014 PyPI streamlit@1.29.0",
            "description": "aliases: CVE-2026-33682, GHSA-7p48-42j8-8846, PYSEC-2026-2285 | CVSS: 4.8",
            "remediation": null
          },
          {
            "tool_name": "osv-scanner",
            "severity": "medium",
            "category": "PyPI",
            "file_path": "/repo/frontend/requirements.txt",
            "line_number": null,
            "rule_identifier": "GHSA-8qw9-gf7w-42x5",
            "title": "GHSA-8qw9-gf7w-42x5 \u2014 PyPI streamlit@1.29.0",
            "description": "aliases: GHSA-8qw9-gf7w-42x5 | CVSS: 5.3",
            "remediation": null
          }
        ],
        "execution_duration_seconds": 2.038832780031953,
        "status": "complete",
        "examined": {
          "unit": "manifests",
          "count": 2
        },
        "metadata": {
          "source": "github-releases",
          "source_url": "https://github.com/google/osv-scanner/releases/tag/v2.3.8",
          "report_type": "osv-vulnerability",
          "ecosystems_seen": [
            "PyPI"
          ],
          "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": 3,
            "high": 7,
            "medium": 13,
            "critical": 1,
            "informational": 0
          },
          "manifests_scanned": [
            "/repo/backend/requirements.txt",
            "/repo/frontend/requirements.txt"
          ],
          "finding_id_aliases": {
            "PYSEC-2024-38": [
              "CVE-2024-24762",
              "GHSA-2jv5-9r88-3w3p",
              "GHSA-qf9m-vfgh-m389",
              "PYSEC-2026-1850"
            ],
            "PYSEC-2024-48": [
              "CVE-2024-21503",
              "GHSA-fj7x-q9j7-g6q6"
            ],
            "PYSEC-2024-153": [
              "CVE-2024-42474",
              "GHSA-rxff-vr5r-8cj5"
            ],
            "PYSEC-2026-212": [
              "CVE-2026-10804",
              "GHSA-vqwp-45wm-r9r5"
            ],
            "PYSEC-2026-1845": [
              "CVE-2025-71176",
              "GHSA-6w46-j5rx-g56g",
              "CVE-2025-71176",
              "GHSA-6w46-j5rx-g56g"
            ],
            "PYSEC-2026-1850": [
              "CVE-2024-24762",
              "GHSA-2jv5-9r88-3w3p",
              "GHSA-qf9m-vfgh-m389",
              "PYSEC-2024-38"
            ],
            "PYSEC-2026-1851": [
              "CVE-2024-53981",
              "GHSA-59g5-xgcq-4qw3"
            ],
            "PYSEC-2026-1852": [
              "CVE-2026-24486",
              "GHSA-wp53-j4wj-2cfg"
            ],
            "PYSEC-2026-1872": [
              "CVE-2024-47081",
              "GHSA-9hjg-9r4m-mvj7"
            ],
            "PYSEC-2026-1873": [
              "CVE-2024-35195",
              "GHSA-9wx4-h78v-vm56"
            ],
            "PYSEC-2026-2120": [
              "CVE-2026-31900",
              "GHSA-v53h-f6m7-xcgm"
            ],
            "PYSEC-2026-2121": [
              "CVE-2026-32274",
              "GHSA-3936-cmfr-pm3m"
            ],
            "PYSEC-2026-2270": [
              "CVE-2026-28684",
              "GHSA-mf9w-mj56-hr94",
              "CVE-2026-28684",
              "GHSA-mf9w-mj56-hr94"
            ],
            "PYSEC-2026-2275": [
              "CVE-2026-25645",
              "GHSA-gc5v-m9x4-r6x2"
            ],
            "PYSEC-2026-2285": [
              "CVE-2026-33682",
              "GHSA-7p48-42j8-8846"
            ],
            "PYSEC-2026-3036": [
              "CVE-2026-53539",
              "GHSA-5rvq-cxj2-64vf"
            ],
            "PYSEC-2026-3037": [
              "CVE-2026-53538",
              "GHSA-6jv3-5f52-599m"
            ],
            "PYSEC-2026-3038": [
              "CVE-2026-40347",
              "GHSA-mj87-hwqh-73pj"
            ],
            "PYSEC-2026-3039": [
              "CVE-2026-42561",
              "GHSA-pp6c-gr5w-3c5g"
            ],
            "PYSEC-2026-3040": [
              "CVE-2026-53540",
              "GHSA-v9pg-7xvm-68hf"
            ],
            "PYSEC-2026-3041": [
              "CVE-2026-53537",
              "GHSA-vffw-93wf-4j4q"
            ]
          },
          "cross_scanner_correlation": {
            "only_osv": [
              "PYSEC-2026-2120",
              "PYSEC-2026-2121"
            ],
            "only_trivy": [],
            "intersection_ids": [
              "CVE-2024-21503",
              "CVE-2024-24762",
              "CVE-2024-35195",
              "CVE-2024-42474",
              "CVE-2024-47081",
              "CVE-2024-53981",
              "CVE-2025-71176",
              "CVE-2026-10804",
              "CVE-2026-24486",
              "CVE-2026-25645",
              "CVE-2026-28684",
              "CVE-2026-33682",
              "CVE-2026-40347",
              "CVE-2026-42561",
              "CVE-2026-53537",
              "CVE-2026-53538",
              "CVE-2026-53539",
              "CVE-2026-53540",
              "GHSA-8qw9-gf7w-42x5"
            ]
          }
        },
        "display_score": 0.0,
        "display_badge": "Unsafe"
      },
      {
        "scanner_name": "trivy_image",
        "scanner_version": "0.71.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 4.353997064754367e-05,
        "status": "not_applicable",
        "examined": {
          "unit": "image_targets",
          "count": 0
        },
        "metadata": {
          "reason": "no OCI image acquired for this artifact"
        },
        "display_score": null,
        "display_badge": "not_applicable"
      },
      {
        "scanner_name": "govulncheck",
        "scanner_version": "v1.6.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 0.10004216700326651,
        "status": "not_applicable",
        "examined": {
          "unit": "modules",
          "count": 0
        },
        "metadata": {
          "source": "go-module-proxy",
          "source_url": "https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck",
          "report_type": "go-reachability",
          "vendor_mode": false,
          "go_mod_present": false,
          "install_command": "GOTOOLCHAIN=local GOFLAGS=-mod=mod GOSUMDB=sum.golang.org GOBIN=/usr/local/bin go install golang.org/x/vuln/cmd/govulncheck@v1.6.0  # golang.org/x/vuln v1.6.0 h1:FeMO9Rm/HwyduOztbvKcOw+zvDEPr4I4aQNSfevFcKY=",
          "offline_db_path": "/opt/govulncheck-db",
          "environment_note": "govulncheck found no go.mod, so this tree declares no Go module and no Go dependencies; reported not_applicable rather than a clean 100 \u2014 the scanner never ran, so it has no verdict to contribute"
        },
        "display_score": null,
        "display_badge": "not_applicable"
      }
    ]
  },
  "report": {
    "report_id": "78116c75-e2e1-4373-bce4-d78b83bc5f1c",
    "format": "json",
    "generated_at": "2026-08-12T20:01:24.552981+00:00",
    "scanner_filter": null,
    "signature": null
  }
}