@hoanghainh/komagu 1.8.0 → 2.0.1

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 (210) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +1 -1
  3. package/assess/lsa/CHANGELOG.md +6 -0
  4. package/assess/lsa/VERSION +1 -1
  5. package/assess/lsa/adapters/build_adapters.py +16 -8
  6. package/assess/lsa/adapters/codex/README.md +1 -1
  7. package/assess/lsa/adapters/generic/README.md +1 -1
  8. package/assess/lsa/examples/eval-run-4/ground-truth.json +823 -0
  9. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/ai-run-stats.json +58 -0
  10. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/coverage.json +85 -0
  11. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/findings/priv-privilege-001.json +822 -0
  12. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/findings/priv-privilege-002.json +393 -0
  13. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/findings.json +4477 -0
  14. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/mass-assignment.candidates.json +232 -0
  15. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-001.json +425 -0
  16. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-002.json +333 -0
  17. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-003.json +400 -0
  18. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-004.json +403 -0
  19. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-005.json +398 -0
  20. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-006.json +63 -0
  21. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/score.json +120 -0
  22. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/ai-run-stats.json +55 -0
  23. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/coverage.json +50 -0
  24. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/findings/priv-privilege-001.json +613 -0
  25. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/findings/priv-privilege-002.json +287 -0
  26. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/findings.json +4870 -0
  27. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/mass-assignment.candidates.json +232 -0
  28. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-001.json +425 -0
  29. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-002.json +333 -0
  30. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-003.json +400 -0
  31. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-004.json +403 -0
  32. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-005.json +398 -0
  33. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-006.json +63 -0
  34. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/score.json +107 -0
  35. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/ai-run-stats.json +58 -0
  36. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/coverage.json +92 -0
  37. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/findings/priv-privilege-001.json +645 -0
  38. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/findings/priv-privilege-002.json +222 -0
  39. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/findings.json +4859 -0
  40. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/mass-assignment.candidates.json +232 -0
  41. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-001.json +425 -0
  42. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-002.json +333 -0
  43. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-003.json +400 -0
  44. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-004.json +403 -0
  45. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-005.json +398 -0
  46. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-006.json +63 -0
  47. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/score.json +121 -0
  48. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/coverage.json +111 -0
  49. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/findings/priv-privilege-001.json +6 -0
  50. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/findings/priv-privilege-002.json +344 -0
  51. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/findings.json +3544 -0
  52. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/mass-assignment.candidates.json +232 -0
  53. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-001.json +425 -0
  54. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-002.json +333 -0
  55. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-003.json +400 -0
  56. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-004.json +403 -0
  57. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-005.json +398 -0
  58. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-006.json +63 -0
  59. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/score.json +123 -0
  60. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/ai-run-stats.json +50 -0
  61. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/coverage.json +42 -0
  62. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings/priv-privilege-001.json +540 -0
  63. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings/priv-privilege-002.json +238 -0
  64. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings.json +4383 -0
  65. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings.sarif +8729 -0
  66. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/mass-assignment.candidates.json +232 -0
  67. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/report.ja.md +1911 -0
  68. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/report.md +1911 -0
  69. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-001.json +425 -0
  70. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-002.json +333 -0
  71. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-003.json +400 -0
  72. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-004.json +403 -0
  73. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-005.json +398 -0
  74. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-006.json +63 -0
  75. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/score.json +101 -0
  76. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/stack-profile.json +226 -0
  77. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/ai-run-stats.json +54 -0
  78. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/coverage.json +66 -0
  79. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/findings/priv-privilege-001.json +440 -0
  80. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/findings/priv-privilege-002.json +229 -0
  81. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/findings.json +3424 -0
  82. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/mass-assignment.candidates.json +232 -0
  83. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-001.json +425 -0
  84. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-002.json +333 -0
  85. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-003.json +400 -0
  86. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-004.json +403 -0
  87. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-005.json +398 -0
  88. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-006.json +63 -0
  89. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/score.json +120 -0
  90. package/assess/lsa/examples/eval-run-5/gptoss-a/ai-run-stats.json +88 -0
  91. package/assess/lsa/examples/eval-run-5/gptoss-a/coverage.json +36 -0
  92. package/assess/lsa/examples/eval-run-5/gptoss-a/findings/priv-privilege-001.json +530 -0
  93. package/assess/lsa/examples/eval-run-5/gptoss-a/findings/priv-privilege-002.json +248 -0
  94. package/assess/lsa/examples/eval-run-5/gptoss-a/findings.json +4766 -0
  95. package/assess/lsa/examples/eval-run-5/gptoss-a/findings.sarif +9326 -0
  96. package/assess/lsa/examples/eval-run-5/gptoss-a/mass-assignment.candidates.json +232 -0
  97. package/assess/lsa/examples/eval-run-5/gptoss-a/report.ja.md +2011 -0
  98. package/assess/lsa/examples/eval-run-5/gptoss-a/report.md +2011 -0
  99. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-001.json +425 -0
  100. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-002.json +333 -0
  101. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-003.json +400 -0
  102. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-004.json +403 -0
  103. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-005.json +398 -0
  104. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-006.json +63 -0
  105. package/assess/lsa/examples/eval-run-5/gptoss-a/score.json +80 -0
  106. package/assess/lsa/examples/eval-run-5/gptoss-a/stack-profile.json +226 -0
  107. package/assess/lsa/examples/eval-run-5/gptoss-b/ai-run-stats.json +83 -0
  108. package/assess/lsa/examples/eval-run-5/gptoss-b/coverage.json +44 -0
  109. package/assess/lsa/examples/eval-run-5/gptoss-b/findings/priv-privilege-001.json +579 -0
  110. package/assess/lsa/examples/eval-run-5/gptoss-b/findings/priv-privilege-002.json +268 -0
  111. package/assess/lsa/examples/eval-run-5/gptoss-b/findings.json +3913 -0
  112. package/assess/lsa/examples/eval-run-5/gptoss-b/mass-assignment.candidates.json +232 -0
  113. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-001.json +425 -0
  114. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-002.json +333 -0
  115. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-003.json +400 -0
  116. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-004.json +403 -0
  117. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-005.json +398 -0
  118. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-006.json +63 -0
  119. package/assess/lsa/examples/eval-run-5/gptoss-b/score.json +94 -0
  120. package/assess/lsa/examples/eval-run-5/ground-truth.json +823 -0
  121. package/assess/lsa/knowledge/severity-and-cwe.md +1 -1
  122. package/assess/lsa/prompts/35-privilege-auditor.md +3 -1
  123. package/assess/lsa/scripts/baseline.py +5 -2
  124. package/assess/lsa/scripts/findings_to_sarif.py +24 -1
  125. package/assess/lsa/tests/EVAL-RESULTS.md +156 -0
  126. package/assess/lsa/tests/score_findings.py +58 -0
  127. package/assess/lsa/tests/test_adapters.py +21 -2
  128. package/assess/lsa/tests/test_baseline.py +8 -0
  129. package/assess/lsa/tests/test_contract_groundwork.py +7 -7
  130. package/assess/lsa/tests/test_eval_run_4.py +73 -0
  131. package/assess/lsa/tests/test_eval_run_5.py +73 -0
  132. package/assess/lsa/tests/test_privilege_tier2.py +30 -0
  133. package/operate/ai/anchoring.py +130 -0
  134. package/operate/ai/client.py +13 -0
  135. package/operate/ai/context.py +105 -0
  136. package/operate/ai/runner.py +197 -69
  137. package/operate/cli/__init__.py +1 -1
  138. package/operate/cli/commands/scan.py +3 -8
  139. package/operate/cli/commands/test.py +1 -1
  140. package/operate/cli/env.py +4 -20
  141. package/operate/cross_user_tester/persona_matrix.py +5 -1
  142. package/operate/devsecops/pipeline.py +5 -5
  143. package/operate/exploit/generator.py +5 -1
  144. package/operate/lsa_sarif/lsa_to_sarif.py +24 -2
  145. package/operate/lsa_sarif/sarif_findings.py +96 -0
  146. package/operate/remediator/runner.py +1 -5
  147. package/operate/remediator/strategies.py +1 -1
  148. package/operate/tests/test_ai_anchoring.py +184 -0
  149. package/operate/tests/test_cli_baseline.py +1 -9
  150. package/operate/tests/test_cli_env.py +8 -29
  151. package/operate/tests/test_cross_user_pipeline.py +2 -2
  152. package/operate/tests/test_exploit_and_virtual_patch.py +3 -3
  153. package/operate/tests/test_headless_ai.py +148 -1
  154. package/operate/tests/test_npm_package.py +2 -16
  155. package/operate/tests/test_sarif_from_scan.py +156 -0
  156. package/package.json +2 -4
  157. package/remediate/authz/README.md +1 -1
  158. package/remediate/authz/dotnet/src/Komagu.Security.Authorization/DefaultKomaguAuthorizationService.cs +1 -1
  159. package/remediate/authz/dotnet/src/Komagu.Security.Authorization/SecurityAuditEvent.cs +2 -2
  160. package/remediate/authz/golang/authz.go +1 -1
  161. package/remediate/authz/nodejs/src/service.js +1 -1
  162. package/remediate/authz/nodejs/tests/test-authz.js +1 -1
  163. package/remediate/authz/patcher.py +3 -4
  164. package/remediate/authz/python/komagu_authz/models.py +2 -2
  165. package/remediate/authz/python/tests/test_fastapi_adapter.py +1 -1
  166. package/remediate/authz/python/tests/test_fastapi_d5_crosstest.py +1 -1
  167. package/remediate/authz/python/tests/test_python_authz.py +3 -3
  168. package/remediate/authz/spring/src/main/kotlin/io/komagu/security/authorization/DefaultKomaguSecurityManager.kt +1 -1
  169. package/remediate/authz/spring/src/main/kotlin/io/komagu/security/authorization/SecurityAuditEvent.kt +1 -2
  170. package/remediate/authz/tests/test_bola_patcher.py +1 -1
  171. package/remediate/edge/coraza/rules/coraza-crs-custom.conf +3 -4
  172. package/remediate/edge/coraza/virtual_patcher.py +4 -6
  173. package/remediate/edge/docker-compose.yml +1 -1
  174. package/remediate/ekyc/server/jpki_verifier.py +2 -8
  175. package/remediate/ekyc/server/tokenization.py +2 -8
  176. package/remediate/identity/README.md +5 -5
  177. package/remediate/identity/dotnet/src/Komagu.Security.Identity/KomaguOidcOptions.cs +2 -2
  178. package/remediate/identity/dotnet/tests/Komagu.Security.Identity.Tests/TestTokenGenerator.cs +1 -1
  179. package/remediate/identity/dotnet/tests/Komagu.Security.Identity.Tests/TokenValidationTests.cs +1 -1
  180. package/remediate/identity/python/komagu_identity/oidc_validator.py +2 -8
  181. package/remediate/identity/python/tests/test_oidc_validator.py +1 -1
  182. package/remediate/identity/spring/src/main/kotlin/io/komagu/security/identity/KomaguOidcProperties.kt +2 -2
  183. package/remediate/identity/spring/src/test/kotlin/io/komagu/security/identity/KomaguIdentityAutoConfigurationTest.kt +2 -2
  184. package/remediate/identity/spring/src/test/kotlin/io/komagu/security/identity/TestJwtFactory.kt +1 -1
  185. package/remediate/identity/spring/src/test/kotlin/io/komagu/security/identity/TokenValidationIntegrationTest.kt +1 -1
  186. package/remediate/identity/test-env/realm-komagu.json +1 -1
  187. package/remediate/legacy_shims/coldfusion/KomaguSecurityShim.cfc +5 -5
  188. package/remediate/query/README.md +1 -1
  189. package/remediate/query/dotnet/src/Komagu.Security.Query.Analyzers/DiagnosticIds.cs +1 -1
  190. package/remediate/query/dotnet/src/Komagu.Security.Query.Analyzers/Komagu.Security.Query.Analyzers.csproj +1 -1
  191. package/remediate/query/spring/src/main/kotlin/io/komagu/security/query/detekt/KomaguRuleSetProvider.kt +1 -1
  192. package/remediate/resilience/dr/dr_manager.py +2 -8
  193. package/remediate/resilience/dr/runbook.md +2 -2
  194. package/remediate/resilience/terraform/variables.tf +1 -1
  195. package/remediate/tenancy/audit/audit_trail.py +2 -8
  196. package/remediate/tenancy/crypto/byok_manager.py +2 -8
  197. package/remediate/tenancy/middleware/tenant_context.py +2 -8
  198. package/remediate/tenancy/sql/rls_isolation.sql +11 -11
  199. package/remediate/tenancy/sql/schema_per_tenant.sql +7 -7
  200. package/remediate/tenancy/test_sql_postgres.py +1 -1
  201. package/remediate/tenancy/tests/test_tenancy.py +4 -4
  202. package/bin/komainu +0 -16
  203. package/bin/komainu-legacy.js +0 -16
  204. package/remediate/ekyc/tests/test_legacy_env.py +0 -33
  205. package/remediate/identity/python/tests/test_legacy_env.py +0 -33
  206. package/remediate/identity/spring/src/main/kotlin/io/komagu/security/identity/LegacyKomainuPropertiesPostProcessor.kt +0 -60
  207. package/remediate/identity/spring/src/main/resources/META-INF/spring.factories +0 -2
  208. package/remediate/identity/spring/src/test/kotlin/io/komagu/security/identity/LegacyKomainuPropertiesPostProcessorTest.kt +0 -86
  209. package/remediate/resilience/tests/test_legacy_env.py +0 -33
  210. package/remediate/tenancy/tests/test_legacy_env.py +0 -49
@@ -0,0 +1,226 @@
1
+ {
2
+ "repo": "repo",
3
+ "generated_by": "lsa detect_stack.py 0.3.1",
4
+ "stacks": [
5
+ {
6
+ "id": "php",
7
+ "language": "php",
8
+ "version_hint": null,
9
+ "evidence": [
10
+ "20 file(s) with extension .php, .php3, .php4, .php5, .phtml"
11
+ ],
12
+ "confirmed": false
13
+ },
14
+ {
15
+ "id": "php-codeigniter",
16
+ "language": "php",
17
+ "version_hint": null,
18
+ "evidence": [
19
+ "marker file php-codeigniter/system/core/CodeIgniter.php"
20
+ ],
21
+ "confirmed": false
22
+ },
23
+ {
24
+ "id": "php-laravel",
25
+ "language": "php",
26
+ "version_hint": null,
27
+ "evidence": [
28
+ "pattern /Route::(get|post|put|delete|any|match|re/ in php-laravel/routes/web.php"
29
+ ],
30
+ "confirmed": false
31
+ },
32
+ {
33
+ "id": "java-servlet",
34
+ "language": "java",
35
+ "version_hint": null,
36
+ "evidence": [
37
+ "marker file java-legacy/WebContent/WEB-INF/web.xml",
38
+ "pattern /extends\\s+HttpServlet|@WebServlet/ in java-legacy/src/com/acme/web/OrderServlet.java",
39
+ "pattern /extends\\s+HttpServlet|@WebServlet/ in java-legacy/src/com/acme/web/ProfileServlet.java"
40
+ ],
41
+ "confirmed": false
42
+ },
43
+ {
44
+ "id": "java-jsp",
45
+ "language": "java",
46
+ "version_hint": null,
47
+ "evidence": [
48
+ "1 file(s) with extension .jsp, .jspf"
49
+ ],
50
+ "confirmed": false
51
+ },
52
+ {
53
+ "id": "java-struts1",
54
+ "language": "java",
55
+ "version_hint": null,
56
+ "evidence": [
57
+ "marker file java-legacy/WebContent/WEB-INF/struts-config.xml",
58
+ "pattern /extends\\s+(Dispatch|LookupDispatch|Mappi/ in java-legacy/src/com/acme/struts/EditUserAction.java"
59
+ ],
60
+ "confirmed": false
61
+ },
62
+ {
63
+ "id": "java-spring-mvc",
64
+ "language": "java",
65
+ "version_hint": null,
66
+ "evidence": [
67
+ "pattern /@(Controller|RestController)\\b|@RequestM/ in java-legacy/src/com/acme/web/AccountController.java",
68
+ "pattern /@(Controller|RestController)\\b|@RequestM/ in java-legacy/src/com/acme/web/AdminUserController.java",
69
+ "pattern /@(Controller|RestController)\\b|@RequestM/ in java-legacy/src/com/acme/web/InvoiceController.java"
70
+ ],
71
+ "confirmed": false
72
+ },
73
+ {
74
+ "id": "java-mybatis",
75
+ "language": "java",
76
+ "version_hint": null,
77
+ "evidence": [
78
+ "pattern /<mapper\\s+namespace=|org\\.apache\\.ibatis/ in java-legacy/src/com/acme/mapper/OrderMapper.xml"
79
+ ],
80
+ "confirmed": false
81
+ },
82
+ {
83
+ "id": "java-hibernate",
84
+ "language": "java",
85
+ "version_hint": null,
86
+ "evidence": [
87
+ "pattern /org\\.hibernate\\.|\\.hbm\\.xml|createQuery\\/ in java-legacy/src/com/acme/web/InvoiceController.java"
88
+ ],
89
+ "confirmed": false
90
+ },
91
+ {
92
+ "id": "dotnet-webforms",
93
+ "language": "csharp/vbnet",
94
+ "version_hint": null,
95
+ "evidence": [
96
+ "2 file(s) with extension .ascx, .aspx"
97
+ ],
98
+ "confirmed": false
99
+ },
100
+ {
101
+ "id": "dotnet-handlers",
102
+ "language": "csharp/vbnet",
103
+ "version_hint": null,
104
+ "evidence": [
105
+ "1 file(s) with extension .ashx"
106
+ ],
107
+ "confirmed": false
108
+ },
109
+ {
110
+ "id": "dotnet-mvc",
111
+ "language": "csharp/vbnet",
112
+ "version_hint": null,
113
+ "evidence": [
114
+ "pattern /:\\s*(ControllerBase|Controller)\\b|Inheri/ in dotnet-legacy/Web/Controllers/AdminController.cs",
115
+ "pattern /:\\s*(ControllerBase|Controller)\\b|Inheri/ in dotnet-legacy/Web/Controllers/CustomerController.cs",
116
+ "pattern /:\\s*(ControllerBase|Controller)\\b|Inheri/ in dotnet-legacy/Web/Controllers/InvoiceController.cs"
117
+ ],
118
+ "confirmed": false
119
+ },
120
+ {
121
+ "id": "classic-asp",
122
+ "language": "vbscript",
123
+ "version_hint": null,
124
+ "evidence": [
125
+ "4 file(s) with extension .asa, .asp"
126
+ ],
127
+ "confirmed": false
128
+ },
129
+ {
130
+ "id": "perl-cgi",
131
+ "language": "perl",
132
+ "version_hint": null,
133
+ "evidence": [
134
+ "1 file(s) with extension .cgi",
135
+ "pattern /use\\s+CGI\\b|CGI->new|use\\s+DBI\\b/ in perl-cgi/cgi-bin/order.cgi"
136
+ ],
137
+ "confirmed": false
138
+ },
139
+ {
140
+ "id": "coldfusion",
141
+ "language": "cfml",
142
+ "version_hint": null,
143
+ "evidence": [
144
+ "2 file(s) with extension .cfc, .cfm, .cfml"
145
+ ],
146
+ "confirmed": false
147
+ },
148
+ {
149
+ "id": "node-express",
150
+ "language": "javascript",
151
+ "version_hint": null,
152
+ "evidence": [
153
+ "pattern /require\\(\\s*['\\\"]express['\\\"]\\s*\\)|from\\/ in node-express/routes/admin.js",
154
+ "pattern /require\\(\\s*['\\\"]express['\\\"]\\s*\\)|from\\/ in node-express/routes/orders.js",
155
+ "pattern /require\\(\\s*['\\\"]express['\\\"]\\s*\\)|from\\/ in node-express/routes/profile.js"
156
+ ],
157
+ "confirmed": false
158
+ },
159
+ {
160
+ "id": "python-flask",
161
+ "language": "python",
162
+ "version_hint": null,
163
+ "evidence": [
164
+ "pattern /from\\s+flask\\s+import|import\\s+flask/ in python-flask/app.py",
165
+ "pattern /from\\s+flask\\s+import|import\\s+flask/ in python-flask/profile.py"
166
+ ],
167
+ "confirmed": false
168
+ },
169
+ {
170
+ "id": "sql-procedures",
171
+ "language": "sql",
172
+ "version_hint": null,
173
+ "evidence": [
174
+ "pattern /(?i)create\\s+(or\\s+replace\\s+)?proc(edur/ in sql-procs/sp_search_orders.sql"
175
+ ],
176
+ "confirmed": false
177
+ }
178
+ ],
179
+ "data_access": [
180
+ "JDBC",
181
+ "mysql_* (no binding)",
182
+ "ColdFusion cfquery",
183
+ "Entity Framework / LINQ to SQL",
184
+ "ADO.NET",
185
+ "Hibernate/JPA",
186
+ "Classic ADO",
187
+ "MyBatis/iBATIS",
188
+ "TypeORM (Node/TS)",
189
+ "Perl DBI",
190
+ "MongoDB",
191
+ "PDO"
192
+ ],
193
+ "databases": [
194
+ "MySQL",
195
+ "SQL Server",
196
+ "MongoDB"
197
+ ],
198
+ "file_counts": {
199
+ ".php": 20,
200
+ ".java": 7,
201
+ ".cs": 5,
202
+ ".asp": 4,
203
+ ".xml": 3,
204
+ ".js": 3,
205
+ ".aspx": 2,
206
+ ".py": 2,
207
+ ".cfc": 1,
208
+ ".cfm": 1,
209
+ ".config": 1,
210
+ ".ashx": 1,
211
+ ".vb": 1,
212
+ ".jsp": 1,
213
+ ".cgi": 1,
214
+ ".sql": 1
215
+ },
216
+ "knowledge_files": [
217
+ "knowledge/stacks/php.md",
218
+ "knowledge/stacks/java.md",
219
+ "knowledge/stacks/dotnet.md",
220
+ "knowledge/stacks/classic-asp.md",
221
+ "knowledge/stacks/perl-cgi.md",
222
+ "knowledge/stacks/coldfusion.md",
223
+ "knowledge/stacks/node-python-ruby.md"
224
+ ],
225
+ "notes": "Heuristic result. The stack-detector agent must confirm each item."
226
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "model": "gpt-oss:20b",
3
+ "endpoint": "http://localhost:11434/v1/chat/completions",
4
+ "phases": {
5
+ "2-stack-detector": {
6
+ "seconds": 567.881,
7
+ "calls": 1,
8
+ "prompt_tokens": 3118,
9
+ "completion_tokens": 11596
10
+ },
11
+ "3-route-mapper": {
12
+ "seconds": 0.048,
13
+ "calls": 0,
14
+ "prompt_tokens": 0,
15
+ "completion_tokens": 0
16
+ },
17
+ "4a-bola-auditor": {
18
+ "seconds": 1670.708,
19
+ "calls": 7,
20
+ "prompt_tokens": 80567,
21
+ "completion_tokens": 33678
22
+ },
23
+ "4b-injection-auditor": {
24
+ "seconds": 672.139,
25
+ "calls": 2,
26
+ "prompt_tokens": 15801,
27
+ "completion_tokens": 21643
28
+ },
29
+ "4c-privilege-auditor": {
30
+ "seconds": 555.588,
31
+ "calls": 2,
32
+ "prompt_tokens": 24026,
33
+ "completion_tokens": 14528
34
+ },
35
+ "5-finding-verifier": {
36
+ "seconds": 1667.106,
37
+ "calls": 19,
38
+ "prompt_tokens": 133891,
39
+ "completion_tokens": 29835
40
+ }
41
+ },
42
+ "totals": {
43
+ "calls": 31,
44
+ "prompt_tokens": 257403,
45
+ "completion_tokens": 111280,
46
+ "seconds": 5130.466
47
+ },
48
+ "parse_failures": {
49
+ "4a-bola-auditor": [
50
+ "routes-001"
51
+ ]
52
+ },
53
+ "call_errors": {},
54
+ "retries": {
55
+ "4a-bola-auditor": [
56
+ "routes-001"
57
+ ]
58
+ },
59
+ "anchoring": {
60
+ "moved": [
61
+ "BOLA-R-0057-2",
62
+ "BOLA-R-0058-1",
63
+ "INJ-I-0021",
64
+ "INJ-I-0022",
65
+ "INJ-I-0023",
66
+ "INJ-I-0027",
67
+ "INJ-I-0032",
68
+ "INJ-I-0034",
69
+ "BFLA-R-0007-1",
70
+ "BFLA-R-0009-1",
71
+ "BFLA-R-0032-1",
72
+ "MASS-M-0001-1",
73
+ "MASS-M-0002-1",
74
+ "MASS-M-0003-1",
75
+ "MASS-M-0007-1",
76
+ "MASS-M-0010-1",
77
+ "MASS-M-0013-1",
78
+ "MASS-M-0015-1",
79
+ "MASS-M-0014-1"
80
+ ],
81
+ "unanchored": []
82
+ }
83
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "route_candidates": 74,
3
+ "inventoried": 74,
4
+ "rejected": 0,
5
+ "missing_from_inventory": [],
6
+ "bola_routes_to_audit": 74,
7
+ "bola_routes_without_verdict": [
8
+ "R-0001",
9
+ "R-0002",
10
+ "R-0003",
11
+ "R-0004",
12
+ "R-0005",
13
+ "R-0006",
14
+ "R-0007",
15
+ "R-0008",
16
+ "R-0009",
17
+ "R-0013",
18
+ "R-0014",
19
+ "R-0015",
20
+ "R-0017",
21
+ "R-0018",
22
+ "R-0019"
23
+ ],
24
+ "bfla_routes_to_audit": 0,
25
+ "bfla_routes_without_verdict": [],
26
+ "injection_candidates": 38,
27
+ "injection_candidates_without_verdict": [],
28
+ "mass_candidates": 15,
29
+ "mass_candidates_without_verdict": [],
30
+ "findings_without_verification": [],
31
+ "duplicates_removed": [
32
+ {
33
+ "kept": "BOLA-R-0057-1",
34
+ "dropped": "BOLA-R-0057-2"
35
+ },
36
+ {
37
+ "kept": "BOLA-R-0058-1",
38
+ "dropped": "BOLA-R-0058-2"
39
+ }
40
+ ],
41
+ "validation_errors": [],
42
+ "new_issues_from_verifier": [],
43
+ "out_of_scope_notes": []
44
+ }