@hoanghainh/komagu 2.5.0 → 2.6.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 (225) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/assess/lsa/examples/eval-run-6/gptoss-a/ai-run-stats.json +87 -0
  3. package/assess/lsa/examples/eval-run-6/gptoss-a/auth-model.md +120 -0
  4. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/index.json +60 -0
  5. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-001.json +383 -0
  6. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-002.json +205 -0
  7. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-001.json +838 -0
  8. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-002.json +124 -0
  9. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-001.json +778 -0
  10. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-002.json +546 -0
  11. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-003.json +661 -0
  12. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-004.json +659 -0
  13. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-005.json +612 -0
  14. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-006.json +106 -0
  15. package/assess/lsa/examples/eval-run-6/gptoss-a/coverage.json +19 -0
  16. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-001.json +516 -0
  17. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-002.json +332 -0
  18. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-003.json +218 -0
  19. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-004.json +561 -0
  20. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-005.json +316 -0
  21. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-006.json +14 -0
  22. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-001.json +782 -0
  23. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-002.json +418 -0
  24. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-001.json +627 -0
  25. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-002.json +253 -0
  26. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-1.json +68 -0
  27. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-10.json +68 -0
  28. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-11.json +61 -0
  29. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-12.json +60 -0
  30. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-13.json +60 -0
  31. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-14.json +66 -0
  32. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-15.json +69 -0
  33. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-16.json +60 -0
  34. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-17.json +61 -0
  35. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-18.json +69 -0
  36. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-19.json +64 -0
  37. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-2.json +60 -0
  38. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-20.json +60 -0
  39. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-21.json +61 -0
  40. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-22.json +50 -0
  41. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-3.json +60 -0
  42. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-4.json +60 -0
  43. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-5.json +60 -0
  44. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-6.json +70 -0
  45. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-7.json +60 -0
  46. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-8.json +60 -0
  47. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-9.json +60 -0
  48. package/assess/lsa/examples/eval-run-6/gptoss-a/findings.json +4857 -0
  49. package/assess/lsa/examples/eval-run-6/gptoss-a/mass-assignment.candidates.json +232 -0
  50. package/assess/lsa/examples/eval-run-6/gptoss-a/report.ja.md +2112 -0
  51. package/assess/lsa/examples/eval-run-6/gptoss-a/report.md +2112 -0
  52. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-001.json +425 -0
  53. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-002.json +333 -0
  54. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-003.json +400 -0
  55. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-004.json +403 -0
  56. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-005.json +398 -0
  57. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-006.json +63 -0
  58. package/assess/lsa/examples/eval-run-6/gptoss-a/score.json +82 -0
  59. package/assess/lsa/examples/eval-run-6/gptoss-a/stack-profile.json +225 -0
  60. package/assess/lsa/examples/eval-run-6/gptoss-b/ai-run-stats.json +91 -0
  61. package/assess/lsa/examples/eval-run-6/gptoss-b/auth-model.md +120 -0
  62. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/index.json +60 -0
  63. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-001.json +383 -0
  64. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-002.json +205 -0
  65. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-001.json +838 -0
  66. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-002.json +124 -0
  67. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-001.json +778 -0
  68. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-002.json +546 -0
  69. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-003.json +661 -0
  70. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-004.json +659 -0
  71. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-005.json +612 -0
  72. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-006.json +106 -0
  73. package/assess/lsa/examples/eval-run-6/gptoss-b/coverage.json +21 -0
  74. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-001.json +593 -0
  75. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-002.json +367 -0
  76. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-003.json +207 -0
  77. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-004.json +477 -0
  78. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-005.json +341 -0
  79. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-006.json +14 -0
  80. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-001.json +821 -0
  81. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-002.json +410 -0
  82. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-001.json +649 -0
  83. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-002.json +222 -0
  84. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-1.json +60 -0
  85. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-10.json +67 -0
  86. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-11.json +68 -0
  87. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-12.json +60 -0
  88. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-13.json +60 -0
  89. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-14.json +64 -0
  90. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-15.json +70 -0
  91. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-16.json +60 -0
  92. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-17.json +61 -0
  93. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-18.json +60 -0
  94. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-19.json +65 -0
  95. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-2.json +60 -0
  96. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-20.json +60 -0
  97. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-21.json +62 -0
  98. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-22.json +50 -0
  99. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-3.json +60 -0
  100. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-4.json +60 -0
  101. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-5.json +60 -0
  102. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-6.json +60 -0
  103. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-7.json +64 -0
  104. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-8.json +60 -0
  105. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-9.json +60 -0
  106. package/assess/lsa/examples/eval-run-6/gptoss-b/findings.json +4966 -0
  107. package/assess/lsa/examples/eval-run-6/gptoss-b/mass-assignment.candidates.json +232 -0
  108. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-001.json +425 -0
  109. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-002.json +333 -0
  110. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-003.json +400 -0
  111. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-004.json +403 -0
  112. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-005.json +398 -0
  113. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-006.json +63 -0
  114. package/assess/lsa/examples/eval-run-6/gptoss-b/score.json +87 -0
  115. package/assess/lsa/examples/eval-run-6/gptoss-b/stack-profile.json +225 -0
  116. package/assess/lsa/examples/eval-run-6/ground-truth.json +851 -0
  117. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/ai-run-stats.json +96 -0
  118. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/auth-model.md +191 -0
  119. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/index.json +60 -0
  120. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-001.json +383 -0
  121. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-002.json +205 -0
  122. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-001.json +838 -0
  123. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-002.json +124 -0
  124. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-001.json +778 -0
  125. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-002.json +546 -0
  126. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-003.json +661 -0
  127. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-004.json +659 -0
  128. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-005.json +612 -0
  129. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-006.json +106 -0
  130. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/coverage.json +31 -0
  131. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-001.json +527 -0
  132. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-002.json +568 -0
  133. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-003.json +467 -0
  134. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-004.json +342 -0
  135. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-005.json +693 -0
  136. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-006.json +16 -0
  137. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-001.json +1123 -0
  138. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-002.json +391 -0
  139. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-001.json +726 -0
  140. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-002.json +306 -0
  141. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-1.json +137 -0
  142. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-10.json +106 -0
  143. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-11.json +81 -0
  144. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-12.json +135 -0
  145. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-13.json +135 -0
  146. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-14.json +135 -0
  147. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-15.json +110 -0
  148. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-16.json +116 -0
  149. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-17.json +141 -0
  150. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-18.json +135 -0
  151. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-19.json +140 -0
  152. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-2.json +135 -0
  153. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-20.json +82 -0
  154. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-21.json +74 -0
  155. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-22.json +99 -0
  156. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-3.json +140 -0
  157. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-4.json +145 -0
  158. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-5.json +135 -0
  159. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-6.json +135 -0
  160. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-7.json +87 -0
  161. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-8.json +125 -0
  162. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-9.json +135 -0
  163. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings.json +6989 -0
  164. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/mass-assignment.candidates.json +232 -0
  165. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/memory.log +36 -0
  166. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-001.json +425 -0
  167. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-002.json +333 -0
  168. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-003.json +400 -0
  169. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-004.json +403 -0
  170. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-005.json +398 -0
  171. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-006.json +63 -0
  172. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/score.json +106 -0
  173. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/stack-profile.json +225 -0
  174. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/auth-model.md +517 -0
  175. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-001.json +5 -0
  176. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-002.json +428 -0
  177. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-003.json +388 -0
  178. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-004.json +463 -0
  179. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-005.json +5 -0
  180. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-006.json +67 -0
  181. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/inj-injection-001.json +964 -0
  182. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings.partial.json +1872 -0
  183. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/memory.log +194 -0
  184. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/score.partial.json +108 -0
  185. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/stack-profile.json +225 -0
  186. package/assess/lsa/scripts/laravel_routes.py +102 -0
  187. package/assess/lsa/scripts/map_routes.py +4 -1
  188. package/assess/lsa/tests/EVAL-RESULTS.md +126 -0
  189. package/assess/lsa/tests/test_eval_run_6.py +104 -0
  190. package/assess/lsa/tests/test_laravel_routes.py +95 -0
  191. package/examples/member-portal/backend-dotnet/Auth/DemoAuthenticationHandler.cs +75 -0
  192. package/examples/member-portal/backend-dotnet/Program.cs +1 -72
  193. package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/Application.kt +4 -0
  194. package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/controller/Controllers.kt +3 -0
  195. package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/model/Entities.kt +4 -0
  196. package/examples/member-portal/tests/test_d6_demo_app.py +4 -4
  197. package/examples/member-portal/tests/test_d6_remediation_verification.py +6 -6
  198. package/operate/ai/client.py +27 -10
  199. package/operate/ai/runner.py +4 -2
  200. package/operate/cli/__init__.py +1 -1
  201. package/operate/cli/commands/scan.py +8 -1
  202. package/operate/cross_user_tester/runner.py +4 -1
  203. package/operate/devsecops/sbom.py +12 -4
  204. package/operate/simulate/scenarios.py +11 -2
  205. package/operate/tests/test_ai_reasoning_effort.py +65 -0
  206. package/operate/tests/test_ai_route_inventory.py +53 -0
  207. package/operate/tests/test_audit_minimum_versions.py +89 -0
  208. package/operate/tests/test_cli.py +1 -1
  209. package/operate/tests/test_scheme_and_xml_guards.py +67 -0
  210. package/package.json +1 -1
  211. package/remediate/authz/dotnet/src/Komagu.Security.Authorization/LoggingSecurityAuditSink.cs +19 -3
  212. package/remediate/authz/golang/authz_test.go +5 -2
  213. package/remediate/authz/spring/src/main/kotlin/io/komagu/security/authorization/DefaultKomaguSecurityManager.kt +74 -78
  214. package/remediate/authz/spring/src/main/kotlin/io/komagu/security/spring/OwnershipAspect.kt +129 -158
  215. package/remediate/deps/patcher.py +2 -1
  216. package/remediate/edge/mock-backend/app.py +2 -1
  217. package/remediate/edge/tests/test_edge_security.py +5 -5
  218. package/remediate/ekyc/requirements.txt +1 -1
  219. package/remediate/identity/dotnet/src/Komagu.Security.Identity/OidcServiceCollectionExtensions.cs +19 -6
  220. package/remediate/identity/python/requirements.txt +2 -2
  221. package/remediate/identity/spring/src/main/kotlin/io/komagu/security/identity/KomaguIdentityAutoConfiguration.kt +31 -38
  222. package/remediate/legacy_shims/tests/test_legacy_shims.py +8 -8
  223. package/remediate/query/dotnet/src/Komagu.Security.Query/SafeSortAllowList.cs +5 -2
  224. package/remediate/query/spring/src/main/kotlin/io/komagu/security/query/SafeSortAllowList.kt +10 -11
  225. package/remediate/query/spring/src/main/kotlin/io/komagu/security/query/detekt/StringBuiltSqlQueryRule.kt +19 -24
@@ -0,0 +1,225 @@
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\\.(?!validator\\b)|\\.hbm\\.x/ 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
+ "Perl DBI",
189
+ "MongoDB",
190
+ "PDO"
191
+ ],
192
+ "databases": [
193
+ "MySQL",
194
+ "SQL Server",
195
+ "MongoDB"
196
+ ],
197
+ "file_counts": {
198
+ ".php": 20,
199
+ ".java": 7,
200
+ ".cs": 5,
201
+ ".asp": 4,
202
+ ".xml": 3,
203
+ ".js": 3,
204
+ ".aspx": 2,
205
+ ".py": 2,
206
+ ".cfc": 1,
207
+ ".cfm": 1,
208
+ ".config": 1,
209
+ ".ashx": 1,
210
+ ".vb": 1,
211
+ ".jsp": 1,
212
+ ".cgi": 1,
213
+ ".sql": 1
214
+ },
215
+ "knowledge_files": [
216
+ "knowledge/stacks/php.md",
217
+ "knowledge/stacks/java.md",
218
+ "knowledge/stacks/dotnet.md",
219
+ "knowledge/stacks/classic-asp.md",
220
+ "knowledge/stacks/perl-cgi.md",
221
+ "knowledge/stacks/coldfusion.md",
222
+ "knowledge/stacks/node-python-ruby.md"
223
+ ],
224
+ "notes": "Heuristic result. The stack-detector agent must confirm each item."
225
+ }
@@ -0,0 +1,91 @@
1
+ {
2
+ "model": "gpt-oss:20b",
3
+ "endpoint": "http://localhost:11434/v1/chat/completions",
4
+ "phases": {
5
+ "2-stack-detector": {
6
+ "seconds": 93.192,
7
+ "calls": 1,
8
+ "prompt_tokens": 3111,
9
+ "completion_tokens": 4163
10
+ },
11
+ "3-route-mapper": {
12
+ "seconds": 0.01,
13
+ "calls": 0,
14
+ "prompt_tokens": 0,
15
+ "completion_tokens": 0
16
+ },
17
+ "4a-bola-auditor": {
18
+ "seconds": 768.98,
19
+ "calls": 6,
20
+ "prompt_tokens": 52158,
21
+ "completion_tokens": 26916
22
+ },
23
+ "4b-injection-auditor": {
24
+ "seconds": 1001.464,
25
+ "calls": 3,
26
+ "prompt_tokens": 25555,
27
+ "completion_tokens": 36995
28
+ },
29
+ "4c-privilege-auditor": {
30
+ "seconds": 261.825,
31
+ "calls": 2,
32
+ "prompt_tokens": 20020,
33
+ "completion_tokens": 8712
34
+ },
35
+ "5-finding-verifier": {
36
+ "seconds": 1248.783,
37
+ "calls": 22,
38
+ "prompt_tokens": 154422,
39
+ "completion_tokens": 41076
40
+ }
41
+ },
42
+ "totals": {
43
+ "calls": 34,
44
+ "prompt_tokens": 255266,
45
+ "completion_tokens": 117862,
46
+ "seconds": 3373.79
47
+ },
48
+ "parse_failures": {},
49
+ "call_errors": {},
50
+ "retries": {
51
+ "4b-injection-auditor": [
52
+ "injection-001"
53
+ ]
54
+ },
55
+ "repaired": {},
56
+ "findings_from_verdicts": {
57
+ "4a-bola-auditor": [
58
+ "BOLA-R-0055-verdict",
59
+ "BOLA-R-0056-verdict",
60
+ "BOLA-R-0052-verdict",
61
+ "BOLA-R-0053-verdict",
62
+ "BOLA-R-0054-verdict"
63
+ ],
64
+ "4c-privilege-auditor": [
65
+ "MASS-M-0011-verdict",
66
+ "MASS-M-0012-verdict",
67
+ "MASS-M-0001-verdict",
68
+ "MASS-M-0002-verdict",
69
+ "MASS-M-0006-verdict",
70
+ "MASS-M-0007-verdict",
71
+ "MASS-M-0010-verdict",
72
+ "MASS-M-0015-verdict",
73
+ "MASS-M-0014-verdict"
74
+ ]
75
+ },
76
+ "anchoring": {
77
+ "moved": [
78
+ "INJ-I-0010",
79
+ "INJ-I-0021",
80
+ "INJ-I-0022",
81
+ "INJ-I-0029",
82
+ "INJ-I-0032-1",
83
+ "BFLA-R-0007-1",
84
+ "BFLA-R-0009-1",
85
+ "MASS-M-0003-1",
86
+ "MASS-M-0008-1",
87
+ "MASS-M-0009-1"
88
+ ],
89
+ "unanchored": []
90
+ }
91
+ }
@@ -0,0 +1,120 @@
1
+ # Auth Model — repo
2
+
3
+ ## 1. Stacks and data‑access layers
4
+ | Folder | Stack ID | Web root | Data‑access |
5
+ |--------|----------|----------|-------------|
6
+ | `php-plain/` | `php-plain` | `/` | PDO (MySQL) |
7
+ | `classic-asp/` | `classic-asp` | `/shop/` | ADO (SQL Server) |
8
+ | `dotnet-legacy/` | `dotnet-mvc` | `/admin/` | Entity Framework / LINQ‑to‑SQL (SQL Server) |
9
+ | `java-legacy/` | `java-servlet` | `/legacy/` | JDBC (MySQL) |
10
+ | `node-express/` | `node-express` | `/api/` | Mongoose (MongoDB) |
11
+ | `python-flask/` | `python-flask` | `/admin/` | SQLAlchemy (PostgreSQL) |
12
+
13
+ > **Note** – The pre‑scan listed many stacks; the ones that actually contain authentication logic are the PHP, Classic‑ASP, .NET MVC, Java Servlet, Node Express, and Flask sub‑applications. The other stacks are present in the repo but do not provide user‑facing authentication.
14
+
15
+ ## 2. Authentication (who is the user)
16
+
17
+ | Stack | Mechanism | Enforced by | Current‑user accessor(s) |
18
+ |-------|-----------|-------------|--------------------------|
19
+ | **PHP‑plain** | Session cookie (`PHPSESSID`) + `$_SESSION['user_id']` | `php-plain/inc/auth.php` (included on every page) | `getCurrentUserId()` – `return $_SESSION['user_id'] ?? null;` |
20
+ | **Classic‑ASP** | Session cookie (`ASPSESSIONID`) + `Session("UserID")` | `classic-asp/shop/inc/auth.asp` (included via `<!--#include virtual="inc/auth.asp" -->`) | `GetCurrentUserId()` – `Return Session("UserID")` |
21
+ | **.NET MVC** | FormsAuthentication cookie (`.ASPXAUTH`) + `User.Identity` | `[Authorize]` attribute on controllers + `AccountController` | `HttpContext.User.Identity.GetUserId()` |
22
+ | **Java Servlet** | HttpSession (`JSESSIONID`) + `session.getAttribute("userId")` | `LoginServlet` + `HttpServletRequest.getSession()` | `getCurrentUserId(req)` – `return (String)req.getSession().getAttribute("userId");` |
23
+ | **Node Express** | express‑session cookie (`connect.sid`) + `req.session.userId` | `app.use(authMiddleware)` (in `node-express/routes/auth.js`) | `req.session.userId` |
24
+ | **Python Flask** | Flask‑Login session cookie (`session`) + `current_user.id` | `@login_required` decorator (in `python-flask/auth.py`) | `current_user.id` |
25
+
26
+ > **Mechanism** – All stacks use cookie‑based session storage; no JWTs are found in the repo.
27
+ > **Enforced by** – Global middleware or include files that run before any protected page.
28
+ > **Current‑user accessor(s)** – Each stack exposes a helper that returns the logged‑in user’s ID (or `null` if not authenticated).
29
+
30
+ ## 3. Authorization (what may the user access)
31
+
32
+ ### 3.1 Role / function‑level checks
33
+
34
+ | Stack | Source of role | Guard | Covered paths |
35
+ |-------|----------------|-------|---------------|
36
+ | **PHP‑plain** | `$_SESSION['role']` | `isAdmin()` helper (in `auth.php`) | `/admin/*` |
37
+ | **Classic‑ASP** | `Session("Role")` | `IsAdmin()` function (in `auth.asp`) | `/admin/*` |
38
+ | **.NET MVC** | `User.IsInRole("Admin")` | `[Authorize(Roles="Admin")]` on `AdminController` | `/admin/*` |
39
+ | **Java Servlet** | `session.getAttribute("role")` | `RoleFilter` (configured in `web.xml`) | `/admin/*` |
40
+ | **Node Express** | `req.session.role` | `adminOnly` middleware (in `routes/admin.js`) | `/api/admin/*` |
41
+ | **Python Flask** | `current_user.is_admin` | `@admin_required` decorator (in `auth.py`) | `/admin/*` |
42
+
43
+ > **Note** – Role checks are implemented via session attributes or claims; no external role service is used.
44
+
45
+ ### 3.2 Object‑level (ownership / tenant) checks
46
+
47
+ | Stack | Helper / pattern | Example |
48
+ |-------|------------------|---------|
49
+ | **PHP‑plain** | `checkOwner($entityId)` – queries `WHERE user_id = :uid` | `if (!checkOwner($orderId)) { deny(); }` |
50
+ | **Classic‑ASP** | `IsMyOrder(orderId)` – `SELECT * FROM Orders WHERE OrderID = ? AND UserID = ?` | `If Not IsMyOrder(orderId) Then Response.Redirect "access_denied.asp"` |
51
+ | **.NET MVC** | `OrderRepository.GetById(id, userId)` – LINQ `Where(o => o.UserId == userId)` | `var order = repo.GetById(id, userId);` |
52
+ | **Java Servlet** | DAO method `findOrderByIdAndUser(id, userId)` – SQL `WHERE id = ? AND user_id = ?` | `Order order = orderDao.findOrderByIdAndUser(id, userId);` |
53
+ | **Node Express** | `Order.findOne({ _id: id, user: req.session.userId })` | `Order.findOne({ _id: id, user: req.session.userId })` |
54
+ | **Python Flask** | `Order.query.filter_by(id=id, user_id=current_user.id).first()` | `order = Order.query.filter_by(id=id, user_id=current_user.id).first()` |
55
+
56
+ > **Safe DAO / Query scoping** – All DAO methods that return user‑specific data add a `user_id` (or `user`) filter. Prepared statements or ORM parameter binding are used throughout, preventing SQL injection.
57
+
58
+ ### 3.3 Helpers that are SAFE to treat as an ownership check
59
+
60
+ | Stack | Helper | Reason |
61
+ |-------|--------|--------|
62
+ | **PHP‑plain** | `checkOwner()` | Explicitly checks `user_id` in DB |
63
+ | **Classic‑ASP** | `IsMyOrder()` | Explicit `WHERE UserID = ?` |
64
+ | **.NET MVC** | `OrderRepository.GetById(id, userId)` | Parameterized query |
65
+ | **Java Servlet** | `findOrderByIdAndUser()` | Parameterized query |
66
+ | **Node Express** | `Order.findOne({ _id: id, user: ... })` | Mongoose query with user filter |
67
+ | **Python Flask** | `Order.query.filter_by(...).first()` | SQLAlchemy filter |
68
+
69
+ ### 3.4 Helpers that LOOK like checks but are NOT
70
+
71
+ | Stack | Helper | Why it is NOT an ownership check |
72
+ |-------|--------|-----------------------------------|
73
+ | **PHP‑plain** | `isAuthenticated()` | Only verifies login, no ownership |
74
+ | **Classic‑ASP** | `IsLoggedIn()` | Only checks session, no resource filter |
75
+ | **.NET MVC** | `User.Identity.IsAuthenticated` | Authentication only |
76
+ | **Java Servlet** | `session.getAttribute("userId")` | Retrieval only |
77
+ | **Node Express** | `req.isAuthenticated()` | Authentication only |
78
+ | **Python Flask** | `current_user.is_authenticated` | Authentication only |
79
+
80
+ ## 4. Tenant / ownership data model
81
+
82
+ | Table | Owner column(s) | Notes |
83
+ |-------|-----------------|-------|
84
+ | `Users` | `id`, `role` | Primary key |
85
+ | `Orders` | `id`, `user_id` | Enforces ownership |
86
+ | `Products` | `id`, `owner_id` | For vendor‑specific products |
87
+ | `Invoices` | `id`, `user_id` | For billing |
88
+ | `Shops` | `id`, `owner_id` | Classic‑ASP shop ownership |
89
+
90
+ > **Tenant** – The repo is single‑tenant; no `tenant_id` column is present. All ownership is enforced via `user_id` or `owner_id`.
91
+
92
+ ## 5. Exclusions and bypass paths
93
+
94
+ | Path | Reason |
95
+ |------|--------|
96
+ | `/login.php`, `/register.php` | Public login/registration pages |
97
+ | `/public/*`, `/assets/*` | Static assets (no auth) |
98
+ | `/api/public/*` | Public API endpoints |
99
+ | `*.ashx` in `dotnet-legacy/Web/Handlers/` | Some handlers lack `[Authorize]` – potential bypass |
100
+ | `node-express/routes/public.js` | Public routes without auth middleware |
101
+
102
+ > **Audit note** – Any path not covered by a global auth guard or explicit check should be reviewed for accidental exposure.
103
+
104
+ ## 6. Unknowns (checks that may live outside the code)
105
+
106
+ - **Stored procedures** – `sql-procs/sp_search_orders.sql` contains `WHERE user_id = @UserID`; if used, ownership is enforced at the DB level.
107
+ - **Reverse proxy** – The production environment uses an Nginx reverse proxy that may add `X-Forwarded-User` headers; not visible in the repo.
108
+ - **API gateway** – A corporate API gateway may perform OAuth token validation before requests reach the Node Express app.
109
+ - **Database row‑level security** – SQL Server row‑level security policies are not present in the repo but could exist in the live database.
110
+
111
+ ## 7. Notes for auditors
112
+
113
+ - **Multiple authentication mechanisms** – The repo contains several independent authentication systems; auditors should treat each sub‑application separately.
114
+ - **Global guards** – PHP and Classic‑ASP rely on include files; missing includes on a page can create a bypass. Verify that every protected page includes the auth file.
115
+ - **Role checks** – Role attributes are stored in session; ensure session hijacking protection (e.g., session regeneration on login).
116
+ - **Ownership checks** – All DAO methods that return user‑specific data include a `user_id` filter; however, direct SQL queries in legacy code (e.g., `php-plain/manage_users.php`) may bypass ownership checks – review those files carefully.
117
+ - **Exclusion paths** – Static assets and public APIs are intentionally excluded; confirm that no sensitive data is exposed through them.
118
+ - **Unknowns** – If stored procedures or reverse proxies are in use, auditors should request execution plans or logs to confirm that ownership checks are enforced at those layers.
119
+
120
+ ---
@@ -0,0 +1,60 @@
1
+ {
2
+ "routes": [
3
+ {
4
+ "batch_id": "routes-001",
5
+ "count": 15,
6
+ "files": 10
7
+ },
8
+ {
9
+ "batch_id": "routes-002",
10
+ "count": 12,
11
+ "files": 5
12
+ },
13
+ {
14
+ "batch_id": "routes-003",
15
+ "count": 15,
16
+ "files": 4
17
+ },
18
+ {
19
+ "batch_id": "routes-004",
20
+ "count": 15,
21
+ "files": 8
22
+ },
23
+ {
24
+ "batch_id": "routes-005",
25
+ "count": 15,
26
+ "files": 8
27
+ },
28
+ {
29
+ "batch_id": "routes-006",
30
+ "count": 2,
31
+ "files": 2
32
+ }
33
+ ],
34
+ "injection": [
35
+ {
36
+ "batch_id": "injection-001",
37
+ "count": 25,
38
+ "files": 13
39
+ },
40
+ {
41
+ "batch_id": "injection-002",
42
+ "count": 13,
43
+ "files": 8
44
+ }
45
+ ],
46
+ "privilege": [
47
+ {
48
+ "batch_id": "privilege-001",
49
+ "routes": 12,
50
+ "mass_candidates": 7,
51
+ "files": 12
52
+ },
53
+ {
54
+ "batch_id": "privilege-002",
55
+ "routes": 0,
56
+ "mass_candidates": 8,
57
+ "files": 4
58
+ }
59
+ ]
60
+ }