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.
Files changed (296) hide show
  1. agent_audit_kit-0.3.2/.claude/auto-memory/config.json +3 -0
  2. agent_audit_kit-0.3.2/.github/FUNDING.yml +1 -0
  3. agent_audit_kit-0.3.2/.github/workflows/cve-watcher.yml +72 -0
  4. agent_audit_kit-0.3.2/.github/workflows/docker-nightly.yml +74 -0
  5. agent_audit_kit-0.3.2/.github/workflows/mcp-security-index.yml +87 -0
  6. agent_audit_kit-0.3.2/.github/workflows/release.yml +257 -0
  7. agent_audit_kit-0.3.2/.github/workflows/sync-rule-count.yml +60 -0
  8. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.gitignore +4 -0
  9. agent_audit_kit-0.3.2/.pre-commit-config.yaml +26 -0
  10. agent_audit_kit-0.3.2/CHANGELOG.cves.md +59 -0
  11. agent_audit_kit-0.3.2/CHANGELOG.md +198 -0
  12. agent_audit_kit-0.3.2/CLAUDE.md +148 -0
  13. agent_audit_kit-0.3.2/CLAUDE_PROMPT.md +158 -0
  14. agent_audit_kit-0.3.2/DEEP_ANALYSIS.md +226 -0
  15. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/PKG-INFO +115 -39
  16. agent_audit_kit-0.3.2/README.md +396 -0
  17. agent_audit_kit-0.3.2/ROADMAP_2026.md +149 -0
  18. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/action.yml +11 -1
  19. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/__init__.py +2 -1
  20. agent_audit_kit-0.3.2/agent_audit_kit/advisories.py +180 -0
  21. agent_audit_kit-0.3.2/agent_audit_kit/bundle.py +92 -0
  22. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/cli.py +292 -20
  23. agent_audit_kit-0.3.2/agent_audit_kit/engine.py +174 -0
  24. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/fix.py +110 -0
  25. agent_audit_kit-0.3.2/agent_audit_kit/llm_scan.py +242 -0
  26. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/models.py +22 -0
  27. agent_audit_kit-0.3.2/agent_audit_kit/output/aicm.py +66 -0
  28. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/json_report.py +2 -1
  29. agent_audit_kit-0.3.2/agent_audit_kit/output/pdf_report.py +299 -0
  30. agent_audit_kit-0.3.2/agent_audit_kit/output/pr_summary.py +120 -0
  31. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/sarif.py +108 -23
  32. agent_audit_kit-0.3.2/agent_audit_kit/output/sbom.py +133 -0
  33. agent_audit_kit-0.3.2/agent_audit_kit/rules/builtin.py +2686 -0
  34. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/_helpers.py +2 -0
  35. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/a2a_protocol.py +85 -0
  36. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/agent_config.py +43 -0
  37. agent_audit_kit-0.3.2/agent_audit_kit/scanners/healthcare_ai.py +201 -0
  38. agent_audit_kit-0.3.2/agent_audit_kit/scanners/hook_rce.py +144 -0
  39. agent_audit_kit-0.3.2/agent_audit_kit/scanners/india_pii.py +187 -0
  40. agent_audit_kit-0.3.2/agent_audit_kit/scanners/langchain_vuln.py +188 -0
  41. agent_audit_kit-0.3.2/agent_audit_kit/scanners/log_injection.py +155 -0
  42. agent_audit_kit-0.3.2/agent_audit_kit/scanners/marketplace_manifest.py +250 -0
  43. agent_audit_kit-0.3.2/agent_audit_kit/scanners/mcp_auth_patterns.py +188 -0
  44. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/mcp_config.py +77 -0
  45. agent_audit_kit-0.3.2/agent_audit_kit/scanners/mcp_middleware.py +304 -0
  46. agent_audit_kit-0.3.2/agent_audit_kit/scanners/mcp_tasks.py +133 -0
  47. agent_audit_kit-0.3.2/agent_audit_kit/scanners/neo4j_cve.py +109 -0
  48. agent_audit_kit-0.3.2/agent_audit_kit/scanners/oauth_misconfig.py +142 -0
  49. agent_audit_kit-0.3.2/agent_audit_kit/scanners/oauth_surface.py +250 -0
  50. agent_audit_kit-0.3.2/agent_audit_kit/scanners/pin_drift.py +29 -0
  51. agent_audit_kit-0.3.2/agent_audit_kit/scanners/routines.py +122 -0
  52. 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
  53. agent_audit_kit-0.3.2/agent_audit_kit/scanners/rust_scan.py +25 -0
  54. agent_audit_kit-0.3.2/agent_audit_kit/scanners/skill_poisoning.py +200 -0
  55. agent_audit_kit-0.3.2/agent_audit_kit/scanners/ssrf_patterns.py +153 -0
  56. agent_audit_kit-0.3.2/agent_audit_kit/scanners/state_privacy.py +122 -0
  57. agent_audit_kit-0.3.2/agent_audit_kit/scanners/stdio_injection.py +382 -0
  58. 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
  59. agent_audit_kit-0.3.2/agent_audit_kit/scanners/typescript_scan.py +25 -0
  60. agent_audit_kit-0.3.2/agent_audit_kit/watch.py +132 -0
  61. agent_audit_kit-0.3.2/benchmarks/index_builder.py +514 -0
  62. agent_audit_kit-0.3.2/benchmarks/sources.py +259 -0
  63. agent_audit_kit-0.3.2/ci/gitlab/agent-audit-kit.gitlab-ci.yml +46 -0
  64. agent_audit_kit-0.3.2/docs/blog/state-of-mcp-security-template.md +63 -0
  65. agent_audit_kit-0.3.2/docs/comparisons.md +121 -0
  66. agent_audit_kit-0.3.2/docs/disclosure-policy.md +65 -0
  67. agent_audit_kit-0.3.2/docs/gitlab-ci.md +92 -0
  68. agent_audit_kit-0.3.2/docs/launch/CHECKLIST.md +78 -0
  69. agent_audit_kit-0.3.2/docs/launch/hn.md +78 -0
  70. agent_audit_kit-0.3.2/docs/launch/press.md +77 -0
  71. agent_audit_kit-0.3.2/docs/launch/reddit.md +85 -0
  72. agent_audit_kit-0.3.2/docs/launch/release-notes-v0.3.0.md +80 -0
  73. agent_audit_kit-0.3.2/docs/launch/x-thread.md +107 -0
  74. agent_audit_kit-0.3.2/docs/metrics.md +73 -0
  75. agent_audit_kit-0.3.2/docs/owasp-agentic-coverage.md +18 -0
  76. agent_audit_kit-0.3.2/docs/research-log.md +57 -0
  77. agent_audit_kit-0.3.2/docs/rule-schema.md +58 -0
  78. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/entrypoint.sh +60 -0
  79. agent_audit_kit-0.3.2/examples/README.md +46 -0
  80. agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/README.md +53 -0
  81. agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-inspired.mcp.json +44 -0
  82. agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/configs/dvmcp-settings.json +17 -0
  83. agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/scan-results.json +1012 -0
  84. agent_audit_kit-0.3.2/examples/case-studies/damn-vulnerable-mcp/scan-results.sarif +2181 -0
  85. agent_audit_kit-0.3.2/examples/ci-integration/README.md +19 -0
  86. agent_audit_kit-0.3.2/examples/ci-integration/docker-one-liner.sh +20 -0
  87. agent_audit_kit-0.3.2/examples/ci-integration/github-actions-sarif.yml +41 -0
  88. agent_audit_kit-0.3.2/examples/ci-integration/gitlab-ci-scan.yml +25 -0
  89. agent_audit_kit-0.3.2/examples/ci-integration/pre-commit-config.yaml +13 -0
  90. agent_audit_kit-0.3.2/examples/run-all-examples.sh +57 -0
  91. agent_audit_kit-0.3.2/examples/vulnerable-configs/01-no-auth-remote/.mcp.json +13 -0
  92. agent_audit_kit-0.3.2/examples/vulnerable-configs/01-no-auth-remote/expected-findings.json +6 -0
  93. agent_audit_kit-0.3.2/examples/vulnerable-configs/02-shell-injection/.mcp.json +25 -0
  94. agent_audit_kit-0.3.2/examples/vulnerable-configs/02-shell-injection/expected-findings.json +6 -0
  95. agent_audit_kit-0.3.2/examples/vulnerable-configs/03-hardcoded-secrets/.gitignore +3 -0
  96. agent_audit_kit-0.3.2/examples/vulnerable-configs/03-hardcoded-secrets/.mcp.json +21 -0
  97. agent_audit_kit-0.3.2/examples/vulnerable-configs/03-hardcoded-secrets/expected-findings.json +6 -0
  98. agent_audit_kit-0.3.2/examples/vulnerable-configs/04-hook-exfiltration/.claude/settings.json +28 -0
  99. agent_audit_kit-0.3.2/examples/vulnerable-configs/04-hook-exfiltration/expected-findings.json +6 -0
  100. agent_audit_kit-0.3.2/examples/vulnerable-configs/05-trust-boundary-violations/.claude/settings.json +16 -0
  101. agent_audit_kit-0.3.2/examples/vulnerable-configs/05-trust-boundary-violations/.mcp.json +8 -0
  102. agent_audit_kit-0.3.2/examples/vulnerable-configs/05-trust-boundary-violations/expected-findings.json +6 -0
  103. agent_audit_kit-0.3.2/examples/vulnerable-configs/06-tool-poisoning/.mcp.json +34 -0
  104. agent_audit_kit-0.3.2/examples/vulnerable-configs/06-tool-poisoning/expected-findings.json +6 -0
  105. agent_audit_kit-0.3.2/examples/vulnerable-configs/07-tainted-tool-function/expected-findings.json +6 -0
  106. agent_audit_kit-0.3.2/examples/vulnerable-configs/07-tainted-tool-function/server.py +71 -0
  107. agent_audit_kit-0.3.2/examples/vulnerable-configs/08-transport-insecurity/.mcp.json +20 -0
  108. agent_audit_kit-0.3.2/examples/vulnerable-configs/08-transport-insecurity/expected-findings.json +6 -0
  109. agent_audit_kit-0.3.2/examples/vulnerable-configs/09-a2a-insecure-agent/agent-card.json +30 -0
  110. agent_audit_kit-0.3.2/examples/vulnerable-configs/09-a2a-insecure-agent/expected-findings.json +6 -0
  111. agent_audit_kit-0.3.2/examples/vulnerable-configs/10-supply-chain-risks/.mcp.json +12 -0
  112. agent_audit_kit-0.3.2/examples/vulnerable-configs/10-supply-chain-risks/expected-findings.json +6 -0
  113. agent_audit_kit-0.3.2/examples/vulnerable-configs/10-supply-chain-risks/package.json +13 -0
  114. agent_audit_kit-0.3.2/examples/vulnerable-configs/11-legal-compliance/expected-findings.json +6 -0
  115. agent_audit_kit-0.3.2/examples/vulnerable-configs/11-legal-compliance/package.json +9 -0
  116. agent_audit_kit-0.3.2/examples/vulnerable-configs/11-legal-compliance/subproject/package.json +8 -0
  117. agent_audit_kit-0.3.2/examples/vulnerable-configs/README.md +51 -0
  118. agent_audit_kit-0.3.2/launch/MARKET-RESEARCH-2026-04-12.md +340 -0
  119. agent_audit_kit-0.3.2/launch/awesome-list-prs/awesome-opensource-security.md +33 -0
  120. agent_audit_kit-0.3.2/launch/awesome-list-prs/awesome-security.md +35 -0
  121. agent_audit_kit-0.3.2/launch/blog-50-mcp-servers.md +151 -0
  122. agent_audit_kit-0.3.2/launch/demo.cast +104 -0
  123. agent_audit_kit-0.3.2/launch/owasp-outreach.md +90 -0
  124. {agent_audit_kit-0.2.0/docs → agent_audit_kit-0.3.2}/mkdocs.yml +3 -2
  125. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/pyproject.toml +12 -1
  126. agent_audit_kit-0.3.2/rules.json +3281 -0
  127. agent_audit_kit-0.3.2/scripts/cve_watcher.py +112 -0
  128. agent_audit_kit-0.3.2/scripts/gen_owasp_coverage.py +89 -0
  129. agent_audit_kit-0.3.2/scripts/sync_rule_count.py +161 -0
  130. agent_audit_kit-0.3.2/scripts/watch_csa_mcp_baseline.py +181 -0
  131. agent_audit_kit-0.3.2/tests/fixtures/cves/a2a_2026/vulnerable_card.json +17 -0
  132. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/patched/py_argv_allowlist.py +20 -0
  133. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/vulnerable/py_os_system_stdin.py +10 -0
  134. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/vulnerable/py_subprocess_shell.py +21 -0
  135. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-30615/vulnerable/ts_execa_shell.ts +13 -0
  136. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/patched/router.go +12 -0
  137. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/vulnerable/router.go +16 -0
  138. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/vulnerable/server.py +22 -0
  139. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-33032/vulnerable/server.ts +11 -0
  140. agent_audit_kit-0.3.2/tests/fixtures/cves/cve-2026-40933/vulnerable/flow.json +13 -0
  141. agent_audit_kit-0.3.2/tests/fixtures/cves/healthcare_ai/safe_skill.md +18 -0
  142. agent_audit_kit-0.3.2/tests/fixtures/cves/healthcare_ai/vulnerable_skill.md +20 -0
  143. agent_audit_kit-0.3.2/tests/fixtures/cves/hook_rce/safe_settings.json +12 -0
  144. agent_audit_kit-0.3.2/tests/fixtures/cves/hook_rce/vulnerable_settings.json +12 -0
  145. agent_audit_kit-0.3.2/tests/fixtures/cves/india_pii/safe.txt +9 -0
  146. agent_audit_kit-0.3.2/tests/fixtures/cves/india_pii/vulnerable.txt +8 -0
  147. agent_audit_kit-0.3.2/tests/fixtures/cves/langchain/safe_requirements.txt +2 -0
  148. agent_audit_kit-0.3.2/tests/fixtures/cves/langchain/vulnerable_prompt.py +7 -0
  149. agent_audit_kit-0.3.2/tests/fixtures/cves/langchain/vulnerable_requirements.txt +3 -0
  150. agent_audit_kit-0.3.2/tests/fixtures/cves/marketplace/safe.json +16 -0
  151. agent_audit_kit-0.3.2/tests/fixtures/cves/marketplace/vulnerable.json +23 -0
  152. agent_audit_kit-0.3.2/tests/fixtures/cves/mcp_auth/safe_server.py +26 -0
  153. agent_audit_kit-0.3.2/tests/fixtures/cves/mcp_auth/vulnerable_server.py +29 -0
  154. agent_audit_kit-0.3.2/tests/fixtures/cves/oauth/safe.py +27 -0
  155. agent_audit_kit-0.3.2/tests/fixtures/cves/oauth/vulnerable.py +21 -0
  156. agent_audit_kit-0.3.2/tests/fixtures/cves/routines/safe.json +6 -0
  157. agent_audit_kit-0.3.2/tests/fixtures/cves/routines/vulnerable.json +5 -0
  158. agent_audit_kit-0.3.2/tests/fixtures/cves/skills/safe.md +12 -0
  159. agent_audit_kit-0.3.2/tests/fixtures/cves/skills/vulnerable.md +21 -0
  160. agent_audit_kit-0.3.2/tests/fixtures/cves/ssrf/safe.py +18 -0
  161. agent_audit_kit-0.3.2/tests/fixtures/cves/ssrf/vulnerable.py +18 -0
  162. agent_audit_kit-0.3.2/tests/fixtures/cves/state_privacy/safe_privacy.md +20 -0
  163. agent_audit_kit-0.3.2/tests/fixtures/cves/state_privacy/vulnerable_privacy.md +8 -0
  164. agent_audit_kit-0.3.2/tests/fixtures/cves/tasks/safe.py +31 -0
  165. agent_audit_kit-0.3.2/tests/fixtures/cves/tasks/vulnerable.py +22 -0
  166. agent_audit_kit-0.3.2/tests/fixtures/incidents/vercel-2026-04-19/app.yaml +9 -0
  167. agent_audit_kit-0.3.2/tests/test_a2a_2026.py +18 -0
  168. agent_audit_kit-0.3.2/tests/test_aicm.py +123 -0
  169. agent_audit_kit-0.3.2/tests/test_compliance_v2.py +82 -0
  170. agent_audit_kit-0.3.2/tests/test_csa_baseline_watcher.py +82 -0
  171. agent_audit_kit-0.3.2/tests/test_cve_fix_and_watch_and_advisories.py +220 -0
  172. agent_audit_kit-0.3.2/tests/test_cves_2026.py +184 -0
  173. agent_audit_kit-0.3.2/tests/test_engine.py +115 -0
  174. agent_audit_kit-0.3.2/tests/test_examples.py +49 -0
  175. agent_audit_kit-0.3.2/tests/test_flowise.py +89 -0
  176. agent_audit_kit-0.3.2/tests/test_healthcare_ai_and_state_privacy.py +149 -0
  177. agent_audit_kit-0.3.2/tests/test_index_builder.py +180 -0
  178. agent_audit_kit-0.3.2/tests/test_india_pii.py +58 -0
  179. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_llm_scan.py +86 -0
  180. agent_audit_kit-0.3.2/tests/test_marketplace_manifest.py +43 -0
  181. agent_audit_kit-0.3.2/tests/test_marketplace_sources.py +114 -0
  182. agent_audit_kit-0.3.2/tests/test_mcpwn.py +108 -0
  183. agent_audit_kit-0.3.2/tests/test_oauth_surface.py +126 -0
  184. agent_audit_kit-0.3.2/tests/test_owasp_agentic_coverage.py +70 -0
  185. agent_audit_kit-0.3.2/tests/test_phase3.py +144 -0
  186. agent_audit_kit-0.3.2/tests/test_phase5.py +58 -0
  187. agent_audit_kit-0.3.2/tests/test_pin_drift.py +96 -0
  188. agent_audit_kit-0.3.2/tests/test_pr_summary.py +96 -0
  189. agent_audit_kit-0.3.2/tests/test_rule_count_sync.py +107 -0
  190. agent_audit_kit-0.3.2/tests/test_sarif_fingerprints.py +131 -0
  191. agent_audit_kit-0.3.2/tests/test_sarif_github_upload.py +143 -0
  192. agent_audit_kit-0.3.2/tests/test_skill_poisoning.py +50 -0
  193. agent_audit_kit-0.3.2/tests/test_stdio_injection.py +62 -0
  194. agent_audit_kit-0.3.2/tests/test_v0_3_1_cve_rules.py +248 -0
  195. agent_audit_kit-0.3.2/vscode-extension/CLAUDE.md +57 -0
  196. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/package.json +1 -1
  197. agent_audit_kit-0.2.0/.github/workflows/release.yml +0 -147
  198. agent_audit_kit-0.2.0/CHANGELOG.md +0 -28
  199. agent_audit_kit-0.2.0/README.md +0 -321
  200. agent_audit_kit-0.2.0/agent_audit_kit/engine.py +0 -138
  201. agent_audit_kit-0.2.0/agent_audit_kit/llm_scan.py +0 -92
  202. agent_audit_kit-0.2.0/agent_audit_kit/rules/builtin.py +0 -1209
  203. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.agent-audit-kit.yml +0 -0
  204. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  205. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  206. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  207. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/dependabot.yml +0 -0
  208. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/workflows/ci.yml +0 -0
  209. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/workflows/codeql.yml +0 -0
  210. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.github/workflows/scorecard.yml +0 -0
  211. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/.pre-commit-hooks.yaml +0 -0
  212. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/CODE_OF_CONDUCT.md +0 -0
  213. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/CONTRIBUTING.md +0 -0
  214. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/Dockerfile +0 -0
  215. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/LICENSE +0 -0
  216. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/SECURITY.md +0 -0
  217. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/data/vuln_db.json +0 -0
  218. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/diff.py +0 -0
  219. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/discovery.py +0 -0
  220. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/__init__.py +0 -0
  221. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/compliance.py +0 -0
  222. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/console.py +0 -0
  223. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/output/owasp_report.py +0 -0
  224. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/pinning.py +0 -0
  225. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/proxy/__init__.py +0 -0
  226. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/proxy/interceptor.py +0 -0
  227. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/rules/__init__.py +0 -0
  228. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/__init__.py +0 -0
  229. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/hook_injection.py +0 -0
  230. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/legal_compliance.py +0 -0
  231. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/secret_exposure.py +0 -0
  232. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/supply_chain.py +0 -0
  233. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/taint_analysis.py +0 -0
  234. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/tool_poisoning.py +0 -0
  235. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/transport_security.py +0 -0
  236. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scanners/trust_boundary.py +0 -0
  237. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/scoring.py +0 -0
  238. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/verification.py +0 -0
  239. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/agent_audit_kit/vuln_db.py +0 -0
  240. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/README.md +0 -0
  241. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/crawler.py +0 -0
  242. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/run_benchmark.sh +0 -0
  243. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_01_clean.json +0 -0
  244. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_02_secrets.json +0 -0
  245. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_03_no_auth.json +0 -0
  246. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_04_shell_injection.json +0 -0
  247. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/benchmarks/sample_configs/sample_05_mixed.json +0 -0
  248. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/CNAME +0 -0
  249. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/ci-cd.md +0 -0
  250. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/comparison.md +0 -0
  251. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/getting-started.md +0 -0
  252. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/index.md +0 -0
  253. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/owasp-mapping.md +0 -0
  254. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/docs/rules.md +0 -0
  255. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/requirements-lock.txt +0 -0
  256. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/scripts/generate_lockfile.py +0 -0
  257. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/conftest.py +0 -0
  258. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/clean_mcp.json +0 -0
  259. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/clean_settings.json +0 -0
  260. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/env_with_secrets +0 -0
  261. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/package_with_risks.json +0 -0
  262. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_hooks.json +0 -0
  263. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_mcp.json +0 -0
  264. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/fixtures/vulnerable_settings.json +0 -0
  265. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_a2a_protocol.py +0 -0
  266. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_action.py +0 -0
  267. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_agent_config.py +0 -0
  268. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_cli.py +0 -0
  269. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_compliance_output.py +0 -0
  270. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_diff.py +0 -0
  271. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_discovery.py +0 -0
  272. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_fix.py +0 -0
  273. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_hook_injection.py +0 -0
  274. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_legal_compliance.py +0 -0
  275. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_llm_scan_mod.py +0 -0
  276. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_mcp_config.py +0 -0
  277. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_owasp_report.py +0 -0
  278. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_owasp_report_output.py +0 -0
  279. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_pinning.py +0 -0
  280. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_pinning_mod.py +0 -0
  281. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_proxy.py +0 -0
  282. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_sarif_output.py +0 -0
  283. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_scoring.py +0 -0
  284. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_secret_exposure.py +0 -0
  285. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_supply_chain.py +0 -0
  286. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_taint_analysis.py +0 -0
  287. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_tool_poisoning.py +0 -0
  288. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_transport_security.py +0 -0
  289. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_trust_boundary.py +0 -0
  290. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_verification.py +0 -0
  291. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_verification_mod.py +0 -0
  292. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/tests/test_vuln_db.py +0 -0
  293. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/.vscodeignore +0 -0
  294. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/README.md +0 -0
  295. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/src/extension.ts +0 -0
  296. {agent_audit_kit-0.2.0 → agent_audit_kit-0.3.2}/vscode-extension/tsconfig.json +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ "triggerMode": "default"
3
+ }
@@ -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._