agent-audit-kit 0.3.52__tar.gz → 0.3.56__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/CHANGELOG.cves.md +13 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/CHANGELOG.md +121 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/PKG-INFO +65 -17
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/README.md +64 -16
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/action.yml +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/__init__.py +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/sarif.py +7 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/rules/builtin.py +69 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/agent_config.py +9 -3
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/healthcare_ai.py +30 -5
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/hook_rce.py +35 -8
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/india_pii.py +15 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_cve_pins_2026_07.py +40 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_stdio_params.py +93 -16
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_tasks.py +21 -3
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/stdio_injection.py +9 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/supply_chain.py +83 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/README.md +15 -0
- agent_audit_kit-0.3.56/benchmarks/false_positive/RESULTS.md +121 -0
- agent_audit_kit-0.3.56/benchmarks/false_positive/corpus.py +126 -0
- agent_audit_kit-0.3.56/benchmarks/false_positive/results.json +88 -0
- agent_audit_kit-0.3.56/benchmarks/false_positive/run.py +172 -0
- agent_audit_kit-0.3.56/benchmarks/false_positive/stats.py +34 -0
- agent_audit_kit-0.3.56/benchmarks/false_positive/triage.md +47 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/ci-cd.md +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/comparison-gitlab-agentic-sast.md +1 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/comparison.md +1 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/coverage/owasp-agentic-top10.md +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/coverage/owasp-mcp-top10.md +1 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/getting-started.md +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/launch/hn.md +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/launch/reddit.md +3 -3
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/launch/x-thread.md +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/owasp-agentic-coverage.md +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/presets/mcp-ox-2026-04.md +1 -1
- agent_audit_kit-0.3.56/docs/research/mcp-security-baseline-v1.0.md +123 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules.md +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/entrypoint.sh +11 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/public/owasp-agentic-coverage.json +29 -5
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/pyproject.toml +1 -1
- agent_audit_kit-0.3.56/research/state-of-mcp-2026/baseline/mcp-security-baseline-v1.0-2026-07-27.json +13928 -0
- agent_audit_kit-0.3.56/research/state-of-mcp-2026/baseline/mcp-security-baseline-v1.0-2026-07-27.json.sha256 +1 -0
- agent_audit_kit-0.3.56/research/state-of-mcp-2026/baseline.py +490 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/rules.json +56 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/site/coverage/index.html +2 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_agent_config.py +28 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_argv_toctou.py +4 -3
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cves_2026.py +52 -0
- agent_audit_kit-0.3.56/tests/test_false_positive_harness.py +82 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_healthcare_ai_and_state_privacy.py +42 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_india_pii.py +19 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_auth_pathtraversal.py +3 -2
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_cve_pins_2026_07.py +87 -0
- agent_audit_kit-0.3.56/tests/test_mcp_security_baseline.py +154 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_server_card.py +4 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_stdio_cmd_inj_python.py +27 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_phase5.py +1 -1
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_sarif_github_upload.py +56 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_stdio_injection.py +31 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.agent-audit-kit.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.claude/auto-memory/config.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.editorconfig +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/FUNDING.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/dependabot.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/badge-ox-coverage.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/ci.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/codeql.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/coverage-page.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/cve-watcher.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/docker-nightly.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/mcp-security-index.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/release.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/scorecard.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/self-scan.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/sync-repo-metadata.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.github/workflows/sync-rule-count.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.gitignore +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.pre-commit-config.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/.pre-commit-hooks.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/CLAUDE.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/CLAUDE_PROMPT.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/CODE_OF_CONDUCT.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/CONTRIBUTING.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/DEEP_ANALYSIS.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/Dockerfile +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/LICENSE +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/Makefile +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/ROADMAP_2026.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/SECURITY.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/advisories.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/autofix/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/autofix/langgraph_toolnode.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/bundle.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/checks/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/checks/economic_drift.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/checks/openclaw.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/cli.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/cli_modules/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/cli_modules/rule_lint.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/corpus/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/corpus/manifest.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/coverage.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/aivss-v08-defaults.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/fhi_universal_suffixes.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/ipi_wild_payloads_2026_04.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/ox-cve-manifest.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/prisma-airs-aak-map.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/prisma-airs-catalog.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/toxic_flow_pairs.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/data/vuln_db.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/diff.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/discovery.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/engine.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/feeds/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/fix.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/ide/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/ide/lsp_diag.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/integrations/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/integrations/notify.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/llm_scan.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/models.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/aicm.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/compliance.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/console.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/json_report.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/owasp_report.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/pdf_report.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/pr_summary.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/output/sbom.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/parity/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/pinning.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/presets/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/presets/mcp-2026-07-28.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/presets/mcp-ox-2026-04.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/proxy/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/proxy/interceptor.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/remediation/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/remediation/engine.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/rules/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/sanitizers/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/sanitizers/crewai.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/sanitizers/deepseek.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/sarif/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/sarif/diff.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/_helpers.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/a2a_protocol.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/agent_harness_shared_state.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/argv_toctou.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/crewai_rce_chain.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/deepseek_v4_tool_injection.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/dns_rebind.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/docsgpt_transport_flip.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/eu_ai_act_art15_locale.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/gha_hardening.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/gpt_researcher_transport_flip.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/hook_injection.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/ipi_wild_corpus.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/langchain_prompt_loader.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/langchain_vuln.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/langgraph_toolnode.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/legal_compliance.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/llm_sql_rce.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/log_injection.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/log_token_leak.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/marketplace_manifest.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_atlassian.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_auth_pathtraversal.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_auth_patterns.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_config.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_deprecated_features.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_env_placeholder_exfil.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_fhi.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_http_noauth_server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_inspector_cve.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_marketplace_fetch.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_middleware.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_noauth_default.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_sampling_capability.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_sdk_hardening.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_server_auth.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_server_card.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_ssrf_toolarg.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_stateless_migration.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_stdio_launcher.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_tool_unsafe_eval.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_toolgate_asymmetry.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/mcp_tunnel.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/metis_pomdp.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/neo4j_cve.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/oauth_misconfig.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/oauth_surface.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/openapi_smells.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/openclaw_privesc.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/pin_drift.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/project_deal_drift.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/prtitle_ipi.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/routines.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/rust_pattern_scan.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/rust_scan.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/sandbox_self_disable.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/secret_exposure.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/shared_resource_authz.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/skill_lifecycle_attribution.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/skill_poisoning.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/skill_untrusted_exec_path.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/social_agent_hijack.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/splunk_mcp_config.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/ssrf_patterns.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/ssrf_redirect.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/ssrf_toctou.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/stainless_lineage.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/state_privacy.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/taint_analysis.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/tool_poisoning.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/toxic_flow.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/transport_limits.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/transport_security.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/trust_boundary.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/typescript_pattern_scan.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scanners/typescript_scan.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scoring/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scoring/aivss.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/scoring/aivss_schema.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/translators/__init__.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/translators/pipelock.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/translators/prisma_airs.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/verification.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/vuln_db.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/agent_audit_kit/watch.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/crawler.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/determinism/RESULTS.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/determinism/run.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/index_builder.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/results-2026-06-13.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/run_benchmark.sh +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/sample_configs/sample_01_clean.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/sample_configs/sample_02_secrets.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/sample_configs/sample_03_no_auth.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/sample_configs/sample_04_shell_injection.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/sample_configs/sample_05_mixed.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/benchmarks/sources.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/ci/gitlab/agent-audit-kit.gitlab-ci.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/CNAME +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/DISTRIBUTION-CHECKLIST.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/RELEASING.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/azure-pipelines.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/circleci.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/comparisons.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/disclosure-policy.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/gitlab-ci.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/index.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/launch/CHECKLIST.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/launch/press.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/metrics.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/notes/adjudicator-pattern.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/owasp-mapping.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/presets/mcp-2026-07-28.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/reports/mcp-2026-07-28-readiness.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/research-log.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/roadmap/ox-mcp-2026-05-01-batch.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rule-schema.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-AZURE-MCP-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-AZURE-MCP-NOAUTH-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-LANGCHAIN-SSRF-REDIR-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-LMDEPLOY-VL-SSRF-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-MCP-AUTH-PATHTRAVERSAL-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-MCP-MARKETPLACE-CONFIG-FETCH-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-MCP-STDIO-CMD-INJ-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-MCP-STDIO-CMD-INJ-002.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-MCP-STDIO-CMD-INJ-003.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-MCP-STDIO-CMD-INJ-004.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-SPLUNK-MCP-TOKEN-LEAK-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-SSRF-TOCTOU-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/AAK-TOXICFLOW-001.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/docs/rules/index.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/editors/zed/README.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/editors/zed/extension.toml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/README.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/case-studies/damn-vulnerable-mcp/README.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-inspired.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-settings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/case-studies/damn-vulnerable-mcp/scan-results.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/case-studies/damn-vulnerable-mcp/scan-results.sarif +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/ci-integration/README.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/ci-integration/docker-one-liner.sh +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/ci-integration/github-actions-sarif.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/ci-integration/gitlab-ci-scan.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/ci-integration/pre-commit-config.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/run-all-examples.sh +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/01-no-auth-remote/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/01-no-auth-remote/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/02-shell-injection/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/02-shell-injection/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/03-hardcoded-secrets/.gitignore +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/03-hardcoded-secrets/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/03-hardcoded-secrets/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/04-hook-exfiltration/.claude/settings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/04-hook-exfiltration/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/05-trust-boundary-violations/.claude/settings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/05-trust-boundary-violations/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/05-trust-boundary-violations/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/06-tool-poisoning/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/06-tool-poisoning/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/07-tainted-tool-function/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/07-tainted-tool-function/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/08-transport-insecurity/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/08-transport-insecurity/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/09-a2a-insecure-agent/agent-card.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/09-a2a-insecure-agent/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/10-supply-chain-risks/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/10-supply-chain-risks/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/10-supply-chain-risks/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/11-legal-compliance/expected-findings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/11-legal-compliance/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/11-legal-compliance/subproject/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/examples/vulnerable-configs/README.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/launch/MARKET-RESEARCH-2026-04-12.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/launch/awesome-list-prs/awesome-opensource-security.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/launch/awesome-list-prs/awesome-security.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/launch/blog-50-mcp-servers.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/launch/demo.cast +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/launch/owasp-outreach.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/launch/state-of-mcp-security-2026.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/mkdocs.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/public/badges/ox-coverage.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/public/corpora/manifest.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/releases/v0.3.10.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/releases/v0.3.5.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/releases/v0.3.6.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/releases/v0.3.7.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/releases/v0.3.8.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/releases/v0.3.9.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/requirements-lock.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/.gitignore +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/PREVALENCE.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/REPORT.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/blackhat-arsenal-abstract.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/blackhat-briefings-abstract.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/corpus/registry-manifest.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/fetch_registry.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/results.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/research/state-of-mcp-2026/run_report.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/schema/ox-cve-manifest.schema.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/backfill_cve_property.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/build_coverage_page.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/close_duplicate_cve_issues.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/cve_watcher.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/gen_coverage.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/gen_owasp_coverage.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/generate_lockfile.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/install-pre-commit.sh +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/mcp_2026_07_28_readiness.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/sync_repo_metadata.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/sync_rule_count.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/sync_scanner_count.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/scripts/watch_csa_mcp_baseline.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/site/coverage/ox.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/site/coverage/prisma-airs.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/conftest.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/LICENSES.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/clean_mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/clean_settings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/crewai/safe/full_chain.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/crewai/vulnerable/full_chain.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/a2a_2026/vulnerable_card.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/comment-and-control-2026-04-25/patched/review_agent.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/comment-and-control-2026-04-25/vulnerable/review_agent.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2025-65720-gpt-researcher/config-safe-rejected/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2025-65720-gpt-researcher/config-unsafe/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2025-65720-gpt-researcher/pin-vulnerable-git/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2025-65720-gpt-researcher/pin-vulnerable-pypi/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2025-66335/patched/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2025-66335/vulnerable/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-20205/patched-splunk-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-20205/redacted-token-log/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-20205/vulnerable-splunk-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-20205/vulnerable-token-log/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-20205-config/patched-yaml/splunk-mcp.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-20205-config/vulnerable-inputs/inputs.conf +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-20205-config/vulnerable-yaml/splunk-mcp.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-23744-mcp-inspector/vendored-fork/vendor/mcpjam-inspector/server.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26015-docsgpt/config-safe-no-override/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26015-docsgpt/config-safe-rejected/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26015-docsgpt/config-unsafe/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26015-docsgpt/pin-safe/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26015-docsgpt/pin-vulnerable/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26015-docsgpt/pin-vulnerable-git/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26030-semantic-kernel/pin-safe/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26030-semantic-kernel/pin-safe-floor/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-26030-semantic-kernel/pin-vulnerable/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-27825-atlassian/patched-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-27825-atlassian/vulnerable/agent.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-30615/patched/py_argv_allowlist.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-30615/vulnerable/py_os_system_stdin.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-30615/vulnerable/py_subprocess_shell.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-30615/vulnerable/ts_execa_shell.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-30623-litellm/patched/requirements-floor.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-30623-litellm/patched/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-30623-litellm/vulnerable/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-32211/patched-with-auth/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-32211/vulnerable-no-auth/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-32211-server/pyproject.toml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-32211-server/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-33032/patched/router.go +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-33032/vulnerable/router.go +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-33032/vulnerable/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-33032/vulnerable/server.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-33626/patched-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-33626/vulnerable/pipeline.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-39313/length-capped/http.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-39313/patched/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-39313/vulnerable/http.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-39313/vulnerable/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-40068-claudecode/pin-safe/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-40068-claudecode/pin-vulnerable/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-40933/vulnerable/flow.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41481/patched-no-redirect/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41481/patched-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41481/vulnerable-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41481/vulnerable-redirect/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41488/patched-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41488/patched-pinned/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41488/vulnerable-pin/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-41488/vulnerable-toctou/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-44717-mcp-calculate-server/pin-safe/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-44717-mcp-calculate-server/pin-safe-floor/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-44717-mcp-calculate-server/pin-vulnerable/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7061-chatgpt-mcp/safe/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7061-chatgpt-mcp/vulnerable-git/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7061-chatgpt-mcp/vulnerable-shorthand/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7591-astro-mcp/source-safe/no_import.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7591-astro-mcp/source-safe/parametrized.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7591-astro-mcp/source-safe/tagged_template.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7591-astro-mcp/source-unsafe/index.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/cve-2026-7591-astro-mcp/vulnerable/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/apollo-patched/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/apollo-vulnerable/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/java-patched/pom.xml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/java-vulnerable/pom.xml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/python-patched/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/python-pattern-guarded/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/python-pattern-guarded/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/python-pattern-unguarded/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/python-pattern-unguarded/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/dns-rebind-sdk-class/python-vulnerable/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/healthcare_ai/safe_skill.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/healthcare_ai/vulnerable_skill.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/hook_rce/safe_settings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/hook_rce/vulnerable_settings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/india_pii/safe.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/india_pii/vulnerable.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/langchain/safe_requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/langchain/vulnerable_prompt.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/langchain/vulnerable_requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/marketplace/safe.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/marketplace/vulnerable.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/mcp_auth/safe_server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/mcp_auth/vulnerable_server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/oauth/safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/oauth/vulnerable.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/patched_java.java +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/patched_py.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/patched_rust.rs +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/patched_ts.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/vulnerable_java.java +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/vulnerable_py.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/vulnerable_rust.rs +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ox-mcp-stdio-class/vulnerable_ts.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/routines/safe.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/routines/vulnerable.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/skills/safe.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/skills/vulnerable.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ssrf/safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/ssrf/vulnerable.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/state_privacy/safe_privacy.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/state_privacy/vulnerable_privacy.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/tasks/safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/cves/tasks/vulnerable.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/deepseek/safe/agent.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/deepseek/vulnerable/agent.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/env_with_secrets +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/documented_risk/.agent-audit-kit.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/documented_risk/agent.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/multilingual_en_only/agent.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/multilingual_en_only/evals/welcome.en.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/multilingual_internal_only/agent.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/multilingual_with_coverage/agent.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/multilingual_with_coverage/evals/welcome.de.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/multilingual_with_coverage/evals/welcome.en.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/multilingual_with_coverage/evals/welcome.fr.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/eu_ai_act_art15_locale/single_locale/agent.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/harness_shared_state/safe_multi_agent.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/harness_shared_state/unsafe_multi_agent.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ipi-wild-2026-04-24/poisoned_template.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/mcp-fhi/clean/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/mcp-fhi/vulnerable/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/documented-risk/.agent-audit-kit.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/documented-risk/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/documented-risk/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/python/sanitized/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/python/sanitized/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/python/vulnerable/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/python/vulnerable/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/typescript/sanitized/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/typescript/sanitized/server.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/typescript/vulnerable/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-2026-04-15/typescript/vulnerable/server.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-marketplace-fetch/patched.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-marketplace-fetch/vulnerable.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/ox-mcp-marketplace-fetch/vulnerable.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/incidents/vercel-2026-04-19/app.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/kong_konnect/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/langchain_prompt_loader/constant_safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/langchain_prompt_loader/user_path_unsafe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/langchain_prompt_loader/validated_safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/langgraph/safe/graph.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/langgraph/vulnerable/graph.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_deprecated/clean_migrated/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_deprecated/config_all/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_deprecated/logging_py/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_deprecated/roots_py/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_deprecated/sampling_py/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_deprecated/stdlib_logging_fp/util.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/clean_python/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/clean_python/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/config_clean/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/config_vulnerable/.mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/documented_risk/.agent-audit-kit.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/documented_risk/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/documented_risk/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/vulnerable_python/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/vulnerable_python/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/vulnerable_typescript/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_sampling/vulnerable_typescript/server.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_ssrf/safe_tool.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_ssrf/vulnerable_tool.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/clean_py/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/clean_py/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/documented_risk/.agent-audit-kit.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/documented_risk/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/documented_risk/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_001_py/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_001_py/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_001_ts/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_001_ts/server.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_002_py/client.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_002_py/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_003_k8s/service.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_003_nginx/nginx.conf +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_003_store_py/handlers.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_003_store_py/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_004_client/client.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_stateless/vulnerable_004_client/requirements.txt +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_tool_unsafe_eval/eval_safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_tool_unsafe_eval/eval_unsafe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/mcp_tool_unsafe_eval/no_tool_decorator.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/metis_pomdp/refusal_refeed_safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/metis_pomdp/refusal_refeed_unsafe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/metis_pomdp/scoring_sink_unsafe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/openapi_smells/clean.openapi.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/openapi_smells/smelly.openapi.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/openclaw/role_default_admin_unsafe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/openclaw/role_explicit_safe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/package_with_risks.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/pipelock/policy_invalid.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/pipelock/policy_minimal.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/pipelock/policy_with_parity.yaml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/project_deal/safe/pricer.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/project_deal/vulnerable/pricer.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/server_cards/clean.server-card.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/server_cards/poisoned.server-card.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/skill_lifecycle/safe_skill.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/skill_lifecycle/unsafe_skill.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/social_agents/tiktok_human_in_loop.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/social_agents/tiktok_unsafe.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/stainless_lineage/config_root/stainless.yml +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/stainless_lineage/generated_python_sdk/client.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/stainless_lineage/generated_typescript_sdk/client.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/stainless_lineage/handwritten/server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/vulnerable_hooks.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/vulnerable_mcp.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/fixtures/vulnerable_settings.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_a2a_2026.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_a2a_protocol.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_action.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_aicm.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_anthropic_sdk_hardening.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cli.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_compliance_output.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_compliance_v2.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_coverage_tables.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_crewai_nvd_and_evasion.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_csa_baseline_watcher.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2025_66335.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2025_66414_python_sdk.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_20205_config.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_20205_splunk.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_32211.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_32211_server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_33626.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_35568_java.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_35577_apollo.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_39313.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_40576_excel.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_40608_next_ai_draw.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_41481.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_2026_41488.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_fix_and_watch_and_advisories.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cve_watcher_dedup.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_cyclonedx_aibom.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_determinism_benchmark.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_diff.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_discovery.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_engine.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_engine_ignore_paths.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_eu_ai_act_art15_locale.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_examples.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_fix.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_flowise.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_gha_immutable.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_hook_injection.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_index_builder.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_integrations_notify.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_kong_konnect_cve_2026_13341.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_legal_compliance.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_llm_scan.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_llm_scan_mod.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_llm_sql_rce.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_marketplace_manifest.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_marketplace_sources.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_attestation.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_config.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_deprecated_features.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_env_placeholder_exfil.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_gateway_registry_cve_2026_14471.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_http_noauth_server.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_marketplace_fetch.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_noauth_default.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_sampling_capability.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_ssrf_toolarg.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_stateless_migration.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_stdio_cmd_inj_java.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_stdio_cmd_inj_rust.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_stdio_cmd_inj_typescript.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_stdio_launcher.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_toolgate_asymmetry.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcp_tunnel.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_mcpwn.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_nsa_mcp_csi.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_oauth_resource_indicators.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_oauth_surface.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_owasp_agentic_coverage.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_owasp_public_json.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_owasp_report.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_owasp_report_output.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_parity_region_drift.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_phase3.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_pin_drift.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_pinning.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_pinning_mod.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_pr_summary.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_preset_mcp_2026_07_28.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_preset_mcp_ox_2026_04.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_proxy.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_repo_metadata_sync.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_rule_count_sync.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_sandbox_self_disable.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_sarif_fingerprints.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_sarif_output.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_scoring.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_secret_exposure.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_serena_cve_2026_49471.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_shared_resource_authz.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_skill_poisoning.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_skill_untrusted_exec_path.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_state_of_mcp_report.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_supply_chain.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_taint_analysis.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_tool_poisoning.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_toxic_flow.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_transport_security.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_trust_boundary.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_typescript_pattern_scan_sql.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_10_features.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_10_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_11_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_13_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_14_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_15_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_16_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_17_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_18_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_19_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_1_cve_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_20_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_21_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_22_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_8_features.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_8_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_9_features.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_9_features_p1.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_v0_3_9_rules.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_verification.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_verification_mod.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/tests/test_vuln_db.py +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/vscode-extension/.vscodeignore +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/vscode-extension/CLAUDE.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/vscode-extension/README.md +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/vscode-extension/package.json +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/vscode-extension/src/extension.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/vscode-extension/src/sarifReader.ts +0 -0
- {agent_audit_kit-0.3.52 → agent_audit_kit-0.3.56}/vscode-extension/tsconfig.json +0 -0
|
@@ -16,6 +16,19 @@ open.
|
|
|
16
16
|
> issue. The per-CVE latency figures in the tables are **measurements recorded at
|
|
17
17
|
> the time**, kept as dated facts, not a standing promise.
|
|
18
18
|
|
|
19
|
+
## 2026-07-21 (v0.3.56)
|
|
20
|
+
|
|
21
|
+
Five `cve-response` issues triaged for the v0.3.56 cut — two pinned, three
|
|
22
|
+
dispositioned with rationale.
|
|
23
|
+
|
|
24
|
+
| CVE | Reference | AAK rule / disposition | Triaged |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| CVE-2026-46555 (whatsapp-mcp < 0.2.1 — `whatsapp-bridge` unauthenticated loopback HTTP API + no Host validation + absolute `media_path` → arbitrary file exfil as WhatsApp attachments, DNS-rebinding; CVSS 7.7) | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-46555) | **Pinned** `AAK-MCP-WHATSAPP-CVE-2026-46555-001` (fix floor 0.2.1; fires on manifest/lockfile references below 0.2.1) | 2026-07-21 |
|
|
27
|
+
| CVE-2026-57495 (AgenticMail bridge-wake indirect prompt injection — external mail resumes the operator's Claude Code session with `permissionMode: bypassPermissions`, embedding attacker-controlled `from`/`subject`/`preview` into a fully-privileged agent) | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-57495) | **Pinned** `AAK-MCP-AGENTICMAIL-CVE-2026-57495-001` — one rule, per-package fix floors: `@agenticmail/claudecode` ≥ 0.2.39, `@agenticmail/codex` ≥ 0.1.33, `@agenticmail/core` ≥ 0.9.43, `@agenticmail/openclaw` ≥ 0.5.71 | 2026-07-21 |
|
|
28
|
+
| CVE-2026-53378 (Linux kernel `drm/colorop` blob-property reference leak) | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-53378) | **Out of scope** — a Linux-kernel DRM reference-counting memory leak, not an MCP/agent artifact. Surfaced only because the NVD keyword feed matched; there is no AAK config/dependency surface. No rule. | 2026-07-21 |
|
|
29
|
+
| CVE-2026-55544 (NextCRM 0.12.1 — MCP campaign tools ignore the authenticated user ID → BOLA/IDOR across campaigns; fixed 0.12.2; CVSS 7.6) | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-55544) | **Not pinnable** — server-side broken-object-level-authorization in a self-hosted Next.js app (`nextcrm-app`), which is not an npm/PyPI dependency a scanned project pins, and the flaw has no client `.mcp.json` or dependency-manifest signal. Outside AAK's detection surface; no rule. | 2026-07-21 |
|
|
30
|
+
| CVE-2026-55550 (NextCRM 0.12.1 — MCP product tools skip role checks → any low-priv user mutates the shared catalog; fixed 0.12.3; CVSS 7.1) | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-55550) | **Not pinnable** — same class and app as CVE-2026-55544 (self-hosted server-side authorization logic). Outside AAK's detection surface; no rule. | 2026-07-21 |
|
|
31
|
+
|
|
19
32
|
## Dispositioned 2026-07-19 (v0.3.52)
|
|
20
33
|
|
|
21
34
|
| Incident / Anchor | Reference | AAK rule(s) / disposition | Dispositioned |
|
|
@@ -7,6 +7,127 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added — 2026-07-19..20 CVE-response pins (262 → 264 rules)
|
|
11
|
+
|
|
12
|
+
- `AAK-MCP-WHATSAPP-CVE-2026-46555-001` — whatsapp-mcp < 0.2.1 (unauthenticated
|
|
13
|
+
loopback `whatsapp-bridge` + `media_path` traversal → arbitrary file exfil /
|
|
14
|
+
DNS-rebinding; CVSS 7.7). Fix floor 0.2.1.
|
|
15
|
+
- `AAK-MCP-AGENTICMAIL-CVE-2026-57495-001` — AgenticMail bridge-wake indirect
|
|
16
|
+
prompt injection into a `bypassPermissions` agent; one rule, per-package fix
|
|
17
|
+
floors (`@agenticmail/claudecode` ≥ 0.2.39, `/codex` ≥ 0.1.33, `/core` ≥
|
|
18
|
+
0.9.43, `/openclaw` ≥ 0.5.71).
|
|
19
|
+
- Triaged three more `cve-response` issues without a new rule (dispositioned in
|
|
20
|
+
`CHANGELOG.cves.md`): CVE-2026-53378 (Linux-kernel DRM leak — out of scope) and
|
|
21
|
+
CVE-2026-55544 / CVE-2026-55550 (NextCRM server-side MCP-tool authorization in a
|
|
22
|
+
self-hosted app — no pinnable dependency or client-config surface). Clearing the
|
|
23
|
+
`cve-response` backlog unblocks the release gate for the v0.3.56 tag.
|
|
24
|
+
|
|
25
|
+
### Added — frozen, citable MCP security baseline v1.0 (`research/state-of-mcp-2026/baseline.py`)
|
|
26
|
+
|
|
27
|
+
- A `baseline` command that emits an **immutable, byte-deterministic** research
|
|
28
|
+
snapshot, `mcp-security-baseline-v1.0-2026-07-27`, recording — per config and in
|
|
29
|
+
aggregate — corpus size + collection window, the auth-posture distribution
|
|
30
|
+
(no-auth / bearer / OAuth 2.1 / unknown), transport distribution (stdio / SSE /
|
|
31
|
+
streamable-HTTP), per-rule HIGH/CRITICAL hit counts, and the benign-slice
|
|
32
|
+
HIGH/CRITICAL false-positive rate with its denominator (4/368; 2/4 adjudicated).
|
|
33
|
+
Adds **no** detection rules — reuses `engine.run_scan`, `scoring.compute_score`,
|
|
34
|
+
and the `oauth_misconfig` signals. Offline, no network, no account.
|
|
35
|
+
- **Determinism + tamper-evidence:** sorted keys, stable float rounding, and no
|
|
36
|
+
wall-clock in the payload (the collection window is data from the corpus
|
|
37
|
+
manifest). Two runs over the same corpus produce identical bytes; the snapshot
|
|
38
|
+
is fixed under **SHA-256
|
|
39
|
+
`320b43072d930edbc18f050795939dbee3831e4da2f88b3483ea12ec7bb6551f`**, cited in
|
|
40
|
+
the report doc and guarded by `tests/test_mcp_security_baseline.py`.
|
|
41
|
+
- **`--compare BASELINE_FILE`** re-scans the corpus and prints a per-dimension
|
|
42
|
+
delta table (absolute + percentage-point) against v1.0, so the post-2026-07-28
|
|
43
|
+
re-measure (scheduled **2026-08-11**) is one command.
|
|
44
|
+
- Docs: `docs/research/mcp-security-baseline-v1.0.md` (what was measured, the exact
|
|
45
|
+
collection window, methodology, the FP-rate caveat, the reproducibility caveat,
|
|
46
|
+
and the explicit pre-spec statement), linked from the README research section.
|
|
47
|
+
This is the **pre-2026-07-28-spec** baseline; **no** post-spec comparison is
|
|
48
|
+
claimed until the spec ships.
|
|
49
|
+
|
|
50
|
+
Version 0.3.55 → 0.3.56.
|
|
51
|
+
|
|
52
|
+
### Fixed — P0/P1 integration bugs (SARIF upload, lockfile-aware pins)
|
|
53
|
+
|
|
54
|
+
- **P0 — invalid SARIF `fixes[]` broke `codeql-action/upload-sarif`.** Every
|
|
55
|
+
result emitted a `fixes` object with only `description` and no
|
|
56
|
+
`artifactChanges` (required for a machine-applicable patch), so GitHub rejected
|
|
57
|
+
the whole file. Removed it — the remediation is already in the rule-level
|
|
58
|
+
`help`/`helpMarkdown`; the per-finding copy now goes in a valid `properties`
|
|
59
|
+
bag. The SARIF regression test now enforces the `fixes`-require-`artifactChanges`
|
|
60
|
+
invariant, so this can't recur silently.
|
|
61
|
+
- **P0/P1 — the Docker action's SARIF upload was a silent no-op.** `upload-sarif`
|
|
62
|
+
was defined but never used; the action only emits the SARIF (`sarif-file`
|
|
63
|
+
output). It now prints a loud notice and the README/Quick Start document the
|
|
64
|
+
canonical `github/codeql-action/upload-sarif` step (with `security-events:
|
|
65
|
+
write`) instead of implying the action uploads.
|
|
66
|
+
- **P1 — version-pin CVE rules were false-positive-after-fix on lockfiles.**
|
|
67
|
+
`mcp_cve_pins_2026_07` and `supply_chain`'s Serena pin fired on a lockfile
|
|
68
|
+
reference without parsing the resolved version, so a correct upgrade couldn't
|
|
69
|
+
clear the finding (forcing users to suppress the CVE rule). Added a shared
|
|
70
|
+
lockfile resolver (uv.lock, poetry.lock, Pipfile.lock, package-lock.json,
|
|
71
|
+
pnpm-lock.yaml, yarn.lock) — pins now fire only when the resolved version is
|
|
72
|
+
below the fix floor.
|
|
73
|
+
|
|
74
|
+
### Fixed — P2 rule-scoping precision (drives the benign-slice FP rate)
|
|
75
|
+
|
|
76
|
+
Seven critical/high rules were firing on safe or benign patterns. Each fix
|
|
77
|
+
narrows the scope so the rule still fires on the real shape but clears the
|
|
78
|
+
false positive; each ships a benign-passes regression guard and a
|
|
79
|
+
malicious-still-fires guard.
|
|
80
|
+
|
|
81
|
+
- **AAK-STDIO-001** — an argv-list `subprocess.run(["cmd", tainted], shell=False)`
|
|
82
|
+
is the *safe* form (a tainted element is an argument, not a shell-injection
|
|
83
|
+
vector). It no longer fires on argv lists; only `shell=True` or a
|
|
84
|
+
string/dynamic command does.
|
|
85
|
+
- **AAK-MCP-STDIO-CMD-INJ-001** — fired on *any* `StdioServerParameters(...)`
|
|
86
|
+
inside a function that merely had a generically-named arg (`config`, `data`).
|
|
87
|
+
Now requires an actual source→sink taint path: a network-controlled value
|
|
88
|
+
(request/env/json, a suspicious param, or a var assigned from one) must flow
|
|
89
|
+
into `command`/`args`. Constant command/args never fire.
|
|
90
|
+
- **AAK-AGENT-001** — the catch-all `` `...` `` arm flagged *every* inline-code
|
|
91
|
+
span in an agent-instruction file (`` `cargo build` ``, `` `make` ``,
|
|
92
|
+
`` `npx tsc` `` — dozens of hits per CLAUDE.md). Removed it; genuinely
|
|
93
|
+
dangerous directives (`sh -c`, `rm -rf`, `curl … | bash`) still match.
|
|
94
|
+
- **AAK-HOOK-RCE-001** — scanned any `hooks/` directory, catching **React
|
|
95
|
+
hooks** (`src/hooks/use-audit.ts`) whose `` `${event}` `` template literals
|
|
96
|
+
collided with the "hook" keyword. Now scoped to `.claude/` hook scripts, and
|
|
97
|
+
a py/js/ts script's interpolation must reach a shell-exec sink.
|
|
98
|
+
- **AAK-TASKS-002 / -003** — fired on any module mentioning a bare `task_id`
|
|
99
|
+
(every Celery/job-queue worker). Now gated on a concrete MCP Tasks primitive
|
|
100
|
+
(a task class/store/manager, SEP-1686, or a `tasks/*` method).
|
|
101
|
+
- **AAK-HEALTHCARE-AI-004 / -005** — fired on any markdown using clinical or
|
|
102
|
+
incident words: an ops runbook ("in an emergency, page on-call") tripped the
|
|
103
|
+
crisis rule; a clinical dataset README tripped the disclosure rule. Both now
|
|
104
|
+
require a conversational-agent surface, and 005's trigger is restricted to
|
|
105
|
+
unambiguous self-harm terms (dropping bare "crisis"/"emergency").
|
|
106
|
+
- **AAK-INDIA-PII-001** — a bare 12-digit number that coincidentally passes the
|
|
107
|
+
Verhoeff checksum (~1 in 10) fired as an Aadhaar. The unformatted form now
|
|
108
|
+
needs an Aadhaar/UID cue nearby; the grouped `XXXX XXXX XXXX` form still fires
|
|
109
|
+
on its own.
|
|
110
|
+
|
|
111
|
+
No rule changes (still 262). Version 0.3.53 → 0.3.55.
|
|
112
|
+
|
|
113
|
+
### Added — benign-slice false-positive benchmark (`benchmarks/false_positive/`)
|
|
114
|
+
|
|
115
|
+
- A reproducible, offline, deterministic harness that measures and publishes
|
|
116
|
+
AAK's **benign-slice HIGH/CRITICAL false-positive rate** — nobody in this
|
|
117
|
+
category publishes one. Reuses `engine.run_scan` + `rules.builtin.RULES` (no
|
|
118
|
+
scanner/scorer reimplemented) over a **pre-registered 368-config benign slice**
|
|
119
|
+
of the MCP Registry (predicate: official + active + declares an auth mode + not
|
|
120
|
+
in a shipped CVE feed; non-circular — "benign" is registry metadata, not "AAK
|
|
121
|
+
found nothing"). `stats.py` adds a stdlib Wilson interval (no new runtime dep).
|
|
122
|
+
- **Measured figure (2026-07-20 run):** 4 HIGH/CRITICAL findings across the 368
|
|
123
|
+
configs (1.1%); hand-adjudicated (single rater) to **2 FP / 1 TP / 1 ambiguous
|
|
124
|
+
→ 2/4 = 50% benign-slice HIGH/CRITICAL FP rate, Wilson 95% CI [15%, 85%]**
|
|
125
|
+
(small n, wide interval — stated, not smoothed). Both FPs share one root cause:
|
|
126
|
+
`AAK-MCP-001` doesn't recognise custom API-key headers (`X-*-Key`) as auth —
|
|
127
|
+
filed as #475. Published bad-and-all; that is the credibility value.
|
|
128
|
+
- README claim 1 (determinism) extended with the measured-precision line. No rule
|
|
129
|
+
changes (still 262).
|
|
130
|
+
|
|
10
131
|
## [0.3.52] - 2026-07-19
|
|
11
132
|
|
|
12
133
|
### Added — State of MCP 2026 report: corpus expanded to 1,374 configs (closes #23)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-audit-kit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.56
|
|
4
4
|
Summary: Security scanner for MCP-connected AI agent pipelines
|
|
5
5
|
Project-URL: Homepage, https://github.com/sattyamjjain/agent-audit-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/sattyamjjain/agent-audit-kit
|
|
@@ -42,7 +42,7 @@ Description-Content-Type: text/markdown
|
|
|
42
42
|
<a href="https://pypi.org/project/agent-audit-kit/"><img src="https://img.shields.io/pypi/v/agent-audit-kit.svg" alt="PyPI"></a>
|
|
43
43
|
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.9+-blue.svg" alt="Python 3.9+"></a>
|
|
44
44
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
|
|
45
|
-
<a href="#what-it-scans"><img src="https://img.shields.io/badge/rules-
|
|
45
|
+
<a href="#what-it-scans"><img src="https://img.shields.io/badge/rules-264-blue.svg" alt="Rules: 264"></a>
|
|
46
46
|
<a href="#frameworks--standards"><img src="https://img.shields.io/badge/OWASP_Agentic-10%2F10-green.svg" alt="OWASP Agentic: 10/10"></a>
|
|
47
47
|
<a href="#frameworks--standards"><img src="https://img.shields.io/badge/OWASP_MCP-10%2F10-green.svg" alt="OWASP MCP: 10/10"></a>
|
|
48
48
|
<a href="https://sattyamjjain.github.io/agent-audit-kit/"><img src="https://img.shields.io/badge/MCP_Security_Index-live-blue.svg" alt="MCP Security Index"></a>
|
|
@@ -58,10 +58,10 @@ Security scanner for MCP-connected AI agent pipelines. Finds misconfigurations,
|
|
|
58
58
|
|
|
59
59
|
**Two things it does that hosted scanners can't:**
|
|
60
60
|
|
|
61
|
-
1. **Runs fully offline and deterministically.** Your code, configs, and secrets never leave the machine; the default scan path makes zero network calls, and the same input always yields the same finding (no model in the loop). This is measured, not just claimed: [20/20 identical runs → one shared SHA-256 finding-set digest, 0% variance](benchmarks/determinism/RESULTS.md). Scanners that route findings through an LLM judge can't guarantee a byte-identical re-run — so CI diffs, audit re-runs, and regression baselines stay stable here. No account, no telemetry.
|
|
61
|
+
1. **Runs fully offline and deterministically.** Your code, configs, and secrets never leave the machine; the default scan path makes zero network calls, and the same input always yields the same finding (no model in the loop). This is measured, not just claimed: [20/20 identical runs → one shared SHA-256 finding-set digest, 0% variance](benchmarks/determinism/RESULTS.md). Scanners that route findings through an LLM judge can't guarantee a byte-identical re-run — so CI diffs, audit re-runs, and regression baselines stay stable here. No account, no telemetry. Precision is measured the same way, not asserted: we publish a reproducible, hand-adjudicated [benign-slice HIGH/CRITICAL false-positive rate](benchmarks/false_positive/RESULTS.md) — with a Wilson confidence interval and any offending rule filed as an issue.
|
|
62
62
|
2. **Produces auditor-ready compliance-evidence packs.** SARIF for the GitHub Security tab plus PDF evidence reports mapped to 13 frameworks (EU AI Act, SOC 2, ISO 27001/42001, HIPAA, NIST AI RMF, and regional regimes) — what you hand an auditor, not just a list of findings.
|
|
63
63
|
|
|
64
|
-
- **<!-- rule-count:total -->
|
|
64
|
+
- **<!-- rule-count:total -->264<!-- /rule-count --> rules** across 12 security categories, covering the 2026 CVE wave
|
|
65
65
|
- Rule count is computed from the registry and verified in CI (`test_rule_count_is_canonical`).
|
|
66
66
|
- **<!-- scanner-count:total -->84<!-- /scanner-count --> scanner modules** including AST-based Python taint analysis and regex pattern scanners for TypeScript/JavaScript and Rust
|
|
67
67
|
- **16 CLI commands**: `scan`, `discover`, `pin`, `verify`, `fix`, `score`, `update`, `proxy`, `kill`, `watch`, plus `export-rules`, `verify-bundle`, `sbom`, `report`, `install-precommit`, and the Security-Advisories scan flag
|
|
@@ -101,12 +101,19 @@ jobs:
|
|
|
101
101
|
runs-on: ubuntu-latest
|
|
102
102
|
steps:
|
|
103
103
|
- uses: actions/checkout@v4
|
|
104
|
-
- uses: sattyamjjain/agent-audit-kit@v0.3.
|
|
104
|
+
- uses: sattyamjjain/agent-audit-kit@v0.3.56
|
|
105
|
+
id: scan
|
|
105
106
|
with:
|
|
106
107
|
fail-on: high
|
|
108
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
109
|
+
if: always() # upload even if the scan failed the build
|
|
110
|
+
with:
|
|
111
|
+
sarif_file: ${{ steps.scan.outputs.sarif-file }}
|
|
107
112
|
```
|
|
108
113
|
|
|
109
|
-
|
|
114
|
+
The scan step emits SARIF; the `upload-sarif` step publishes it, so findings
|
|
115
|
+
appear as **inline PR annotations** and in the **Security tab**. See
|
|
116
|
+
[SARIF Integration](#sarif-integration).
|
|
110
117
|
|
|
111
118
|
### CLI
|
|
112
119
|
|
|
@@ -121,7 +128,7 @@ agent-audit-kit scan .
|
|
|
121
128
|
# .pre-commit-config.yaml
|
|
122
129
|
repos:
|
|
123
130
|
- repo: https://github.com/sattyamjjain/agent-audit-kit
|
|
124
|
-
rev: v0.3.
|
|
131
|
+
rev: v0.3.56
|
|
125
132
|
hooks:
|
|
126
133
|
- id: agent-audit-kit
|
|
127
134
|
```
|
|
@@ -146,7 +153,7 @@ agent-audit-kit scan examples/vulnerable-configs/04-hook-exfiltration/
|
|
|
146
153
|
| Category | Rules | What It Detects |
|
|
147
154
|
|----------|:-----:|-----------------|
|
|
148
155
|
| **MCP Configuration** | <!-- category-count:MCP_CONFIG -->61<!-- /category-count --> | Missing auth middleware (CVE-2026-33032 class), empty IP allowlists, wildcard CORS, path traversal in resource handlers, SSRF (CWE-918), OAuth 2.1 misconfig (PKCE/S256/DPoP), Tasks primitive leakage (SEP-1686), shell injection, MCPwn middleware-asymmetry, Azure MCP no-auth (CVE-2026-32211), MCP Inspector vendored fork (CVE-2026-23744), 2026-07-28 stateless-MCP migration (`Mcp-Session-Id` reliance, removed `tasks/list`, sticky-session deployment, un-cached client `tools/list`), deny-by-default attested admission (signed clearance / `/.well-known/mcp-clearance` / pinned trust root — arXiv:2605.24248), Anthropic MCP Tunnels gateway (SSRF defense disabled / `upstream.disable_ip_validation`, HTTPS upstream missing `upstream.tls.ca_file` trust anchor, tunnel token + TLS private keys hardcoded in CI / committed Kubernetes Secrets — research preview 2026-05-19), stdio launcher injection (`npx`/`node`/`bash`/`sh`/`python` with `-c`/`-e`/`--eval`, or non-pinned interpolated argv — CVE-2026-40933), tool-gate enforcement asymmetry (allowlist / read-only / non-destructive check applied in `tools/list` but not `tools/call` — CVE-2026-46519), unauthenticated MCP HTTP/SSE server on `0.0.0.0` / wildcard CORS (GitLab/Nocturne/AgenticMail no-auth class — CVE-2026-44895/44830/50287), plus the non-loopback no-auth **launch surface** — `mcp.json`/`claude_desktop_config.json`/`*.mcp.yaml` `command`/`args`, Docker `--host 0.0.0.0`/`-p 0.0.0.0:`, and MCP Inspector / FastMCP startup binding `0.0.0.0`/`::`/a routable IP with no token or `DANGEROUSLY_OMIT_AUTH` set (CWE-306; MCP Inspector exemplar CVE-2026-23744; mcp-pinot `0.0.0.0:8080` no-auth CVE-2026-49257; Windows-MCP wildcard-CORS no-auth CVE-2026-48989; ~12,520 exposed services per Censys), argv-rebuild-after-allowlist command-injection TOCTOU (a command/argv approved against an allow/deny list is re-split / re-joined / extended before `subprocess`/`os.exec*` / Node `child_process.spawn`/`execa` with no re-check — `AAK-MCP-ARGV-TOCTOU-001`, **CWE-77 + CWE-367 / CVE-2026-53822**), MCP server unauthenticated-by-default / fail-open auth (an auth function returning truthy on an empty/unset secret, a placeholder/empty secret literal — `""`/`changeme`/`os.environ.get(...,"")` — or a warning-only secret gate on a `0.0.0.0` bind — `AAK-MCP-NOAUTH-DEFAULT`, **CWE-306 + CWE-862 / CVE-2026-48814** (incomplete fix of CVE-2026-46701)), bearer-token → session-file path traversal (an untrusted token / `Authorization` header joined into a session file path used for an existence/read check with no separator-reject or resolve-and-contain guard — `AAK-MCP-AUTH-PATHTRAVERSAL-001`, **CWE-22 / CVE-2026-52830**, fast-mcp-telegram < 0.19.1), MCP tool-argument URL SSRF (an MCP tool handler passing a caller-supplied `url`/`endpoint`/`target` argument straight into an outbound `requests`/`httpx`/`urllib`/`aiohttp` fetch with no host/scheme allow-list — `ast` parameter→fetch taint for Python, regex fallback for TS/JS/Rust — `AAK-MCP-SSRF-001`, **CWE-918 / CVE-2026-14748**, AIAnytime Awesome-MCP-Server `mcp-wiki/wiki-summary`), Serena MCP toolkit unauthenticated-dashboard RCE (`serena-agent` < 1.5.2 — an unauthenticated Flask dashboard on a fixed port reachable via DNS rebinding writes the agent's persistent memory, chained with `execute_shell_command` `shell=True` to remote code execution — `AAK-MCP-SERENA-CVE-2026-49471-001`, **CWE-306 + CWE-352 / CVE-2026-49471**, HIGH 8.3), MCP 2026-07-28 deprecated features (the `roots` / `sampling` / `logging` capabilities annotation-deprecated under the RC's new 12-month deprecation policy — flagged across config + server source so authors migrate before removal — `AAK-MCP-DEPRECATED-001..003`, **SEP-2577 / SEP-2596**), OAuth `iss`-validation gap (an authorization-code client that handles the auth response but never validates the RFC 9207 `iss` parameter, the RC's actual new OAuth requirement — `AAK-OAUTH-006`, **RFC 9207 / SEP-2468**), RFC 8707 Resource-Indicator absence (an OAuth 2.1 flow / MCP client config that never sets the `resource` parameter, so issued tokens aren't audience-bound and a token minted for one MCP server can be replayed at another — the confused-deputy / audience-confusion class; mandatory in the **ratified** MCP 2025-11-25 auth spec, independent of the 2026-07-28 RC — `AAK-OAUTH-007`, **RFC 8707 / RFC 9728 §7.4**), RFC 9728 Protected-Resource-Metadata discovery gap (a remote MCP server config that embeds a static `Authorization`/`Bearer`/`auth` credential with no `/.well-known/oauth-protected-resource` discovery path, or server source enforcing bearer auth without serving PRM — the resource-discovery arm of the 2026-07-28 auth profile — `AAK-OAUTH-008`, **RFC 9728**) |
|
|
149
|
-
| **Supply Chain** | <!-- category-count:SUPPLY_CHAIN -->
|
|
156
|
+
| **Supply Chain** | <!-- category-count:SUPPLY_CHAIN -->66<!-- /category-count --> | Vulnerable LangChain / langchain-text-splitters versions, named pin rules for `astro-mcp-server` / `chatgpt-mcp-server` / `docsgpt` / `gpt-researcher` / `litellm` / `mcp-calculate-server` / `semantic-kernel` / `@anthropic-ai/claude-code` / `apache-doris-mcp-server` / `excel-mcp-server`, OX MCP-STDIO command-injection (Python/TS/Java/Rust) — `AAK-MCP-STDIO-CMD-INJ-001..004` — Stainless-generator lineage, marketplace.json signatures / typosquat / mutable refs, unpinned packages, dangerous install scripts, untrusted-search-path executable override in skill/install flows (`.env`-sourced binary, workspace-prepended `PATH`, `shutil.which` over a tainted PATH, Homebrew env override — `AAK-SKILL-UNTRUSTED-EXEC-PATH`, **CWE-426 / CVE-2026-53819**), and the **2026-07 MCP/agent CVE disclosure wave** — verified PyPI/npm version-pins for `litellm` < 1.84.0 (MCP auth bypass + skills-archive traversal, **CVE-2026-59822/59820**), `cline` < 3.0.30 (Hub-dashboard WS origin bypass → RCE, **CVE-2026-59723**), `mcp-text-editor` ≤ 1.0.2 (path traversal, **CVE-2026-15138**), `n8n` < 2.27.4/2.28.1 (MCP tool credential-domain bypass, **CVE-2026-59207**), `ruflo` < 3.16.3 (unauth MCP bridge RCE, **CVE-2026-59726**, CVSS 10), `@arikusi/deepseek-mcp-server` < 1.8.0 (unbound session IDs + unauth HTTP transport, **CVE-2026-55604/55605**), `mcp-server-kubernetes` < 3.9.0 (kubectl `--server` argument injection, **CVE-2026-61459**, CVSS 9.8), and `astrbot` ≤ 4.25.2 (MCP-test-endpoint SSRF, **CVE-2026-15501**) |
|
|
150
157
|
| **Tool Poisoning** | <!-- category-count:TOOL_POISONING -->27<!-- /category-count --> | Invisible Unicode / bidi, skill frontmatter injection, SKILL.md post-install commands, data-exfil primitives, skill name hijacking, cross-tool references, rug-pull (SHA-256 pinning), `@mcp.tool` unsafe-eval (CVE-2026-44717 generalization), OpenAPI smells (Hermes paper LAZY/BLOATED/TANGLED), Metis POMDP refusal-refeed + scoring-sink, SkillsVote lifecycle attribution, MCP Calculate Server pin, Kong Konnect MCP server < 1.0.0 indirect prompt injection → unintended Konnect/Admin API requests (`AAK-MCP-KONG-CVE-2026-13341-001`, **CVE-2026-13341**, HIGH 7.4). Indirect-prompt-injection detection (`AAK-POISON-001..006`) runs against tool descriptions **and** every per-parameter `inputSchema.properties.*.description` (recursive — nested objects, array items, `anyOf`/`allOf`/`oneOf`), so instruction text hidden in a single argument's docstring is caught |
|
|
151
158
|
| **Secret Exposure** | <!-- category-count:SECRET_EXPOSURE -->18<!-- /category-count --> | Anthropic/OpenAI/AWS/GitHub/GitLab/GCP keys, Shannon-entropy detection, `.env` leaks, private-key files, hardcoded credential surface, token-leak via log sinks (CVE-2026-20205), `${VAR}`/process.env placeholder resolution on user-supplied MCP URLs → secret exfiltration (CVE-2026-32625) |
|
|
152
159
|
| **Agent Config** | <!-- category-count:AGENT_CONFIG -->15<!-- /category-count --> | Routines permission escalation + schedule injection + audit-log gaps, AGENTS.md/CLAUDE.md/.cursorrules hijacking, hidden Unicode, encoded payloads, internal scanner-fail signal, Project Deal economic-drift detection |
|
|
@@ -158,7 +165,7 @@ agent-audit-kit scan examples/vulnerable-configs/04-hook-exfiltration/
|
|
|
158
165
|
| **Trust Boundaries** | <!-- category-count:TRUST_BOUNDARY -->12<!-- /category-count --> | `enableAllProjectMcpServers`, API URL redirects, wildcard permissions, missing deny rules, missing allowlists, Claude Code folder-trust bypass (CVE-2026-40068) |
|
|
159
166
|
| **MCP Server Card** | <!-- category-count:MCP_SERVER_CARD -->4<!-- /category-count --> | Static audit of SEP-1649 discovery cards (`/.well-known/mcp/server-card.json`): tool-description poisoning in `tools[].description` (`AAK-MCP-CARD-001`, reuses the AAK-POISON detectors), declared-transport vs advertised-capability mismatch — remote transport with `authentication.required: false`, or `stdio` advertising a remote endpoint (`AAK-MCP-CARD-002`), missing / placeholder signature / provenance (`AAK-MCP-CARD-003`), and over-broad capability / wildcard-scope claims (`AAK-MCP-CARD-004`) |
|
|
160
167
|
|
|
161
|
-
**<!-- rule-count:total -->
|
|
168
|
+
**<!-- rule-count:total -->264<!-- /rule-count --> rules total.** Every finding includes severity, evidence, remediation, OWASP references, Adversa references, and CVE links where applicable.
|
|
162
169
|
|
|
163
170
|
### MCP Server Card scanning (SEP-1649)
|
|
164
171
|
|
|
@@ -295,12 +302,34 @@ CLI flags always take precedence over config file values.
|
|
|
295
302
|
|
|
296
303
|
## SARIF Integration
|
|
297
304
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
305
|
+
This action **emits** SARIF (the `sarif-file` output); it does **not** upload to
|
|
306
|
+
Code Scanning itself. Add the canonical `github/codeql-action/upload-sarif` step
|
|
307
|
+
so findings appear in the **Security tab** and as **inline PR annotations**:
|
|
308
|
+
|
|
309
|
+
```yaml
|
|
310
|
+
permissions:
|
|
311
|
+
security-events: write # required for the upload
|
|
312
|
+
contents: read
|
|
313
|
+
|
|
314
|
+
steps:
|
|
315
|
+
- uses: actions/checkout@v4
|
|
316
|
+
- uses: sattyamjjain/agent-audit-kit@v0.3.56
|
|
317
|
+
id: scan
|
|
318
|
+
with:
|
|
319
|
+
fail-on: high
|
|
320
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
321
|
+
if: always() # upload even when the scan step failed the build
|
|
322
|
+
with:
|
|
323
|
+
sarif_file: ${{ steps.scan.outputs.sarif-file }}
|
|
324
|
+
```
|
|
302
325
|
|
|
303
|
-
SARIF output conforms to [SARIF 2.1.0](https://json.schemastore.org/sarif-2.1.0.json)
|
|
326
|
+
SARIF output conforms to [SARIF 2.1.0](https://json.schemastore.org/sarif-2.1.0.json)
|
|
327
|
+
with `fingerprints`, `partialFingerprints`, `security-severity` scores, and
|
|
328
|
+
`%SRCROOT%` relative paths. Each finding carries **OWASP references** and **CVE
|
|
329
|
+
links** via the rule-level `help`; per-finding remediation is in result
|
|
330
|
+
`properties`. (No SARIF `fixes[]` — those require machine-applicable
|
|
331
|
+
`artifactChanges`, so emitting prose there would make Code Scanning reject the
|
|
332
|
+
upload.)
|
|
304
333
|
|
|
305
334
|
---
|
|
306
335
|
|
|
@@ -354,8 +383,8 @@ cross-reference, not a head-to-head benchmark.
|
|
|
354
383
|
| --- | --- | --- |
|
|
355
384
|
| **ASI01** | Goal Hijack | 13 |
|
|
356
385
|
| **ASI02** | Tool Misuse | 39 |
|
|
357
|
-
| **ASI03** | Memory Poisoning |
|
|
358
|
-
| **ASI04** | Identity & Privilege Abuse |
|
|
386
|
+
| **ASI03** | Memory Poisoning | 63 |
|
|
387
|
+
| **ASI04** | Identity & Privilege Abuse | 51 |
|
|
359
388
|
| **ASI05** | Cascading Failures | 33 |
|
|
360
389
|
| **ASI06** | Unauthorized Capability Acquisition | 35 |
|
|
361
390
|
| **ASI07** | Plan Injection | 9 |
|
|
@@ -399,7 +428,7 @@ See [`docs/comparisons.md`](docs/comparisons.md) for a fully-sourced version. Ve
|
|
|
399
428
|
| Feature | AgentAuditKit | Microsoft AGT | Snyk Agent Scan | Semgrep Multimodal |
|
|
400
429
|
|---------|:---:|:---:|:---:|:---:|
|
|
401
430
|
| Scope | Static scanner + compliance PDFs | Runtime governance | Static + runtime | Multimodal SAST |
|
|
402
|
-
| Detection rules (static) | **<!-- rule-count:total -->
|
|
431
|
+
| Detection rules (static) | **<!-- rule-count:total -->264<!-- /rule-count -->** | Runtime policies, not rules | ~30 | LLM-assisted |
|
|
403
432
|
| OWASP Agentic 10/10 | **Yes** | Yes | Partial | Partial |
|
|
404
433
|
| OWASP MCP 10/10 | **Yes** | No (runtime-focused) | No | No |
|
|
405
434
|
| Auditor-ready PDF compliance | **12 frameworks** | No | 0 | 0 |
|
|
@@ -472,6 +501,25 @@ manifest; the corpus refresh is the one network step, `fetch_registry.py`):
|
|
|
472
501
|
make report # regenerate the report numbers, offline + deterministic
|
|
473
502
|
```
|
|
474
503
|
|
|
504
|
+
### Frozen baseline (pre-2026-07-28-spec)
|
|
505
|
+
|
|
506
|
+
The same measurement, **frozen and citable** as
|
|
507
|
+
**[`docs/research/mcp-security-baseline-v1.0.md`](docs/research/mcp-security-baseline-v1.0.md)**:
|
|
508
|
+
an immutable, byte-deterministic snapshot
|
|
509
|
+
([`mcp-security-baseline-v1.0-2026-07-27.json`](research/state-of-mcp-2026/baseline/mcp-security-baseline-v1.0-2026-07-27.json))
|
|
510
|
+
recording, per config and in aggregate, the corpus size + collection window, the
|
|
511
|
+
auth-posture distribution (no-auth / bearer / OAuth 2.1 / unknown), the transport
|
|
512
|
+
distribution, the per-rule HIGH/CRITICAL hit counts, and the benign-slice
|
|
513
|
+
false-positive rate with its denominator — tamper-evident under
|
|
514
|
+
**SHA-256 `320b43072d930edbc18f050795939dbee3831e4da2f88b3483ea12ec7bb6551f`**. It
|
|
515
|
+
is the **pre-2026-07-28-spec** reference; the re-measure is scheduled for
|
|
516
|
+
**2026-08-11** and is one command:
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
python research/state-of-mcp-2026/baseline.py \
|
|
520
|
+
--compare research/state-of-mcp-2026/baseline/mcp-security-baseline-v1.0-2026-07-27.json
|
|
521
|
+
```
|
|
522
|
+
|
|
475
523
|
Scan your own in 30s, fully offline: `pip install agent-audit-kit && agent-audit-kit scan .`
|
|
476
524
|
See which AAK rules cover each OWASP MCP slot in the
|
|
477
525
|
[public coverage leaderboard](docs/coverage/owasp-mcp-top10.md).
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<a href="https://pypi.org/project/agent-audit-kit/"><img src="https://img.shields.io/pypi/v/agent-audit-kit.svg" alt="PyPI"></a>
|
|
9
9
|
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.9+-blue.svg" alt="Python 3.9+"></a>
|
|
10
10
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
|
|
11
|
-
<a href="#what-it-scans"><img src="https://img.shields.io/badge/rules-
|
|
11
|
+
<a href="#what-it-scans"><img src="https://img.shields.io/badge/rules-264-blue.svg" alt="Rules: 264"></a>
|
|
12
12
|
<a href="#frameworks--standards"><img src="https://img.shields.io/badge/OWASP_Agentic-10%2F10-green.svg" alt="OWASP Agentic: 10/10"></a>
|
|
13
13
|
<a href="#frameworks--standards"><img src="https://img.shields.io/badge/OWASP_MCP-10%2F10-green.svg" alt="OWASP MCP: 10/10"></a>
|
|
14
14
|
<a href="https://sattyamjjain.github.io/agent-audit-kit/"><img src="https://img.shields.io/badge/MCP_Security_Index-live-blue.svg" alt="MCP Security Index"></a>
|
|
@@ -24,10 +24,10 @@ Security scanner for MCP-connected AI agent pipelines. Finds misconfigurations,
|
|
|
24
24
|
|
|
25
25
|
**Two things it does that hosted scanners can't:**
|
|
26
26
|
|
|
27
|
-
1. **Runs fully offline and deterministically.** Your code, configs, and secrets never leave the machine; the default scan path makes zero network calls, and the same input always yields the same finding (no model in the loop). This is measured, not just claimed: [20/20 identical runs → one shared SHA-256 finding-set digest, 0% variance](benchmarks/determinism/RESULTS.md). Scanners that route findings through an LLM judge can't guarantee a byte-identical re-run — so CI diffs, audit re-runs, and regression baselines stay stable here. No account, no telemetry.
|
|
27
|
+
1. **Runs fully offline and deterministically.** Your code, configs, and secrets never leave the machine; the default scan path makes zero network calls, and the same input always yields the same finding (no model in the loop). This is measured, not just claimed: [20/20 identical runs → one shared SHA-256 finding-set digest, 0% variance](benchmarks/determinism/RESULTS.md). Scanners that route findings through an LLM judge can't guarantee a byte-identical re-run — so CI diffs, audit re-runs, and regression baselines stay stable here. No account, no telemetry. Precision is measured the same way, not asserted: we publish a reproducible, hand-adjudicated [benign-slice HIGH/CRITICAL false-positive rate](benchmarks/false_positive/RESULTS.md) — with a Wilson confidence interval and any offending rule filed as an issue.
|
|
28
28
|
2. **Produces auditor-ready compliance-evidence packs.** SARIF for the GitHub Security tab plus PDF evidence reports mapped to 13 frameworks (EU AI Act, SOC 2, ISO 27001/42001, HIPAA, NIST AI RMF, and regional regimes) — what you hand an auditor, not just a list of findings.
|
|
29
29
|
|
|
30
|
-
- **<!-- rule-count:total -->
|
|
30
|
+
- **<!-- rule-count:total -->264<!-- /rule-count --> rules** across 12 security categories, covering the 2026 CVE wave
|
|
31
31
|
- Rule count is computed from the registry and verified in CI (`test_rule_count_is_canonical`).
|
|
32
32
|
- **<!-- scanner-count:total -->84<!-- /scanner-count --> scanner modules** including AST-based Python taint analysis and regex pattern scanners for TypeScript/JavaScript and Rust
|
|
33
33
|
- **16 CLI commands**: `scan`, `discover`, `pin`, `verify`, `fix`, `score`, `update`, `proxy`, `kill`, `watch`, plus `export-rules`, `verify-bundle`, `sbom`, `report`, `install-precommit`, and the Security-Advisories scan flag
|
|
@@ -67,12 +67,19 @@ jobs:
|
|
|
67
67
|
runs-on: ubuntu-latest
|
|
68
68
|
steps:
|
|
69
69
|
- uses: actions/checkout@v4
|
|
70
|
-
- uses: sattyamjjain/agent-audit-kit@v0.3.
|
|
70
|
+
- uses: sattyamjjain/agent-audit-kit@v0.3.56
|
|
71
|
+
id: scan
|
|
71
72
|
with:
|
|
72
73
|
fail-on: high
|
|
74
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
75
|
+
if: always() # upload even if the scan failed the build
|
|
76
|
+
with:
|
|
77
|
+
sarif_file: ${{ steps.scan.outputs.sarif-file }}
|
|
73
78
|
```
|
|
74
79
|
|
|
75
|
-
|
|
80
|
+
The scan step emits SARIF; the `upload-sarif` step publishes it, so findings
|
|
81
|
+
appear as **inline PR annotations** and in the **Security tab**. See
|
|
82
|
+
[SARIF Integration](#sarif-integration).
|
|
76
83
|
|
|
77
84
|
### CLI
|
|
78
85
|
|
|
@@ -87,7 +94,7 @@ agent-audit-kit scan .
|
|
|
87
94
|
# .pre-commit-config.yaml
|
|
88
95
|
repos:
|
|
89
96
|
- repo: https://github.com/sattyamjjain/agent-audit-kit
|
|
90
|
-
rev: v0.3.
|
|
97
|
+
rev: v0.3.56
|
|
91
98
|
hooks:
|
|
92
99
|
- id: agent-audit-kit
|
|
93
100
|
```
|
|
@@ -112,7 +119,7 @@ agent-audit-kit scan examples/vulnerable-configs/04-hook-exfiltration/
|
|
|
112
119
|
| Category | Rules | What It Detects |
|
|
113
120
|
|----------|:-----:|-----------------|
|
|
114
121
|
| **MCP Configuration** | <!-- category-count:MCP_CONFIG -->61<!-- /category-count --> | Missing auth middleware (CVE-2026-33032 class), empty IP allowlists, wildcard CORS, path traversal in resource handlers, SSRF (CWE-918), OAuth 2.1 misconfig (PKCE/S256/DPoP), Tasks primitive leakage (SEP-1686), shell injection, MCPwn middleware-asymmetry, Azure MCP no-auth (CVE-2026-32211), MCP Inspector vendored fork (CVE-2026-23744), 2026-07-28 stateless-MCP migration (`Mcp-Session-Id` reliance, removed `tasks/list`, sticky-session deployment, un-cached client `tools/list`), deny-by-default attested admission (signed clearance / `/.well-known/mcp-clearance` / pinned trust root — arXiv:2605.24248), Anthropic MCP Tunnels gateway (SSRF defense disabled / `upstream.disable_ip_validation`, HTTPS upstream missing `upstream.tls.ca_file` trust anchor, tunnel token + TLS private keys hardcoded in CI / committed Kubernetes Secrets — research preview 2026-05-19), stdio launcher injection (`npx`/`node`/`bash`/`sh`/`python` with `-c`/`-e`/`--eval`, or non-pinned interpolated argv — CVE-2026-40933), tool-gate enforcement asymmetry (allowlist / read-only / non-destructive check applied in `tools/list` but not `tools/call` — CVE-2026-46519), unauthenticated MCP HTTP/SSE server on `0.0.0.0` / wildcard CORS (GitLab/Nocturne/AgenticMail no-auth class — CVE-2026-44895/44830/50287), plus the non-loopback no-auth **launch surface** — `mcp.json`/`claude_desktop_config.json`/`*.mcp.yaml` `command`/`args`, Docker `--host 0.0.0.0`/`-p 0.0.0.0:`, and MCP Inspector / FastMCP startup binding `0.0.0.0`/`::`/a routable IP with no token or `DANGEROUSLY_OMIT_AUTH` set (CWE-306; MCP Inspector exemplar CVE-2026-23744; mcp-pinot `0.0.0.0:8080` no-auth CVE-2026-49257; Windows-MCP wildcard-CORS no-auth CVE-2026-48989; ~12,520 exposed services per Censys), argv-rebuild-after-allowlist command-injection TOCTOU (a command/argv approved against an allow/deny list is re-split / re-joined / extended before `subprocess`/`os.exec*` / Node `child_process.spawn`/`execa` with no re-check — `AAK-MCP-ARGV-TOCTOU-001`, **CWE-77 + CWE-367 / CVE-2026-53822**), MCP server unauthenticated-by-default / fail-open auth (an auth function returning truthy on an empty/unset secret, a placeholder/empty secret literal — `""`/`changeme`/`os.environ.get(...,"")` — or a warning-only secret gate on a `0.0.0.0` bind — `AAK-MCP-NOAUTH-DEFAULT`, **CWE-306 + CWE-862 / CVE-2026-48814** (incomplete fix of CVE-2026-46701)), bearer-token → session-file path traversal (an untrusted token / `Authorization` header joined into a session file path used for an existence/read check with no separator-reject or resolve-and-contain guard — `AAK-MCP-AUTH-PATHTRAVERSAL-001`, **CWE-22 / CVE-2026-52830**, fast-mcp-telegram < 0.19.1), MCP tool-argument URL SSRF (an MCP tool handler passing a caller-supplied `url`/`endpoint`/`target` argument straight into an outbound `requests`/`httpx`/`urllib`/`aiohttp` fetch with no host/scheme allow-list — `ast` parameter→fetch taint for Python, regex fallback for TS/JS/Rust — `AAK-MCP-SSRF-001`, **CWE-918 / CVE-2026-14748**, AIAnytime Awesome-MCP-Server `mcp-wiki/wiki-summary`), Serena MCP toolkit unauthenticated-dashboard RCE (`serena-agent` < 1.5.2 — an unauthenticated Flask dashboard on a fixed port reachable via DNS rebinding writes the agent's persistent memory, chained with `execute_shell_command` `shell=True` to remote code execution — `AAK-MCP-SERENA-CVE-2026-49471-001`, **CWE-306 + CWE-352 / CVE-2026-49471**, HIGH 8.3), MCP 2026-07-28 deprecated features (the `roots` / `sampling` / `logging` capabilities annotation-deprecated under the RC's new 12-month deprecation policy — flagged across config + server source so authors migrate before removal — `AAK-MCP-DEPRECATED-001..003`, **SEP-2577 / SEP-2596**), OAuth `iss`-validation gap (an authorization-code client that handles the auth response but never validates the RFC 9207 `iss` parameter, the RC's actual new OAuth requirement — `AAK-OAUTH-006`, **RFC 9207 / SEP-2468**), RFC 8707 Resource-Indicator absence (an OAuth 2.1 flow / MCP client config that never sets the `resource` parameter, so issued tokens aren't audience-bound and a token minted for one MCP server can be replayed at another — the confused-deputy / audience-confusion class; mandatory in the **ratified** MCP 2025-11-25 auth spec, independent of the 2026-07-28 RC — `AAK-OAUTH-007`, **RFC 8707 / RFC 9728 §7.4**), RFC 9728 Protected-Resource-Metadata discovery gap (a remote MCP server config that embeds a static `Authorization`/`Bearer`/`auth` credential with no `/.well-known/oauth-protected-resource` discovery path, or server source enforcing bearer auth without serving PRM — the resource-discovery arm of the 2026-07-28 auth profile — `AAK-OAUTH-008`, **RFC 9728**) |
|
|
115
|
-
| **Supply Chain** | <!-- category-count:SUPPLY_CHAIN -->
|
|
122
|
+
| **Supply Chain** | <!-- category-count:SUPPLY_CHAIN -->66<!-- /category-count --> | Vulnerable LangChain / langchain-text-splitters versions, named pin rules for `astro-mcp-server` / `chatgpt-mcp-server` / `docsgpt` / `gpt-researcher` / `litellm` / `mcp-calculate-server` / `semantic-kernel` / `@anthropic-ai/claude-code` / `apache-doris-mcp-server` / `excel-mcp-server`, OX MCP-STDIO command-injection (Python/TS/Java/Rust) — `AAK-MCP-STDIO-CMD-INJ-001..004` — Stainless-generator lineage, marketplace.json signatures / typosquat / mutable refs, unpinned packages, dangerous install scripts, untrusted-search-path executable override in skill/install flows (`.env`-sourced binary, workspace-prepended `PATH`, `shutil.which` over a tainted PATH, Homebrew env override — `AAK-SKILL-UNTRUSTED-EXEC-PATH`, **CWE-426 / CVE-2026-53819**), and the **2026-07 MCP/agent CVE disclosure wave** — verified PyPI/npm version-pins for `litellm` < 1.84.0 (MCP auth bypass + skills-archive traversal, **CVE-2026-59822/59820**), `cline` < 3.0.30 (Hub-dashboard WS origin bypass → RCE, **CVE-2026-59723**), `mcp-text-editor` ≤ 1.0.2 (path traversal, **CVE-2026-15138**), `n8n` < 2.27.4/2.28.1 (MCP tool credential-domain bypass, **CVE-2026-59207**), `ruflo` < 3.16.3 (unauth MCP bridge RCE, **CVE-2026-59726**, CVSS 10), `@arikusi/deepseek-mcp-server` < 1.8.0 (unbound session IDs + unauth HTTP transport, **CVE-2026-55604/55605**), `mcp-server-kubernetes` < 3.9.0 (kubectl `--server` argument injection, **CVE-2026-61459**, CVSS 9.8), and `astrbot` ≤ 4.25.2 (MCP-test-endpoint SSRF, **CVE-2026-15501**) |
|
|
116
123
|
| **Tool Poisoning** | <!-- category-count:TOOL_POISONING -->27<!-- /category-count --> | Invisible Unicode / bidi, skill frontmatter injection, SKILL.md post-install commands, data-exfil primitives, skill name hijacking, cross-tool references, rug-pull (SHA-256 pinning), `@mcp.tool` unsafe-eval (CVE-2026-44717 generalization), OpenAPI smells (Hermes paper LAZY/BLOATED/TANGLED), Metis POMDP refusal-refeed + scoring-sink, SkillsVote lifecycle attribution, MCP Calculate Server pin, Kong Konnect MCP server < 1.0.0 indirect prompt injection → unintended Konnect/Admin API requests (`AAK-MCP-KONG-CVE-2026-13341-001`, **CVE-2026-13341**, HIGH 7.4). Indirect-prompt-injection detection (`AAK-POISON-001..006`) runs against tool descriptions **and** every per-parameter `inputSchema.properties.*.description` (recursive — nested objects, array items, `anyOf`/`allOf`/`oneOf`), so instruction text hidden in a single argument's docstring is caught |
|
|
117
124
|
| **Secret Exposure** | <!-- category-count:SECRET_EXPOSURE -->18<!-- /category-count --> | Anthropic/OpenAI/AWS/GitHub/GitLab/GCP keys, Shannon-entropy detection, `.env` leaks, private-key files, hardcoded credential surface, token-leak via log sinks (CVE-2026-20205), `${VAR}`/process.env placeholder resolution on user-supplied MCP URLs → secret exfiltration (CVE-2026-32625) |
|
|
118
125
|
| **Agent Config** | <!-- category-count:AGENT_CONFIG -->15<!-- /category-count --> | Routines permission escalation + schedule injection + audit-log gaps, AGENTS.md/CLAUDE.md/.cursorrules hijacking, hidden Unicode, encoded payloads, internal scanner-fail signal, Project Deal economic-drift detection |
|
|
@@ -124,7 +131,7 @@ agent-audit-kit scan examples/vulnerable-configs/04-hook-exfiltration/
|
|
|
124
131
|
| **Trust Boundaries** | <!-- category-count:TRUST_BOUNDARY -->12<!-- /category-count --> | `enableAllProjectMcpServers`, API URL redirects, wildcard permissions, missing deny rules, missing allowlists, Claude Code folder-trust bypass (CVE-2026-40068) |
|
|
125
132
|
| **MCP Server Card** | <!-- category-count:MCP_SERVER_CARD -->4<!-- /category-count --> | Static audit of SEP-1649 discovery cards (`/.well-known/mcp/server-card.json`): tool-description poisoning in `tools[].description` (`AAK-MCP-CARD-001`, reuses the AAK-POISON detectors), declared-transport vs advertised-capability mismatch — remote transport with `authentication.required: false`, or `stdio` advertising a remote endpoint (`AAK-MCP-CARD-002`), missing / placeholder signature / provenance (`AAK-MCP-CARD-003`), and over-broad capability / wildcard-scope claims (`AAK-MCP-CARD-004`) |
|
|
126
133
|
|
|
127
|
-
**<!-- rule-count:total -->
|
|
134
|
+
**<!-- rule-count:total -->264<!-- /rule-count --> rules total.** Every finding includes severity, evidence, remediation, OWASP references, Adversa references, and CVE links where applicable.
|
|
128
135
|
|
|
129
136
|
### MCP Server Card scanning (SEP-1649)
|
|
130
137
|
|
|
@@ -261,12 +268,34 @@ CLI flags always take precedence over config file values.
|
|
|
261
268
|
|
|
262
269
|
## SARIF Integration
|
|
263
270
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
271
|
+
This action **emits** SARIF (the `sarif-file` output); it does **not** upload to
|
|
272
|
+
Code Scanning itself. Add the canonical `github/codeql-action/upload-sarif` step
|
|
273
|
+
so findings appear in the **Security tab** and as **inline PR annotations**:
|
|
274
|
+
|
|
275
|
+
```yaml
|
|
276
|
+
permissions:
|
|
277
|
+
security-events: write # required for the upload
|
|
278
|
+
contents: read
|
|
279
|
+
|
|
280
|
+
steps:
|
|
281
|
+
- uses: actions/checkout@v4
|
|
282
|
+
- uses: sattyamjjain/agent-audit-kit@v0.3.56
|
|
283
|
+
id: scan
|
|
284
|
+
with:
|
|
285
|
+
fail-on: high
|
|
286
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
287
|
+
if: always() # upload even when the scan step failed the build
|
|
288
|
+
with:
|
|
289
|
+
sarif_file: ${{ steps.scan.outputs.sarif-file }}
|
|
290
|
+
```
|
|
268
291
|
|
|
269
|
-
SARIF output conforms to [SARIF 2.1.0](https://json.schemastore.org/sarif-2.1.0.json)
|
|
292
|
+
SARIF output conforms to [SARIF 2.1.0](https://json.schemastore.org/sarif-2.1.0.json)
|
|
293
|
+
with `fingerprints`, `partialFingerprints`, `security-severity` scores, and
|
|
294
|
+
`%SRCROOT%` relative paths. Each finding carries **OWASP references** and **CVE
|
|
295
|
+
links** via the rule-level `help`; per-finding remediation is in result
|
|
296
|
+
`properties`. (No SARIF `fixes[]` — those require machine-applicable
|
|
297
|
+
`artifactChanges`, so emitting prose there would make Code Scanning reject the
|
|
298
|
+
upload.)
|
|
270
299
|
|
|
271
300
|
---
|
|
272
301
|
|
|
@@ -320,8 +349,8 @@ cross-reference, not a head-to-head benchmark.
|
|
|
320
349
|
| --- | --- | --- |
|
|
321
350
|
| **ASI01** | Goal Hijack | 13 |
|
|
322
351
|
| **ASI02** | Tool Misuse | 39 |
|
|
323
|
-
| **ASI03** | Memory Poisoning |
|
|
324
|
-
| **ASI04** | Identity & Privilege Abuse |
|
|
352
|
+
| **ASI03** | Memory Poisoning | 63 |
|
|
353
|
+
| **ASI04** | Identity & Privilege Abuse | 51 |
|
|
325
354
|
| **ASI05** | Cascading Failures | 33 |
|
|
326
355
|
| **ASI06** | Unauthorized Capability Acquisition | 35 |
|
|
327
356
|
| **ASI07** | Plan Injection | 9 |
|
|
@@ -365,7 +394,7 @@ See [`docs/comparisons.md`](docs/comparisons.md) for a fully-sourced version. Ve
|
|
|
365
394
|
| Feature | AgentAuditKit | Microsoft AGT | Snyk Agent Scan | Semgrep Multimodal |
|
|
366
395
|
|---------|:---:|:---:|:---:|:---:|
|
|
367
396
|
| Scope | Static scanner + compliance PDFs | Runtime governance | Static + runtime | Multimodal SAST |
|
|
368
|
-
| Detection rules (static) | **<!-- rule-count:total -->
|
|
397
|
+
| Detection rules (static) | **<!-- rule-count:total -->264<!-- /rule-count -->** | Runtime policies, not rules | ~30 | LLM-assisted |
|
|
369
398
|
| OWASP Agentic 10/10 | **Yes** | Yes | Partial | Partial |
|
|
370
399
|
| OWASP MCP 10/10 | **Yes** | No (runtime-focused) | No | No |
|
|
371
400
|
| Auditor-ready PDF compliance | **12 frameworks** | No | 0 | 0 |
|
|
@@ -438,6 +467,25 @@ manifest; the corpus refresh is the one network step, `fetch_registry.py`):
|
|
|
438
467
|
make report # regenerate the report numbers, offline + deterministic
|
|
439
468
|
```
|
|
440
469
|
|
|
470
|
+
### Frozen baseline (pre-2026-07-28-spec)
|
|
471
|
+
|
|
472
|
+
The same measurement, **frozen and citable** as
|
|
473
|
+
**[`docs/research/mcp-security-baseline-v1.0.md`](docs/research/mcp-security-baseline-v1.0.md)**:
|
|
474
|
+
an immutable, byte-deterministic snapshot
|
|
475
|
+
([`mcp-security-baseline-v1.0-2026-07-27.json`](research/state-of-mcp-2026/baseline/mcp-security-baseline-v1.0-2026-07-27.json))
|
|
476
|
+
recording, per config and in aggregate, the corpus size + collection window, the
|
|
477
|
+
auth-posture distribution (no-auth / bearer / OAuth 2.1 / unknown), the transport
|
|
478
|
+
distribution, the per-rule HIGH/CRITICAL hit counts, and the benign-slice
|
|
479
|
+
false-positive rate with its denominator — tamper-evident under
|
|
480
|
+
**SHA-256 `320b43072d930edbc18f050795939dbee3831e4da2f88b3483ea12ec7bb6551f`**. It
|
|
481
|
+
is the **pre-2026-07-28-spec** reference; the re-measure is scheduled for
|
|
482
|
+
**2026-08-11** and is one command:
|
|
483
|
+
|
|
484
|
+
```bash
|
|
485
|
+
python research/state-of-mcp-2026/baseline.py \
|
|
486
|
+
--compare research/state-of-mcp-2026/baseline/mcp-security-baseline-v1.0-2026-07-27.json
|
|
487
|
+
```
|
|
488
|
+
|
|
441
489
|
Scan your own in 30s, fully offline: `pip install agent-audit-kit && agent-audit-kit scan .`
|
|
442
490
|
See which AAK rules cover each OWASP MCP slot in the
|
|
443
491
|
[public coverage leaderboard](docs/coverage/owasp-mcp-top10.md).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: 'AgentAuditKit MCP Security Scan'
|
|
2
|
-
description: 'AgentAuditKit — MCP Security Scan (
|
|
2
|
+
description: 'AgentAuditKit — MCP Security Scan (264 rules, OWASP Agentic Top 10 + MCP Top 10)'
|
|
3
3
|
author: 'sattyamjjain'
|
|
4
4
|
|
|
5
5
|
branding:
|
|
@@ -24,7 +24,7 @@ inputs:
|
|
|
24
24
|
required: false
|
|
25
25
|
default: 'sarif'
|
|
26
26
|
upload-sarif:
|
|
27
|
-
description: '
|
|
27
|
+
description: 'Emit SARIF for GitHub Code Scanning. NOTE: this action does not upload directly — it writes the SARIF (see the `sarif-file` output) and prints a notice; you add a `github/codeql-action/upload-sarif` step with `security-events: write`. See README > SARIF Integration.'
|
|
28
28
|
required: false
|
|
29
29
|
default: 'true'
|
|
30
30
|
include-user-config:
|
|
@@ -204,8 +204,14 @@ def _finding_to_result(
|
|
|
204
204
|
if finding.evidence:
|
|
205
205
|
result["message"]["text"] += f"\n\nEvidence: {finding.evidence}"
|
|
206
206
|
|
|
207
|
+
# NOTE: do NOT emit a SARIF `fixes` object here. A `fixes[].fix` requires
|
|
208
|
+
# `artifactChanges` (it describes a machine-applicable patch, not prose);
|
|
209
|
+
# emitting one with only `description` makes every result invalid and
|
|
210
|
+
# GitHub's codeql-action/upload-sarif rejects the whole file. The remediation
|
|
211
|
+
# prose is already surfaced via the rule-level `help`/`helpMarkdown`; the
|
|
212
|
+
# per-finding copy goes in a valid property bag.
|
|
207
213
|
if finding.remediation:
|
|
208
|
-
result
|
|
214
|
+
result.setdefault("properties", {})["remediation"] = finding.remediation
|
|
209
215
|
|
|
210
216
|
return result
|
|
211
217
|
|