agent-audit-kit 0.3.52__tar.gz → 0.3.56__tar.gz

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