agent-audit-kit 0.2.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/.claude/auto-memory/config.json +3 -0
- agent_audit_kit-0.3.2/.github/FUNDING.yml +1 -0
- agent_audit_kit-0.3.2/.github/workflows/cve-watcher.yml +72 -0
- 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.2/.github/workflows/release.yml +257 -0
- agent_audit_kit-0.3.2/.github/workflows/sync-rule-count.yml +60 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.gitignore +4 -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.2/CLAUDE.md +148 -0
- agent_audit_kit-0.3.2/CLAUDE_PROMPT.md +158 -0
- agent_audit_kit-0.3.2/DEEP_ANALYSIS.md +226 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/PKG-INFO +115 -39
- agent_audit_kit-0.3.2/README.md +396 -0
- agent_audit_kit-0.3.2/ROADMAP_2026.md +149 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/action.yml +11 -1
- {agent_audit_kit-0.2.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.2/agent_audit_kit/bundle.py +92 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/cli.py +292 -20
- agent_audit_kit-0.3.2/agent_audit_kit/engine.py +174 -0
- {agent_audit_kit-0.2.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.2.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.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/json_report.py +2 -1
- agent_audit_kit-0.3.2/agent_audit_kit/output/pdf_report.py +299 -0
- agent_audit_kit-0.3.2/agent_audit_kit/output/pr_summary.py +120 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/sarif.py +108 -23
- agent_audit_kit-0.3.2/agent_audit_kit/output/sbom.py +133 -0
- agent_audit_kit-0.3.2/agent_audit_kit/rules/builtin.py +2686 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/_helpers.py +2 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/a2a_protocol.py +85 -0
- {agent_audit_kit-0.2.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/hook_rce.py +144 -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/langchain_vuln.py +188 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/log_injection.py +155 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/marketplace_manifest.py +250 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/mcp_auth_patterns.py +188 -0
- {agent_audit_kit-0.2.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/mcp_tasks.py +133 -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_misconfig.py +142 -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/pin_drift.py +29 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/routines.py +122 -0
- agent_audit_kit-0.2.0/agent_audit_kit/scanners/rust_scan.py → agent_audit_kit-0.3.2/agent_audit_kit/scanners/rust_pattern_scan.py +16 -1
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/rust_scan.py +25 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/skill_poisoning.py +200 -0
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/ssrf_patterns.py +153 -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.2.0/agent_audit_kit/scanners/typescript_scan.py → agent_audit_kit-0.3.2/agent_audit_kit/scanners/typescript_pattern_scan.py +20 -1
- agent_audit_kit-0.3.2/agent_audit_kit/scanners/typescript_scan.py +25 -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.2/ci/gitlab/agent-audit-kit.gitlab-ci.yml +46 -0
- agent_audit_kit-0.3.2/docs/blog/state-of-mcp-security-template.md +63 -0
- agent_audit_kit-0.3.2/docs/comparisons.md +121 -0
- agent_audit_kit-0.3.2/docs/disclosure-policy.md +65 -0
- agent_audit_kit-0.3.2/docs/gitlab-ci.md +92 -0
- agent_audit_kit-0.3.2/docs/launch/CHECKLIST.md +78 -0
- agent_audit_kit-0.3.2/docs/launch/hn.md +78 -0
- agent_audit_kit-0.3.2/docs/launch/press.md +77 -0
- agent_audit_kit-0.3.2/docs/launch/reddit.md +85 -0
- agent_audit_kit-0.3.2/docs/launch/release-notes-v0.3.0.md +80 -0
- agent_audit_kit-0.3.2/docs/launch/x-thread.md +107 -0
- agent_audit_kit-0.3.2/docs/metrics.md +73 -0
- agent_audit_kit-0.3.2/docs/owasp-agentic-coverage.md +18 -0
- agent_audit_kit-0.3.2/docs/research-log.md +57 -0
- agent_audit_kit-0.3.2/docs/rule-schema.md +58 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/entrypoint.sh +60 -0
- agent_audit_kit-0.3.2/examples/README.md +46 -0
- agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/README.md +53 -0
- agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-inspired.mcp.json +44 -0
- agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-settings.json +17 -0
- agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/scan-results.json +1012 -0
- agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/scan-results.sarif +2181 -0
- agent_audit_kit-0.3.2/examples/ci-integration/README.md +19 -0
- agent_audit_kit-0.3.2/examples/ci-integration/docker-one-liner.sh +20 -0
- agent_audit_kit-0.3.2/examples/ci-integration/github-actions-sarif.yml +41 -0
- agent_audit_kit-0.3.2/examples/ci-integration/gitlab-ci-scan.yml +25 -0
- agent_audit_kit-0.3.2/examples/ci-integration/pre-commit-config.yaml +13 -0
- agent_audit_kit-0.3.2/examples/run-all-examples.sh +57 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/01-no-auth-remote/.mcp.json +13 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/01-no-auth-remote/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/02-shell-injection/.mcp.json +25 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/02-shell-injection/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/03-hardcoded-secrets/.gitignore +3 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/03-hardcoded-secrets/.mcp.json +21 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/03-hardcoded-secrets/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/04-hook-exfiltration/.claude/settings.json +28 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/04-hook-exfiltration/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/05-trust-boundary-violations/.claude/settings.json +16 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/05-trust-boundary-violations/.mcp.json +8 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/05-trust-boundary-violations/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/06-tool-poisoning/.mcp.json +34 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/06-tool-poisoning/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/07-tainted-tool-function/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/07-tainted-tool-function/server.py +71 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/08-transport-insecurity/.mcp.json +20 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/08-transport-insecurity/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/09-a2a-insecure-agent/agent-card.json +30 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/09-a2a-insecure-agent/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/10-supply-chain-risks/.mcp.json +12 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/10-supply-chain-risks/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/10-supply-chain-risks/package.json +13 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/11-legal-compliance/expected-findings.json +6 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/11-legal-compliance/package.json +9 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/11-legal-compliance/subproject/package.json +8 -0
- agent_audit_kit-0.3.2/examples/vulnerable-configs/README.md +51 -0
- agent_audit_kit-0.3.2/launch/MARKET-RESEARCH-2026-04-12.md +340 -0
- agent_audit_kit-0.3.2/launch/awesome-list-prs/awesome-opensource-security.md +33 -0
- agent_audit_kit-0.3.2/launch/awesome-list-prs/awesome-security.md +35 -0
- agent_audit_kit-0.3.2/launch/blog-50-mcp-servers.md +151 -0
- agent_audit_kit-0.3.2/launch/demo.cast +104 -0
- agent_audit_kit-0.3.2/launch/owasp-outreach.md +90 -0
- {agent_audit_kit-0.2.0/docs → agent_audit_kit-0.3.2}/mkdocs.yml +3 -2
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/pyproject.toml +12 -1
- agent_audit_kit-0.3.2/rules.json +3281 -0
- agent_audit_kit-0.3.2/scripts/cve_watcher.py +112 -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/a2a_2026/vulnerable_card.json +17 -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/hook_rce/safe_settings.json +12 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/hook_rce/vulnerable_settings.json +12 -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/langchain/safe_requirements.txt +2 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/langchain/vulnerable_prompt.py +7 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/langchain/vulnerable_requirements.txt +3 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/marketplace/safe.json +16 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/marketplace/vulnerable.json +23 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/mcp_auth/safe_server.py +26 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/mcp_auth/vulnerable_server.py +29 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/oauth/safe.py +27 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/oauth/vulnerable.py +21 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/routines/safe.json +6 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/routines/vulnerable.json +5 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/skills/safe.md +12 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/skills/vulnerable.md +21 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/ssrf/safe.py +18 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/ssrf/vulnerable.py +18 -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.2/tests/fixtures/cves/tasks/safe.py +31 -0
- agent_audit_kit-0.3.2/tests/fixtures/cves/tasks/vulnerable.py +22 -0
- 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_a2a_2026.py +18 -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_cves_2026.py +184 -0
- agent_audit_kit-0.3.2/tests/test_engine.py +115 -0
- agent_audit_kit-0.3.2/tests/test_examples.py +49 -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.2.0 → agent_audit_kit-0.3.2}/tests/test_llm_scan.py +86 -0
- agent_audit_kit-0.3.2/tests/test_marketplace_manifest.py +43 -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.2/tests/test_phase3.py +144 -0
- agent_audit_kit-0.3.2/tests/test_phase5.py +58 -0
- agent_audit_kit-0.3.2/tests/test_pin_drift.py +96 -0
- 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_skill_poisoning.py +50 -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.2/vscode-extension/CLAUDE.md +57 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/package.json +1 -1
- agent_audit_kit-0.2.0/.github/workflows/release.yml +0 -147
- agent_audit_kit-0.2.0/CHANGELOG.md +0 -28
- agent_audit_kit-0.2.0/README.md +0 -321
- agent_audit_kit-0.2.0/agent_audit_kit/engine.py +0 -138
- agent_audit_kit-0.2.0/agent_audit_kit/llm_scan.py +0 -92
- agent_audit_kit-0.2.0/agent_audit_kit/rules/builtin.py +0 -1209
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.agent-audit-kit.yml +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/dependabot.yml +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/workflows/ci.yml +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/workflows/codeql.yml +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/workflows/scorecard.yml +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.pre-commit-hooks.yaml +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/CODE_OF_CONDUCT.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/CONTRIBUTING.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/Dockerfile +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/LICENSE +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/SECURITY.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/data/vuln_db.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/diff.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/discovery.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/__init__.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/compliance.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/console.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/owasp_report.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/pinning.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/proxy/__init__.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/proxy/interceptor.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/rules/__init__.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/__init__.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/hook_injection.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/legal_compliance.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/secret_exposure.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/supply_chain.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/taint_analysis.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/tool_poisoning.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/transport_security.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/trust_boundary.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scoring.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/verification.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/vuln_db.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/README.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/crawler.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/run_benchmark.sh +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_01_clean.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_02_secrets.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_03_no_auth.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_04_shell_injection.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_05_mixed.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/CNAME +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/ci-cd.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/comparison.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/getting-started.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/index.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/owasp-mapping.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/rules.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/requirements-lock.txt +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/scripts/generate_lockfile.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/conftest.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/clean_mcp.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/clean_settings.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/env_with_secrets +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/package_with_risks.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_hooks.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_mcp.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_settings.json +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_a2a_protocol.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_action.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_agent_config.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_cli.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_compliance_output.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_diff.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_discovery.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_fix.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_hook_injection.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_legal_compliance.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_llm_scan_mod.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_mcp_config.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_owasp_report.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_owasp_report_output.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_pinning.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_pinning_mod.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_proxy.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_sarif_output.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_scoring.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_secret_exposure.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_supply_chain.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_taint_analysis.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_tool_poisoning.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_transport_security.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_trust_boundary.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_verification.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_verification_mod.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_vuln_db.py +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/.vscodeignore +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/README.md +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/src/extension.ts +0 -0
- {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/tsconfig.json +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
github: sattyamjjain
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
name: AAK Response SLA — CVE watcher
|
|
2
|
+
|
|
3
|
+
# Implements the public 48-hour CVE-to-rule commitment described in
|
|
4
|
+
# ROADMAP_2026.md §2.3. Queries NVD's keyword feed for recent MCP-related
|
|
5
|
+
# CVEs, diffs against what's already in CHANGELOG.cves.md, and files an
|
|
6
|
+
# issue tagged `cve-response` for anything new. Runs every 6 hours.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
schedule:
|
|
10
|
+
- cron: "17 */6 * * *"
|
|
11
|
+
workflow_dispatch: {}
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
issues: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
watch:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.11"
|
|
27
|
+
|
|
28
|
+
- name: Fetch NVD MCP CVEs and diff against CHANGELOG.cves.md
|
|
29
|
+
id: diff
|
|
30
|
+
env:
|
|
31
|
+
NVD_API_KEY: ${{ secrets.NVD_API_KEY }}
|
|
32
|
+
run: |
|
|
33
|
+
python3 scripts/cve_watcher.py > new_cves.json
|
|
34
|
+
test -s new_cves.json && echo "new_cves=true" >> "$GITHUB_OUTPUT" || echo "new_cves=false" >> "$GITHUB_OUTPUT"
|
|
35
|
+
|
|
36
|
+
- name: File response-tracking issue
|
|
37
|
+
if: steps.diff.outputs.new_cves == 'true'
|
|
38
|
+
uses: actions/github-script@v7
|
|
39
|
+
with:
|
|
40
|
+
script: |
|
|
41
|
+
const fs = require('fs');
|
|
42
|
+
const cves = JSON.parse(fs.readFileSync('new_cves.json', 'utf-8'));
|
|
43
|
+
for (const cve of cves) {
|
|
44
|
+
const title = `CVE-response: ${cve.id} (${cve.severity || 'unknown'} CVSS ${cve.cvss || 'n/a'})`;
|
|
45
|
+
const body = [
|
|
46
|
+
`## ${cve.id}`,
|
|
47
|
+
``,
|
|
48
|
+
`**NVD:** https://nvd.nist.gov/vuln/detail/${cve.id}`,
|
|
49
|
+
`**Published:** ${cve.published}`,
|
|
50
|
+
`**CVSS:** ${cve.cvss || 'n/a'}`,
|
|
51
|
+
``,
|
|
52
|
+
`### Description`,
|
|
53
|
+
``,
|
|
54
|
+
cve.description || '(no description yet)',
|
|
55
|
+
``,
|
|
56
|
+
`### AAK response checklist (48h SLA)`,
|
|
57
|
+
``,
|
|
58
|
+
`- [ ] Verify CVE on NVD + vendor advisory`,
|
|
59
|
+
`- [ ] Author rule(s): \`AAK-XXX-XXX\``,
|
|
60
|
+
`- [ ] Add positive + negative fixtures under \`tests/fixtures/cves/\``,
|
|
61
|
+
`- [ ] Add remediation + framework mapping`,
|
|
62
|
+
`- [ ] Update \`CHANGELOG.cves.md\` with shipped-at timestamp`,
|
|
63
|
+
`- [ ] Tag patch release`,
|
|
64
|
+
].join('\n');
|
|
65
|
+
await github.rest.issues.create({
|
|
66
|
+
owner: context.repo.owner,
|
|
67
|
+
repo: context.repo.repo,
|
|
68
|
+
title,
|
|
69
|
+
body,
|
|
70
|
+
labels: ['cve-response', 'sla-48h'],
|
|
71
|
+
});
|
|
72
|
+
}
|
|
@@ -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
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
packages: write
|
|
11
|
+
id-token: write
|
|
12
|
+
attestations: write
|
|
13
|
+
|
|
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
|
+
|
|
40
|
+
# --------------------------------------------------------------------------
|
|
41
|
+
# 1. Publish to PyPI using trusted publishing (OIDC)
|
|
42
|
+
# --------------------------------------------------------------------------
|
|
43
|
+
pypi:
|
|
44
|
+
needs: cve-response-gate
|
|
45
|
+
name: Publish to PyPI
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
environment:
|
|
48
|
+
name: pypi
|
|
49
|
+
url: https://pypi.org/p/agent-audit-kit
|
|
50
|
+
permissions:
|
|
51
|
+
id-token: write
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v4
|
|
54
|
+
|
|
55
|
+
- name: Set up Python
|
|
56
|
+
uses: actions/setup-python@v5
|
|
57
|
+
with:
|
|
58
|
+
python-version: '3.11'
|
|
59
|
+
|
|
60
|
+
- name: Install build tools
|
|
61
|
+
run: python -m pip install --upgrade pip build
|
|
62
|
+
|
|
63
|
+
- name: Build package
|
|
64
|
+
run: python -m build
|
|
65
|
+
|
|
66
|
+
- name: Publish to PyPI
|
|
67
|
+
uses: pypa/gh-action-pypi-publish@v1.13.0
|
|
68
|
+
|
|
69
|
+
# --------------------------------------------------------------------------
|
|
70
|
+
# 2. Build, scan, and push Docker image to GHCR
|
|
71
|
+
# --------------------------------------------------------------------------
|
|
72
|
+
docker:
|
|
73
|
+
name: Push Docker image to GHCR
|
|
74
|
+
needs: cve-response-gate
|
|
75
|
+
runs-on: ubuntu-latest
|
|
76
|
+
permissions:
|
|
77
|
+
contents: read
|
|
78
|
+
packages: write
|
|
79
|
+
id-token: write
|
|
80
|
+
attestations: write
|
|
81
|
+
steps:
|
|
82
|
+
- uses: actions/checkout@v4
|
|
83
|
+
|
|
84
|
+
- name: Set up Docker Buildx
|
|
85
|
+
uses: docker/setup-buildx-action@v3
|
|
86
|
+
|
|
87
|
+
- name: Log in to GHCR
|
|
88
|
+
uses: docker/login-action@v3
|
|
89
|
+
with:
|
|
90
|
+
registry: ghcr.io
|
|
91
|
+
username: ${{ github.actor }}
|
|
92
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
93
|
+
|
|
94
|
+
- name: Extract version from tag
|
|
95
|
+
id: version
|
|
96
|
+
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
|
97
|
+
|
|
98
|
+
- name: Build image for scanning
|
|
99
|
+
uses: docker/build-push-action@v5
|
|
100
|
+
with:
|
|
101
|
+
context: .
|
|
102
|
+
load: true
|
|
103
|
+
tags: agent-audit-kit:scan
|
|
104
|
+
|
|
105
|
+
- name: Scan Docker image with Trivy
|
|
106
|
+
uses: aquasecurity/trivy-action@master
|
|
107
|
+
with:
|
|
108
|
+
image-ref: agent-audit-kit:scan
|
|
109
|
+
format: sarif
|
|
110
|
+
output: trivy-results.sarif
|
|
111
|
+
severity: CRITICAL,HIGH
|
|
112
|
+
|
|
113
|
+
- name: Build and push
|
|
114
|
+
id: push
|
|
115
|
+
uses: docker/build-push-action@v5
|
|
116
|
+
with:
|
|
117
|
+
context: .
|
|
118
|
+
push: true
|
|
119
|
+
tags: |
|
|
120
|
+
ghcr.io/sattyamjjain/agent-audit-kit:${{ steps.version.outputs.version }}
|
|
121
|
+
ghcr.io/sattyamjjain/agent-audit-kit:latest
|
|
122
|
+
labels: |
|
|
123
|
+
org.opencontainers.image.title=AgentAuditKit
|
|
124
|
+
org.opencontainers.image.description=Security scanner for MCP-connected AI agent pipelines
|
|
125
|
+
org.opencontainers.image.version=${{ steps.version.outputs.version }}
|
|
126
|
+
org.opencontainers.image.source=https://github.com/sattyamjjain/agent-audit-kit
|
|
127
|
+
org.opencontainers.image.licenses=MIT
|
|
128
|
+
cache-from: type=gha
|
|
129
|
+
cache-to: type=gha,mode=max
|
|
130
|
+
|
|
131
|
+
- name: Generate SLSA provenance attestation
|
|
132
|
+
uses: actions/attest-build-provenance@v2
|
|
133
|
+
with:
|
|
134
|
+
subject-name: ghcr.io/sattyamjjain/agent-audit-kit
|
|
135
|
+
subject-digest: ${{ steps.push.outputs.digest }}
|
|
136
|
+
push-to-registry: true
|
|
137
|
+
|
|
138
|
+
# --------------------------------------------------------------------------
|
|
139
|
+
# 3. Sign the rule bundle + SBOMs with Sigstore (keyless OIDC)
|
|
140
|
+
# --------------------------------------------------------------------------
|
|
141
|
+
bundle-and-sign:
|
|
142
|
+
name: Rule bundle + SBOM (Sigstore)
|
|
143
|
+
needs: cve-response-gate
|
|
144
|
+
runs-on: ubuntu-latest
|
|
145
|
+
permissions:
|
|
146
|
+
id-token: write
|
|
147
|
+
contents: read
|
|
148
|
+
steps:
|
|
149
|
+
- uses: actions/checkout@v4
|
|
150
|
+
|
|
151
|
+
- name: Set up Python
|
|
152
|
+
uses: actions/setup-python@v5
|
|
153
|
+
with:
|
|
154
|
+
python-version: '3.11'
|
|
155
|
+
|
|
156
|
+
- name: Install agent-audit-kit
|
|
157
|
+
run: pip install -e .
|
|
158
|
+
|
|
159
|
+
- name: Export rule bundle + compute digest
|
|
160
|
+
run: |
|
|
161
|
+
agent-audit-kit export-rules --out rules.json
|
|
162
|
+
sha256sum rules.json > rules.json.sha256
|
|
163
|
+
cat rules.json.sha256
|
|
164
|
+
|
|
165
|
+
- name: Emit SBOMs (CycloneDX + SPDX)
|
|
166
|
+
run: |
|
|
167
|
+
agent-audit-kit sbom . --format cyclonedx --output sbom.cdx.json
|
|
168
|
+
agent-audit-kit sbom . --format spdx --output sbom.spdx.json
|
|
169
|
+
|
|
170
|
+
- name: Sigstore keyless sign
|
|
171
|
+
uses: sigstore/gh-action-sigstore-python@v3.0.0
|
|
172
|
+
with:
|
|
173
|
+
inputs: |
|
|
174
|
+
rules.json
|
|
175
|
+
sbom.cdx.json
|
|
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
|
|
185
|
+
|
|
186
|
+
- name: Upload signed artifacts
|
|
187
|
+
uses: actions/upload-artifact@v4
|
|
188
|
+
with:
|
|
189
|
+
name: signed-bundle
|
|
190
|
+
path: |
|
|
191
|
+
rules.json
|
|
192
|
+
rules.json.sha256
|
|
193
|
+
sbom.cdx.json
|
|
194
|
+
sbom.spdx.json
|
|
195
|
+
*.sigstore
|
|
196
|
+
*.sigstore.json
|
|
197
|
+
*.sig
|
|
198
|
+
if-no-files-found: warn
|
|
199
|
+
|
|
200
|
+
# --------------------------------------------------------------------------
|
|
201
|
+
# 4. Create GitHub Release with auto-generated notes + signed bundle
|
|
202
|
+
# --------------------------------------------------------------------------
|
|
203
|
+
github-release:
|
|
204
|
+
name: Create GitHub Release
|
|
205
|
+
runs-on: ubuntu-latest
|
|
206
|
+
needs: [pypi, docker, bundle-and-sign]
|
|
207
|
+
permissions:
|
|
208
|
+
contents: write
|
|
209
|
+
steps:
|
|
210
|
+
- uses: actions/checkout@v4
|
|
211
|
+
|
|
212
|
+
- name: Download signed artifacts
|
|
213
|
+
uses: actions/download-artifact@v4
|
|
214
|
+
with:
|
|
215
|
+
name: signed-bundle
|
|
216
|
+
path: signed
|
|
217
|
+
|
|
218
|
+
- name: Create release
|
|
219
|
+
uses: softprops/action-gh-release@v2
|
|
220
|
+
with:
|
|
221
|
+
generate_release_notes: true
|
|
222
|
+
files: |
|
|
223
|
+
signed/rules.json
|
|
224
|
+
signed/rules.json.sha256
|
|
225
|
+
signed/sbom.cdx.json
|
|
226
|
+
signed/sbom.spdx.json
|
|
227
|
+
signed/*.sigstore
|
|
228
|
+
signed/*.sigstore.json
|
|
229
|
+
signed/*.sig
|
|
230
|
+
body: |
|
|
231
|
+
## Installation
|
|
232
|
+
|
|
233
|
+
**pip:**
|
|
234
|
+
```bash
|
|
235
|
+
pip install agent-audit-kit==${{ github.ref_name }}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Docker:**
|
|
239
|
+
```bash
|
|
240
|
+
docker pull ghcr.io/sattyamjjain/agent-audit-kit:${{ github.ref_name }}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**GitHub Action:**
|
|
244
|
+
```yaml
|
|
245
|
+
- uses: sattyamjjain/agent-audit-kit@${{ github.ref_name }}
|
|
246
|
+
with:
|
|
247
|
+
fail-on: high
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Supply chain
|
|
251
|
+
|
|
252
|
+
- `rules.json` — deterministic rule bundle
|
|
253
|
+
- `rules.json.sha256` — trusted digest
|
|
254
|
+
- `sbom.cdx.json` / `sbom.spdx.json` — CycloneDX + SPDX SBOM
|
|
255
|
+
- `*.sigstore` — Sigstore keyless signatures (verify with `agent-audit-kit verify-bundle`)
|
|
256
|
+
env:
|
|
257
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -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
|
|
@@ -35,9 +35,13 @@ Thumbs.db
|
|
|
35
35
|
.env
|
|
36
36
|
.env.*
|
|
37
37
|
|
|
38
|
+
# Claude Code auto-memory
|
|
39
|
+
.claude/auto-memory/dirty-files
|
|
40
|
+
|
|
38
41
|
# Agent Audit Kit cache
|
|
39
42
|
.agent-audit-kit/
|
|
40
43
|
|
|
41
44
|
# Benchmark data (downloaded configs)
|
|
42
45
|
benchmarks/data/
|
|
43
46
|
benchmarks/results.json
|
|
47
|
+
benchmarks/site/
|
|
@@ -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._
|