agent-audit-kit 0.3.0__tar.gz → 0.3.2__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.2/.github/workflows/docker-nightly.yml +74 -0
- agent_audit_kit-0.3.2/.github/workflows/mcp-security-index.yml +87 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/workflows/release.yml +54 -13
- agent_audit_kit-0.3.2/.github/workflows/sync-rule-count.yml +60 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.gitignore +1 -0
- agent_audit_kit-0.3.2/.pre-commit-config.yaml +26 -0
- agent_audit_kit-0.3.2/CHANGELOG.cves.md +59 -0
- agent_audit_kit-0.3.2/CHANGELOG.md +198 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/PKG-INFO +98 -39
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/README.md +96 -38
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/action.yml +11 -1
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/__init__.py +2 -1
- agent_audit_kit-0.3.2/agent_audit_kit/advisories.py +180 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/bundle.py +5 -1
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/cli.py +165 -13
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/engine.py +8 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/fix.py +110 -0
- agent_audit_kit-0.3.2/agent_audit_kit/llm_scan.py +242 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/models.py +22 -0
- agent_audit_kit-0.3.2/agent_audit_kit/output/aicm.py +66 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/pdf_report.py +88 -1
- agent_audit_kit-0.3.2/agent_audit_kit/output/pr_summary.py +120 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/sarif.py +108 -23
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/rules/builtin.py +605 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/_helpers.py +2 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/agent_config.py +43 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/healthcare_ai.py +201 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/india_pii.py +187 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/log_injection.py +155 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/marketplace_manifest.py +81 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/mcp_config.py +77 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/mcp_middleware.py +304 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/neo4j_cve.py +109 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/oauth_surface.py +250 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/state_privacy.py +122 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/stdio_injection.py +382 -0
- agent_audit_kit-0.3.2/agent_audit_kit/watch.py +132 -0
- agent_audit_kit-0.3.2/benchmarks/index_builder.py +514 -0
- agent_audit_kit-0.3.2/benchmarks/sources.py +259 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/blog/state-of-mcp-security-template.md +3 -2
- agent_audit_kit-0.3.2/docs/comparisons.md +121 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/disclosure-policy.md +3 -3
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/launch/press.md +1 -1
- agent_audit_kit-0.3.2/docs/owasp-agentic-coverage.md +18 -0
- agent_audit_kit-0.3.2/docs/rule-schema.md +58 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/entrypoint.sh +60 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/mkdocs.yml +2 -2
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/pyproject.toml +2 -1
- agent_audit_kit-0.3.2/rules.json +3281 -0
- agent_audit_kit-0.3.2/scripts/gen_owasp_coverage.py +89 -0
- agent_audit_kit-0.3.2/scripts/sync_rule_count.py +161 -0
- agent_audit_kit-0.3.2/scripts/watch_csa_mcp_baseline.py +181 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/patched/py_argv_allowlist.py +20 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/vulnerable/py_os_system_stdin.py +10 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/vulnerable/py_subprocess_shell.py +21 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/vulnerable/ts_execa_shell.ts +13 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/patched/router.go +12 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/vulnerable/router.go +16 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/vulnerable/server.py +22 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/vulnerable/server.ts +11 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-40933/vulnerable/flow.json +13 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/healthcare_ai/safe_skill.md +18 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/healthcare_ai/vulnerable_skill.md +20 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/india_pii/safe.txt +9 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/india_pii/vulnerable.txt +8 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/state_privacy/safe_privacy.md +20 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/state_privacy/vulnerable_privacy.md +8 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/tasks/safe.py +2 -2
- agent_audit_kit-0.3.2/tests/fixtures/incidents/vercel-2026-04-19/app.yaml +9 -0
- agent_audit_kit-0.3.2/tests/test_aicm.py +123 -0
- agent_audit_kit-0.3.2/tests/test_compliance_v2.py +82 -0
- agent_audit_kit-0.3.2/tests/test_csa_baseline_watcher.py +82 -0
- agent_audit_kit-0.3.2/tests/test_cve_fix_and_watch_and_advisories.py +220 -0
- agent_audit_kit-0.3.2/tests/test_flowise.py +89 -0
- agent_audit_kit-0.3.2/tests/test_healthcare_ai_and_state_privacy.py +149 -0
- agent_audit_kit-0.3.2/tests/test_index_builder.py +180 -0
- agent_audit_kit-0.3.2/tests/test_india_pii.py +58 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_llm_scan.py +86 -0
- agent_audit_kit-0.3.2/tests/test_marketplace_sources.py +114 -0
- agent_audit_kit-0.3.2/tests/test_mcpwn.py +108 -0
- agent_audit_kit-0.3.2/tests/test_oauth_surface.py +126 -0
- agent_audit_kit-0.3.2/tests/test_owasp_agentic_coverage.py +70 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_phase5.py +1 -1
- agent_audit_kit-0.3.2/tests/test_pr_summary.py +96 -0
- agent_audit_kit-0.3.2/tests/test_rule_count_sync.py +107 -0
- agent_audit_kit-0.3.2/tests/test_sarif_fingerprints.py +131 -0
- agent_audit_kit-0.3.2/tests/test_sarif_github_upload.py +143 -0
- agent_audit_kit-0.3.2/tests/test_stdio_injection.py +62 -0
- agent_audit_kit-0.3.2/tests/test_v0_3_1_cve_rules.py +248 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/vscode-extension/package.json +1 -1
- agent_audit_kit-0.3.0/.github/workflows/docs.yml +0 -42
- agent_audit_kit-0.3.0/.github/workflows/mcp-security-index.yml +0 -46
- agent_audit_kit-0.3.0/CHANGELOG.cves.md +0 -22
- agent_audit_kit-0.3.0/CHANGELOG.md +0 -28
- agent_audit_kit-0.3.0/agent_audit_kit/llm_scan.py +0 -92
- agent_audit_kit-0.3.0/benchmarks/index_builder.py +0 -285
- agent_audit_kit-0.3.0/docs/comparisons.md +0 -74
- agent_audit_kit-0.3.0/tests/test_index_builder.py +0 -69
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.agent-audit-kit.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.claude/auto-memory/config.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/FUNDING.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/dependabot.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/workflows/ci.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/workflows/codeql.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/workflows/cve-watcher.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.github/workflows/scorecard.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/.pre-commit-hooks.yaml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/CLAUDE.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/CLAUDE_PROMPT.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/CODE_OF_CONDUCT.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/CONTRIBUTING.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/DEEP_ANALYSIS.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/Dockerfile +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/LICENSE +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/ROADMAP_2026.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/SECURITY.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/data/vuln_db.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/diff.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/discovery.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/__init__.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/compliance.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/console.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/json_report.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/owasp_report.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/sbom.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/pinning.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/proxy/__init__.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/proxy/interceptor.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/rules/__init__.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/__init__.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/a2a_protocol.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/hook_injection.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/hook_rce.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/langchain_vuln.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/legal_compliance.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/mcp_auth_patterns.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/mcp_tasks.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/oauth_misconfig.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/pin_drift.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/routines.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/rust_pattern_scan.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/rust_scan.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/secret_exposure.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/skill_poisoning.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/ssrf_patterns.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/supply_chain.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/taint_analysis.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/tool_poisoning.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/transport_security.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/trust_boundary.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/typescript_pattern_scan.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/typescript_scan.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scoring.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/verification.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/agent_audit_kit/vuln_db.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/README.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/crawler.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/run_benchmark.sh +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_01_clean.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_02_secrets.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_03_no_auth.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_04_shell_injection.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_05_mixed.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/ci/gitlab/agent-audit-kit.gitlab-ci.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/CNAME +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/ci-cd.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/comparison.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/getting-started.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/gitlab-ci.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/index.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/launch/CHECKLIST.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/launch/hn.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/launch/reddit.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/launch/release-notes-v0.3.0.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/launch/x-thread.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/metrics.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/owasp-mapping.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/research-log.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/docs/rules.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/README.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/case-studies/damn-vulnerable-mcp/README.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-inspired.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-settings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/case-studies/damn-vulnerable-mcp/scan-results.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/case-studies/damn-vulnerable-mcp/scan-results.sarif +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/ci-integration/README.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/ci-integration/docker-one-liner.sh +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/ci-integration/github-actions-sarif.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/ci-integration/gitlab-ci-scan.yml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/ci-integration/pre-commit-config.yaml +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/run-all-examples.sh +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/01-no-auth-remote/.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/01-no-auth-remote/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/02-shell-injection/.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/02-shell-injection/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/03-hardcoded-secrets/.gitignore +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/03-hardcoded-secrets/.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/03-hardcoded-secrets/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/04-hook-exfiltration/.claude/settings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/04-hook-exfiltration/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/05-trust-boundary-violations/.claude/settings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/05-trust-boundary-violations/.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/05-trust-boundary-violations/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/06-tool-poisoning/.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/06-tool-poisoning/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/07-tainted-tool-function/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/07-tainted-tool-function/server.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/08-transport-insecurity/.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/08-transport-insecurity/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/09-a2a-insecure-agent/agent-card.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/09-a2a-insecure-agent/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/10-supply-chain-risks/.mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/10-supply-chain-risks/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/10-supply-chain-risks/package.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/11-legal-compliance/expected-findings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/11-legal-compliance/package.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/11-legal-compliance/subproject/package.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/examples/vulnerable-configs/README.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/launch/MARKET-RESEARCH-2026-04-12.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/launch/awesome-list-prs/awesome-opensource-security.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/launch/awesome-list-prs/awesome-security.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/launch/blog-50-mcp-servers.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/launch/demo.cast +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/launch/owasp-outreach.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/requirements-lock.txt +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/scripts/cve_watcher.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/scripts/generate_lockfile.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/conftest.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/clean_mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/clean_settings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/a2a_2026/vulnerable_card.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/hook_rce/safe_settings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/hook_rce/vulnerable_settings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/langchain/safe_requirements.txt +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/langchain/vulnerable_prompt.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/langchain/vulnerable_requirements.txt +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/marketplace/safe.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/marketplace/vulnerable.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/mcp_auth/safe_server.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/mcp_auth/vulnerable_server.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/oauth/safe.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/oauth/vulnerable.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/routines/safe.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/routines/vulnerable.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/skills/safe.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/skills/vulnerable.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/ssrf/safe.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/ssrf/vulnerable.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/cves/tasks/vulnerable.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/env_with_secrets +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/package_with_risks.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_hooks.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_mcp.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_settings.json +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_a2a_2026.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_a2a_protocol.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_action.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_agent_config.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_cli.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_compliance_output.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_cves_2026.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_diff.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_discovery.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_engine.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_examples.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_fix.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_hook_injection.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_legal_compliance.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_llm_scan_mod.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_marketplace_manifest.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_mcp_config.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_owasp_report.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_owasp_report_output.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_phase3.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_pin_drift.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_pinning.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_pinning_mod.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_proxy.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_sarif_output.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_scoring.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_secret_exposure.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_skill_poisoning.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_supply_chain.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_taint_analysis.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_tool_poisoning.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_transport_security.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_trust_boundary.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_verification.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_verification_mod.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/tests/test_vuln_db.py +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/vscode-extension/.vscodeignore +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/vscode-extension/CLAUDE.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/vscode-extension/README.md +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/vscode-extension/src/extension.ts +0 -0
- {agent_audit_kit-0.3.0 → agent_audit_kit-0.3.2}/vscode-extension/tsconfig.json +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: Docker nightly rebuild
|
|
2
|
+
|
|
3
|
+
# Closes C13 — scheduled rebuild so the :latest and :nightly tags pick up
|
|
4
|
+
# base-image security patches without waiting for a release tag.
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
schedule:
|
|
8
|
+
- cron: "23 3 * * *" # 03:23 UTC daily (off-peak; random minute per fleet-hygiene)
|
|
9
|
+
workflow_dispatch: {}
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
packages: write
|
|
14
|
+
id-token: write
|
|
15
|
+
attestations: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
rebuild:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Set up Docker Buildx
|
|
24
|
+
uses: docker/setup-buildx-action@v3
|
|
25
|
+
|
|
26
|
+
- name: Login to GHCR
|
|
27
|
+
uses: docker/login-action@v3
|
|
28
|
+
with:
|
|
29
|
+
registry: ghcr.io
|
|
30
|
+
username: ${{ github.actor }}
|
|
31
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
32
|
+
|
|
33
|
+
- name: Compute tag set
|
|
34
|
+
id: tags
|
|
35
|
+
run: |
|
|
36
|
+
date_tag=$(date -u +%Y%m%d)
|
|
37
|
+
echo "date_tag=${date_tag}" >> "$GITHUB_OUTPUT"
|
|
38
|
+
|
|
39
|
+
- name: Build + push (latest + nightly + date tag)
|
|
40
|
+
id: push
|
|
41
|
+
uses: docker/build-push-action@v5
|
|
42
|
+
with:
|
|
43
|
+
context: .
|
|
44
|
+
push: true
|
|
45
|
+
pull: true # force re-pull of base image to catch upstream patches
|
|
46
|
+
no-cache: true # avoid cached base-image layers
|
|
47
|
+
tags: |
|
|
48
|
+
ghcr.io/${{ github.repository_owner }}/agent-audit-kit:latest
|
|
49
|
+
ghcr.io/${{ github.repository_owner }}/agent-audit-kit:nightly
|
|
50
|
+
ghcr.io/${{ github.repository_owner }}/agent-audit-kit:nightly-${{ steps.tags.outputs.date_tag }}
|
|
51
|
+
labels: |
|
|
52
|
+
org.opencontainers.image.title=AgentAuditKit
|
|
53
|
+
org.opencontainers.image.description=Security scanner for MCP-connected AI agent pipelines
|
|
54
|
+
org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/agent-audit-kit
|
|
55
|
+
org.opencontainers.image.licenses=MIT
|
|
56
|
+
org.opencontainers.image.revision=${{ github.sha }}
|
|
57
|
+
cache-from: type=gha
|
|
58
|
+
cache-to: type=gha,mode=max
|
|
59
|
+
|
|
60
|
+
- name: Trivy scan (fail if new CRITICAL/HIGH in base image)
|
|
61
|
+
uses: aquasecurity/trivy-action@master
|
|
62
|
+
continue-on-error: true
|
|
63
|
+
with:
|
|
64
|
+
image-ref: ghcr.io/${{ github.repository_owner }}/agent-audit-kit:nightly
|
|
65
|
+
format: sarif
|
|
66
|
+
output: trivy-nightly.sarif
|
|
67
|
+
severity: CRITICAL,HIGH
|
|
68
|
+
|
|
69
|
+
- name: Upload Trivy SARIF to Security tab
|
|
70
|
+
if: always()
|
|
71
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
72
|
+
with:
|
|
73
|
+
sarif_file: trivy-nightly.sarif
|
|
74
|
+
category: trivy-nightly
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
name: MCP Security Index — weekly snapshot
|
|
2
|
+
|
|
3
|
+
# Closes B4 / #25: MkDocs docs live at gh-pages/docs/, MCP Security
|
|
4
|
+
# Index at gh-pages/. Replaces the broken .github/workflows/docs.yml
|
|
5
|
+
# (stale deploy-pages SHA) with a single deploy pipeline.
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: "11 7 * * 1" # Mondays, 07:11 UTC
|
|
10
|
+
push:
|
|
11
|
+
branches: [main]
|
|
12
|
+
paths:
|
|
13
|
+
- "docs/**"
|
|
14
|
+
- "mkdocs.yml"
|
|
15
|
+
- ".github/workflows/mcp-security-index.yml"
|
|
16
|
+
workflow_dispatch: {}
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: write
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
snapshot:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 0
|
|
28
|
+
|
|
29
|
+
- name: Set up Python
|
|
30
|
+
uses: actions/setup-python@v5
|
|
31
|
+
with:
|
|
32
|
+
python-version: "3.11"
|
|
33
|
+
|
|
34
|
+
- name: Install agent-audit-kit + MkDocs
|
|
35
|
+
run: |
|
|
36
|
+
pip install -e .
|
|
37
|
+
pip install mkdocs mkdocs-material
|
|
38
|
+
|
|
39
|
+
# ---- MCP Security Index (only on schedule / manual dispatch) ----
|
|
40
|
+
- name: Crawl public MCP servers
|
|
41
|
+
if: github.event_name != 'push'
|
|
42
|
+
env:
|
|
43
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
44
|
+
run: |
|
|
45
|
+
mkdir -p benchmarks/data
|
|
46
|
+
python benchmarks/crawler.py --limit 500 --output benchmarks/results.json
|
|
47
|
+
|
|
48
|
+
- name: Build MCP Security Index site
|
|
49
|
+
if: github.event_name != 'push'
|
|
50
|
+
run: python benchmarks/index_builder.py --input benchmarks/results.json --site-dir benchmarks/site --clean
|
|
51
|
+
|
|
52
|
+
# ---- MkDocs ----
|
|
53
|
+
- name: Build MkDocs
|
|
54
|
+
run: mkdocs build -d docs_build
|
|
55
|
+
|
|
56
|
+
# ---- Assemble gh-pages payload: index/ at root, docs at /docs/ ----
|
|
57
|
+
- name: Fetch prior gh-pages state (so we preserve the index on docs-only pushes)
|
|
58
|
+
run: |
|
|
59
|
+
git fetch origin gh-pages:gh-pages-remote || echo "no existing gh-pages branch"
|
|
60
|
+
mkdir -p pages_staging
|
|
61
|
+
if git show-ref --verify --quiet refs/heads/gh-pages-remote; then
|
|
62
|
+
git --work-tree=pages_staging checkout gh-pages-remote -- . || true
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
- name: Stage payload
|
|
66
|
+
run: |
|
|
67
|
+
# docs always rebuilt from latest main
|
|
68
|
+
rm -rf pages_staging/docs
|
|
69
|
+
mv docs_build pages_staging/docs
|
|
70
|
+
# index only refreshed on schedule / dispatch
|
|
71
|
+
if [ -d benchmarks/site ]; then
|
|
72
|
+
cp -r benchmarks/site/. pages_staging/
|
|
73
|
+
fi
|
|
74
|
+
# .nojekyll so GitHub Pages serves the raw HTML
|
|
75
|
+
touch pages_staging/.nojekyll
|
|
76
|
+
|
|
77
|
+
- name: Publish to gh-pages
|
|
78
|
+
run: |
|
|
79
|
+
cd pages_staging
|
|
80
|
+
git init -q
|
|
81
|
+
git config user.name 'mcp-security-index'
|
|
82
|
+
git config user.email 'mcp-security-index@users.noreply.github.com'
|
|
83
|
+
git checkout -b gh-pages
|
|
84
|
+
git add .
|
|
85
|
+
git commit -q -m "snapshot: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
86
|
+
git remote add origin "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git"
|
|
87
|
+
git push --force origin gh-pages
|
|
@@ -12,10 +12,36 @@ permissions:
|
|
|
12
12
|
attestations: write
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
|
+
# --------------------------------------------------------------------------
|
|
16
|
+
# 0. Gate: refuse to release while any sla-48h CVE-response issue is open.
|
|
17
|
+
# Implements CLAUDE_PROMPT.md §5(1) — "blocks release until the issue
|
|
18
|
+
# is closed". (C14)
|
|
19
|
+
# --------------------------------------------------------------------------
|
|
20
|
+
cve-response-gate:
|
|
21
|
+
name: CVE-response gate
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
permissions:
|
|
24
|
+
issues: read
|
|
25
|
+
contents: read
|
|
26
|
+
steps:
|
|
27
|
+
- name: Block release if open cve-response issues exist
|
|
28
|
+
env:
|
|
29
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
30
|
+
run: |
|
|
31
|
+
set -euo pipefail
|
|
32
|
+
count=$(gh issue list --repo "$GITHUB_REPOSITORY" --label sla-48h --state open --json number --jq length)
|
|
33
|
+
if [ "$count" != "0" ]; then
|
|
34
|
+
echo "::error ::cve-response gate: $count open sla-48h issue(s). Close them (or resolve with patch-release) before tagging."
|
|
35
|
+
gh issue list --repo "$GITHUB_REPOSITORY" --label sla-48h --state open
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
echo "cve-response gate: clean — 0 open sla-48h issues."
|
|
39
|
+
|
|
15
40
|
# --------------------------------------------------------------------------
|
|
16
41
|
# 1. Publish to PyPI using trusted publishing (OIDC)
|
|
17
42
|
# --------------------------------------------------------------------------
|
|
18
43
|
pypi:
|
|
44
|
+
needs: cve-response-gate
|
|
19
45
|
name: Publish to PyPI
|
|
20
46
|
runs-on: ubuntu-latest
|
|
21
47
|
environment:
|
|
@@ -24,10 +50,10 @@ jobs:
|
|
|
24
50
|
permissions:
|
|
25
51
|
id-token: write
|
|
26
52
|
steps:
|
|
27
|
-
- uses: actions/checkout@
|
|
53
|
+
- uses: actions/checkout@v4
|
|
28
54
|
|
|
29
55
|
- name: Set up Python
|
|
30
|
-
uses: actions/setup-python@
|
|
56
|
+
uses: actions/setup-python@v5
|
|
31
57
|
with:
|
|
32
58
|
python-version: '3.11'
|
|
33
59
|
|
|
@@ -45,6 +71,7 @@ jobs:
|
|
|
45
71
|
# --------------------------------------------------------------------------
|
|
46
72
|
docker:
|
|
47
73
|
name: Push Docker image to GHCR
|
|
74
|
+
needs: cve-response-gate
|
|
48
75
|
runs-on: ubuntu-latest
|
|
49
76
|
permissions:
|
|
50
77
|
contents: read
|
|
@@ -52,13 +79,13 @@ jobs:
|
|
|
52
79
|
id-token: write
|
|
53
80
|
attestations: write
|
|
54
81
|
steps:
|
|
55
|
-
- uses: actions/checkout@
|
|
82
|
+
- uses: actions/checkout@v4
|
|
56
83
|
|
|
57
84
|
- name: Set up Docker Buildx
|
|
58
|
-
uses: docker/setup-buildx-action@
|
|
85
|
+
uses: docker/setup-buildx-action@v3
|
|
59
86
|
|
|
60
87
|
- name: Log in to GHCR
|
|
61
|
-
uses: docker/login-action@
|
|
88
|
+
uses: docker/login-action@v3
|
|
62
89
|
with:
|
|
63
90
|
registry: ghcr.io
|
|
64
91
|
username: ${{ github.actor }}
|
|
@@ -69,14 +96,14 @@ jobs:
|
|
|
69
96
|
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
|
70
97
|
|
|
71
98
|
- name: Build image for scanning
|
|
72
|
-
uses: docker/build-push-action@
|
|
99
|
+
uses: docker/build-push-action@v5
|
|
73
100
|
with:
|
|
74
101
|
context: .
|
|
75
102
|
load: true
|
|
76
103
|
tags: agent-audit-kit:scan
|
|
77
104
|
|
|
78
105
|
- name: Scan Docker image with Trivy
|
|
79
|
-
uses: aquasecurity/trivy-action@
|
|
106
|
+
uses: aquasecurity/trivy-action@master
|
|
80
107
|
with:
|
|
81
108
|
image-ref: agent-audit-kit:scan
|
|
82
109
|
format: sarif
|
|
@@ -85,7 +112,7 @@ jobs:
|
|
|
85
112
|
|
|
86
113
|
- name: Build and push
|
|
87
114
|
id: push
|
|
88
|
-
uses: docker/build-push-action@
|
|
115
|
+
uses: docker/build-push-action@v5
|
|
89
116
|
with:
|
|
90
117
|
context: .
|
|
91
118
|
push: true
|
|
@@ -102,7 +129,7 @@ jobs:
|
|
|
102
129
|
cache-to: type=gha,mode=max
|
|
103
130
|
|
|
104
131
|
- name: Generate SLSA provenance attestation
|
|
105
|
-
uses: actions/attest-build-provenance@
|
|
132
|
+
uses: actions/attest-build-provenance@v2
|
|
106
133
|
with:
|
|
107
134
|
subject-name: ghcr.io/sattyamjjain/agent-audit-kit
|
|
108
135
|
subject-digest: ${{ steps.push.outputs.digest }}
|
|
@@ -113,15 +140,16 @@ jobs:
|
|
|
113
140
|
# --------------------------------------------------------------------------
|
|
114
141
|
bundle-and-sign:
|
|
115
142
|
name: Rule bundle + SBOM (Sigstore)
|
|
143
|
+
needs: cve-response-gate
|
|
116
144
|
runs-on: ubuntu-latest
|
|
117
145
|
permissions:
|
|
118
146
|
id-token: write
|
|
119
147
|
contents: read
|
|
120
148
|
steps:
|
|
121
|
-
- uses: actions/checkout@
|
|
149
|
+
- uses: actions/checkout@v4
|
|
122
150
|
|
|
123
151
|
- name: Set up Python
|
|
124
|
-
uses: actions/setup-python@
|
|
152
|
+
uses: actions/setup-python@v5
|
|
125
153
|
with:
|
|
126
154
|
python-version: '3.11'
|
|
127
155
|
|
|
@@ -146,6 +174,14 @@ jobs:
|
|
|
146
174
|
rules.json
|
|
147
175
|
sbom.cdx.json
|
|
148
176
|
sbom.spdx.json
|
|
177
|
+
# Keep sigs in the workflow; we attach them ourselves in github-release.
|
|
178
|
+
release-signing-artifacts: false
|
|
179
|
+
upload-signing-artifacts: true
|
|
180
|
+
|
|
181
|
+
- name: Verify sigstore outputs landed
|
|
182
|
+
run: |
|
|
183
|
+
ls -la ./*.sigstore* || true
|
|
184
|
+
ls -la ./rules.json ./sbom.cdx.json ./sbom.spdx.json
|
|
149
185
|
|
|
150
186
|
- name: Upload signed artifacts
|
|
151
187
|
uses: actions/upload-artifact@v4
|
|
@@ -157,6 +193,9 @@ jobs:
|
|
|
157
193
|
sbom.cdx.json
|
|
158
194
|
sbom.spdx.json
|
|
159
195
|
*.sigstore
|
|
196
|
+
*.sigstore.json
|
|
197
|
+
*.sig
|
|
198
|
+
if-no-files-found: warn
|
|
160
199
|
|
|
161
200
|
# --------------------------------------------------------------------------
|
|
162
201
|
# 4. Create GitHub Release with auto-generated notes + signed bundle
|
|
@@ -168,7 +207,7 @@ jobs:
|
|
|
168
207
|
permissions:
|
|
169
208
|
contents: write
|
|
170
209
|
steps:
|
|
171
|
-
- uses: actions/checkout@
|
|
210
|
+
- uses: actions/checkout@v4
|
|
172
211
|
|
|
173
212
|
- name: Download signed artifacts
|
|
174
213
|
uses: actions/download-artifact@v4
|
|
@@ -177,7 +216,7 @@ jobs:
|
|
|
177
216
|
path: signed
|
|
178
217
|
|
|
179
218
|
- name: Create release
|
|
180
|
-
uses: softprops/action-gh-release@
|
|
219
|
+
uses: softprops/action-gh-release@v2
|
|
181
220
|
with:
|
|
182
221
|
generate_release_notes: true
|
|
183
222
|
files: |
|
|
@@ -186,6 +225,8 @@ jobs:
|
|
|
186
225
|
signed/sbom.cdx.json
|
|
187
226
|
signed/sbom.spdx.json
|
|
188
227
|
signed/*.sigstore
|
|
228
|
+
signed/*.sigstore.json
|
|
229
|
+
signed/*.sig
|
|
189
230
|
body: |
|
|
190
231
|
## Installation
|
|
191
232
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: Sync rule count
|
|
2
|
+
|
|
3
|
+
# Keeps README badge + action.yml description + __init__.RULE_COUNT in
|
|
4
|
+
# lockstep with the rule bundle. Runs on every push to main that touches
|
|
5
|
+
# rules.json or the rule source, then commits the bumped files back if
|
|
6
|
+
# anything drifted.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
branches: [main]
|
|
11
|
+
paths:
|
|
12
|
+
- rules.json
|
|
13
|
+
- agent_audit_kit/rules/**
|
|
14
|
+
- agent_audit_kit/bundle.py
|
|
15
|
+
- scripts/sync_rule_count.py
|
|
16
|
+
workflow_dispatch: {}
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: write
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
sync:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
if: github.actor != 'github-actions[bot]'
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
with:
|
|
28
|
+
fetch-depth: 0
|
|
29
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
30
|
+
|
|
31
|
+
- name: Set up Python
|
|
32
|
+
uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.11"
|
|
35
|
+
|
|
36
|
+
- name: Install agent-audit-kit
|
|
37
|
+
run: pip install -e .
|
|
38
|
+
|
|
39
|
+
- name: Regenerate bundle + sync surfaces
|
|
40
|
+
id: sync
|
|
41
|
+
run: python scripts/sync_rule_count.py --regenerate
|
|
42
|
+
|
|
43
|
+
- name: Check for drift
|
|
44
|
+
id: diff
|
|
45
|
+
run: |
|
|
46
|
+
if git diff --quiet; then
|
|
47
|
+
echo "changed=false" >> "$GITHUB_OUTPUT"
|
|
48
|
+
else
|
|
49
|
+
echo "changed=true" >> "$GITHUB_OUTPUT"
|
|
50
|
+
git diff --stat
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
- name: Commit
|
|
54
|
+
if: steps.diff.outputs.changed == 'true'
|
|
55
|
+
run: |
|
|
56
|
+
git config user.name 'agent-audit-kit-bot'
|
|
57
|
+
git config user.email 'agent-audit-kit-bot@users.noreply.github.com'
|
|
58
|
+
git add rules.json README.md action.yml agent_audit_kit/__init__.py
|
|
59
|
+
git commit -m "chore(rule-count): auto-sync after rules.json change"
|
|
60
|
+
git push
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Pre-commit hooks run against this repo.
|
|
2
|
+
# Install once:
|
|
3
|
+
# pip install pre-commit && pre-commit install
|
|
4
|
+
#
|
|
5
|
+
# To skip (e.g. emergency commits): `git commit --no-verify`.
|
|
6
|
+
repos:
|
|
7
|
+
# ---------------------------------------------------------------------
|
|
8
|
+
# Local: block rule-count drift at commit time.
|
|
9
|
+
# ---------------------------------------------------------------------
|
|
10
|
+
- repo: local
|
|
11
|
+
hooks:
|
|
12
|
+
- id: aak-sync-rule-count
|
|
13
|
+
name: AAK — rule count in lockstep with rules.json
|
|
14
|
+
entry: python scripts/sync_rule_count.py --check
|
|
15
|
+
language: system
|
|
16
|
+
pass_filenames: false
|
|
17
|
+
files: "^(rules\\.json|README\\.md|action\\.yml|agent_audit_kit/rules/|agent_audit_kit/__init__\\.py$)"
|
|
18
|
+
|
|
19
|
+
# ---------------------------------------------------------------------
|
|
20
|
+
# Upstream lint / format.
|
|
21
|
+
# ---------------------------------------------------------------------
|
|
22
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
23
|
+
rev: v0.8.4
|
|
24
|
+
hooks:
|
|
25
|
+
- id: ruff
|
|
26
|
+
args: [--fix]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# AAK Response SLA — CVE-to-Rule Ledger
|
|
2
|
+
|
|
3
|
+
We publicly commit to shipping rule coverage for every disclosed MCP CVE
|
|
4
|
+
within **48 hours of NVD disclosure**. This file is the audit trail.
|
|
5
|
+
|
|
6
|
+
Format: one line per CVE, `CVE-YYYY-NNNNN` → `AAK-XXX-NNN` with the
|
|
7
|
+
shipped-at timestamp. The GitHub Action `.github/workflows/cve-watcher.yml`
|
|
8
|
+
diffs NVD's MCP keyword feed against this file and opens an
|
|
9
|
+
`sla-48h`-labelled issue for anything new.
|
|
10
|
+
|
|
11
|
+
## Shipped in v0.3.2 (2026-04-20)
|
|
12
|
+
|
|
13
|
+
| CVE / Incident | Advisory | AAK rule(s) | Shipped | Latency |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| CVE-2026-33032 (MCPwn, KEV) | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-33032) — nginx-ui, CVSS 9.8 | **AAK-MCPWN-001** (primary) · AAK-MCP-011/012/020 (secondary, retained) | 2026-04-20 | targeted follow-up 4d after PoC |
|
|
16
|
+
| CVE-2026-40933 | [GHSA-c9gw-hvqq-f33r](https://github.com/advisories/GHSA-c9gw-hvqq-f33r) — Flowise MCP adapter, CVSS 10.0 | AAK-FLOWISE-001 (primary) · AAK-STDIO-001 (architectural class) | 2026-04-20 | <48h |
|
|
17
|
+
| VERCEL-2026-04-19 (incident) | [Vercel bulletin](https://vercel.com/kb/bulletin/vercel-april-2026-security-incident) | AAK-OAUTH-SCOPE-001, AAK-OAUTH-3P-001 | 2026-04-20 | <24h |
|
|
18
|
+
| MCPWN-2026-04-16 (incident) | [Rapid7 ETR](https://www.rapid7.com/blog/post/etr-cve-2026-33032-nginx-ui-missing-mcp-authentication/) | AAK-MCPWN-001 | 2026-04-20 | 4d (targeted) |
|
|
19
|
+
|
|
20
|
+
## Shipped in v0.3.1 (2026-04-19)
|
|
21
|
+
|
|
22
|
+
| CVE | Advisory | AAK rule(s) | Shipped | Latency |
|
|
23
|
+
|---|---|---|---|---|
|
|
24
|
+
| CVE-2026-30615 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-30615) (Windsurf, CVSS 8.0) | AAK-STDIO-001, AAK-WINDSURF-001 | 2026-04-19 | <48h |
|
|
25
|
+
| CVE-2026-35402 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-35402) (mcp-neo4j-cypher, CVSS 2.3) | AAK-NEO4J-001 | 2026-04-19 | <48h |
|
|
26
|
+
| CVE-2026-35603 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-35603) (Claude Code Windows, CVSS 5.4) | AAK-CLAUDE-WIN-001 | 2026-04-19 | <48h |
|
|
27
|
+
| CVE-2026-6494 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-6494) (AAP MCP log injection, CVSS 5.3) | AAK-LOGINJ-001 | 2026-04-19 | <48h |
|
|
28
|
+
|
|
29
|
+
### Ox Security architectural class (Apr 16 2026 disclosure)
|
|
30
|
+
|
|
31
|
+
AAK-STDIO-001 closes this whole family with a single AST-based
|
|
32
|
+
detection in `scanners/stdio_injection.py`:
|
|
33
|
+
|
|
34
|
+
| CVE | Product |
|
|
35
|
+
|---|---|
|
|
36
|
+
| CVE-2025-65720 | GPT Researcher |
|
|
37
|
+
| CVE-2026-26015 | DocsGPT |
|
|
38
|
+
| CVE-2026-30615 | Windsurf |
|
|
39
|
+
| CVE-2026-30617 | Langchain-Chatchat |
|
|
40
|
+
| CVE-2026-30618 | Fay Framework |
|
|
41
|
+
| CVE-2026-30623 | LiteLLM |
|
|
42
|
+
| CVE-2026-30624 | Agent Zero |
|
|
43
|
+
| CVE-2026-30625 | Upsonic |
|
|
44
|
+
| CVE-2026-33224 | Bisheng / Jaaz |
|
|
45
|
+
|
|
46
|
+
Source: <https://www.ox.security/blog/the-mother-of-all-ai-supply-chains-critical-systemic-vulnerability-at-the-core-of-the-mcp/>
|
|
47
|
+
|
|
48
|
+
## Shipped in v0.3.0
|
|
49
|
+
|
|
50
|
+
| CVE | Advisory | AAK rule(s) | Shipped | Latency |
|
|
51
|
+
|---|---|---|---|---|
|
|
52
|
+
| CVE-2025-59536 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2025-59536) | AAK-HOOK-RCE-001, AAK-HOOK-RCE-002, AAK-HOOK-RCE-003 | 2026-04-18 | retroactive |
|
|
53
|
+
| CVE-2026-33032 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-33032) | AAK-MCP-011, AAK-MCP-012, AAK-MCP-020 | 2026-04-18 | retroactive |
|
|
54
|
+
| CVE-2026-34070 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-34070) | AAK-LANGCHAIN-001, AAK-LANGCHAIN-002 | 2026-04-18 | retroactive |
|
|
55
|
+
| CVE-2025-68664 | [NVD](https://nvd.nist.gov/vuln/detail/CVE-2025-68664) | AAK-LANGCHAIN-003 | 2026-04-18 | retroactive |
|
|
56
|
+
|
|
57
|
+
## Open (48h SLA ticking)
|
|
58
|
+
|
|
59
|
+
_none — file response-tracking issues get posted here when the SLA fires._
|