@hoanghainh/komagu 2.4.0 → 2.6.0

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 (247) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +202 -0
  3. package/README.md +1 -0
  4. package/assess/lsa/examples/eval-run-6/gptoss-a/ai-run-stats.json +87 -0
  5. package/assess/lsa/examples/eval-run-6/gptoss-a/auth-model.md +120 -0
  6. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/index.json +60 -0
  7. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-001.json +383 -0
  8. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-002.json +205 -0
  9. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-001.json +838 -0
  10. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-002.json +124 -0
  11. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-001.json +778 -0
  12. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-002.json +546 -0
  13. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-003.json +661 -0
  14. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-004.json +659 -0
  15. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-005.json +612 -0
  16. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-006.json +106 -0
  17. package/assess/lsa/examples/eval-run-6/gptoss-a/coverage.json +19 -0
  18. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-001.json +516 -0
  19. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-002.json +332 -0
  20. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-003.json +218 -0
  21. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-004.json +561 -0
  22. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-005.json +316 -0
  23. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-006.json +14 -0
  24. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-001.json +782 -0
  25. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-002.json +418 -0
  26. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-001.json +627 -0
  27. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-002.json +253 -0
  28. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-1.json +68 -0
  29. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-10.json +68 -0
  30. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-11.json +61 -0
  31. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-12.json +60 -0
  32. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-13.json +60 -0
  33. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-14.json +66 -0
  34. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-15.json +69 -0
  35. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-16.json +60 -0
  36. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-17.json +61 -0
  37. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-18.json +69 -0
  38. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-19.json +64 -0
  39. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-2.json +60 -0
  40. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-20.json +60 -0
  41. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-21.json +61 -0
  42. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-22.json +50 -0
  43. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-3.json +60 -0
  44. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-4.json +60 -0
  45. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-5.json +60 -0
  46. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-6.json +70 -0
  47. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-7.json +60 -0
  48. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-8.json +60 -0
  49. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-9.json +60 -0
  50. package/assess/lsa/examples/eval-run-6/gptoss-a/findings.json +4857 -0
  51. package/assess/lsa/examples/eval-run-6/gptoss-a/mass-assignment.candidates.json +232 -0
  52. package/assess/lsa/examples/eval-run-6/gptoss-a/report.ja.md +2112 -0
  53. package/assess/lsa/examples/eval-run-6/gptoss-a/report.md +2112 -0
  54. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-001.json +425 -0
  55. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-002.json +333 -0
  56. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-003.json +400 -0
  57. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-004.json +403 -0
  58. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-005.json +398 -0
  59. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-006.json +63 -0
  60. package/assess/lsa/examples/eval-run-6/gptoss-a/score.json +82 -0
  61. package/assess/lsa/examples/eval-run-6/gptoss-a/stack-profile.json +225 -0
  62. package/assess/lsa/examples/eval-run-6/gptoss-b/ai-run-stats.json +91 -0
  63. package/assess/lsa/examples/eval-run-6/gptoss-b/auth-model.md +120 -0
  64. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/index.json +60 -0
  65. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-001.json +383 -0
  66. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-002.json +205 -0
  67. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-001.json +838 -0
  68. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-002.json +124 -0
  69. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-001.json +778 -0
  70. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-002.json +546 -0
  71. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-003.json +661 -0
  72. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-004.json +659 -0
  73. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-005.json +612 -0
  74. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-006.json +106 -0
  75. package/assess/lsa/examples/eval-run-6/gptoss-b/coverage.json +21 -0
  76. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-001.json +593 -0
  77. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-002.json +367 -0
  78. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-003.json +207 -0
  79. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-004.json +477 -0
  80. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-005.json +341 -0
  81. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-006.json +14 -0
  82. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-001.json +821 -0
  83. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-002.json +410 -0
  84. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-001.json +649 -0
  85. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-002.json +222 -0
  86. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-1.json +60 -0
  87. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-10.json +67 -0
  88. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-11.json +68 -0
  89. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-12.json +60 -0
  90. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-13.json +60 -0
  91. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-14.json +64 -0
  92. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-15.json +70 -0
  93. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-16.json +60 -0
  94. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-17.json +61 -0
  95. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-18.json +60 -0
  96. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-19.json +65 -0
  97. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-2.json +60 -0
  98. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-20.json +60 -0
  99. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-21.json +62 -0
  100. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-22.json +50 -0
  101. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-3.json +60 -0
  102. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-4.json +60 -0
  103. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-5.json +60 -0
  104. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-6.json +60 -0
  105. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-7.json +64 -0
  106. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-8.json +60 -0
  107. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-9.json +60 -0
  108. package/assess/lsa/examples/eval-run-6/gptoss-b/findings.json +4966 -0
  109. package/assess/lsa/examples/eval-run-6/gptoss-b/mass-assignment.candidates.json +232 -0
  110. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-001.json +425 -0
  111. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-002.json +333 -0
  112. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-003.json +400 -0
  113. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-004.json +403 -0
  114. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-005.json +398 -0
  115. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-006.json +63 -0
  116. package/assess/lsa/examples/eval-run-6/gptoss-b/score.json +87 -0
  117. package/assess/lsa/examples/eval-run-6/gptoss-b/stack-profile.json +225 -0
  118. package/assess/lsa/examples/eval-run-6/ground-truth.json +851 -0
  119. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/ai-run-stats.json +96 -0
  120. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/auth-model.md +191 -0
  121. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/index.json +60 -0
  122. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-001.json +383 -0
  123. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-002.json +205 -0
  124. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-001.json +838 -0
  125. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-002.json +124 -0
  126. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-001.json +778 -0
  127. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-002.json +546 -0
  128. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-003.json +661 -0
  129. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-004.json +659 -0
  130. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-005.json +612 -0
  131. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-006.json +106 -0
  132. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/coverage.json +31 -0
  133. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-001.json +527 -0
  134. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-002.json +568 -0
  135. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-003.json +467 -0
  136. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-004.json +342 -0
  137. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-005.json +693 -0
  138. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-006.json +16 -0
  139. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-001.json +1123 -0
  140. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-002.json +391 -0
  141. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-001.json +726 -0
  142. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-002.json +306 -0
  143. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-1.json +137 -0
  144. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-10.json +106 -0
  145. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-11.json +81 -0
  146. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-12.json +135 -0
  147. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-13.json +135 -0
  148. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-14.json +135 -0
  149. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-15.json +110 -0
  150. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-16.json +116 -0
  151. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-17.json +141 -0
  152. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-18.json +135 -0
  153. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-19.json +140 -0
  154. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-2.json +135 -0
  155. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-20.json +82 -0
  156. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-21.json +74 -0
  157. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-22.json +99 -0
  158. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-3.json +140 -0
  159. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-4.json +145 -0
  160. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-5.json +135 -0
  161. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-6.json +135 -0
  162. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-7.json +87 -0
  163. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-8.json +125 -0
  164. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-9.json +135 -0
  165. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings.json +6989 -0
  166. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/mass-assignment.candidates.json +232 -0
  167. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/memory.log +36 -0
  168. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-001.json +425 -0
  169. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-002.json +333 -0
  170. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-003.json +400 -0
  171. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-004.json +403 -0
  172. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-005.json +398 -0
  173. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-006.json +63 -0
  174. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/score.json +106 -0
  175. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/stack-profile.json +225 -0
  176. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/auth-model.md +517 -0
  177. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-001.json +5 -0
  178. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-002.json +428 -0
  179. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-003.json +388 -0
  180. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-004.json +463 -0
  181. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-005.json +5 -0
  182. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-006.json +67 -0
  183. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/inj-injection-001.json +964 -0
  184. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings.partial.json +1872 -0
  185. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/memory.log +194 -0
  186. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/score.partial.json +108 -0
  187. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/stack-profile.json +225 -0
  188. package/assess/lsa/scripts/detect_stack.py +13 -5
  189. package/assess/lsa/scripts/find_injection.py +35 -2
  190. package/assess/lsa/scripts/java_routes.py +323 -0
  191. package/assess/lsa/scripts/laravel_routes.py +102 -0
  192. package/assess/lsa/scripts/lsa_common.py +72 -2
  193. package/assess/lsa/scripts/map_routes.py +40 -161
  194. package/assess/lsa/scripts/merge_findings.py +2 -0
  195. package/assess/lsa/tests/EVAL-RESULTS.md +126 -0
  196. package/assess/lsa/tests/test_eval_run_6.py +104 -0
  197. package/assess/lsa/tests/test_java_legacy_realistic.py +453 -0
  198. package/assess/lsa/tests/test_laravel_routes.py +95 -0
  199. package/contracts/schemas/persona-suite.schema.json +38 -2
  200. package/examples/member-portal/backend-dotnet/Dockerfile +2 -1
  201. package/examples/member-portal/backend-spring/Dockerfile +2 -0
  202. package/examples/member-portal/docker-compose.yml +1 -1
  203. package/examples/member-portal/frontend/Dockerfile +3 -2
  204. package/examples/member-portal/frontend/package-lock.json +24 -656
  205. package/examples/member-portal/frontend/package.json +1 -1
  206. package/operate/ai/client.py +22 -9
  207. package/operate/ai/runner.py +24 -4
  208. package/operate/cli/__init__.py +1 -1
  209. package/operate/cli/commands/fix.py +4 -0
  210. package/operate/cli/commands/leak_check.py +75 -0
  211. package/operate/cli/commands/protect.py +32 -3
  212. package/operate/cli/commands/scan.py +8 -1
  213. package/operate/cli/commands/test.py +131 -15
  214. package/operate/cli/main.py +5 -3
  215. package/operate/cross_user_tester/persona_matrix.py +118 -25
  216. package/operate/cross_user_tester/runner.py +190 -7
  217. package/operate/cross_user_tester/session_config.py +180 -0
  218. package/operate/cross_user_tester/session_http.py +288 -0
  219. package/operate/devsecops/leak_check.py +314 -0
  220. package/operate/remediator/runner.py +18 -1
  221. package/operate/remediator/strategies.py +2 -2
  222. package/operate/simulate/scenarios.py +2 -2
  223. package/operate/tests/mock_legacy_session_app.py +160 -0
  224. package/operate/tests/test_ai_reasoning_effort.py +65 -0
  225. package/operate/tests/test_ai_route_inventory.py +53 -0
  226. package/operate/tests/test_cross_user_session.py +565 -0
  227. package/operate/tests/test_docker_packaging.py +3 -3
  228. package/operate/tests/test_headless_ai.py +6 -0
  229. package/operate/tests/test_leak_check.py +250 -0
  230. package/operate/tests/test_legacy_session_edge.py +192 -0
  231. package/operate/tests/test_pilot_safeguards.py +245 -0
  232. package/operate/tests/test_remediator_java_legacy.py +330 -0
  233. package/package.json +2 -1
  234. package/remediate/authz/patcher.py +120 -11
  235. package/remediate/authz/tests/test_bola_patcher.py +4 -1
  236. package/remediate/edge/coraza/Caddyfile +1 -1
  237. package/remediate/edge/coraza/Dockerfile +9 -0
  238. package/remediate/edge/coraza/rules/coraza-crs-custom.conf +12 -0
  239. package/remediate/edge/coraza/virtual_patcher.py +24 -0
  240. package/remediate/edge/docker-compose.yml +7 -2
  241. package/remediate/edge/kong/kong-legacy-session.yaml +51 -0
  242. package/remediate/edge/mock-backend/Dockerfile +2 -0
  243. package/remediate/edge/tests/test_edge_security.py +21 -1
  244. package/remediate/resilience/terraform/backup_worm.tf +39 -1
  245. package/remediate/resilience/terraform/main.tf +15 -3
  246. package/remediate/resilience/terraform/variables.tf +11 -0
  247. package/remediate/resilience/tests/test_resilience.py +16 -0
@@ -0,0 +1,782 @@
1
+ {
2
+ "batch_id": "injection-001",
3
+ "findings": [
4
+ {
5
+ "finding_id": "INJ-I-0001",
6
+ "category": "sql_injection",
7
+ "subtype": "string_concatenation",
8
+ "title": "SQL Injection in classic-asp/shop/member.asp:6",
9
+ "candidate_id": "I-0001",
10
+ "location": {
11
+ "file": "classic-asp/shop/member.asp",
12
+ "start_line": 6
13
+ },
14
+ "evidence": [
15
+ {
16
+ "file": "classic-asp/shop/member.asp",
17
+ "start_line": 6,
18
+ "code": "sql = \"UPDATE members SET name = '\" & Replace(Request.Form(\"name\"), \"'\", \"''\") & \"'\"",
19
+ "why": "Unsanitized input concatenated into query",
20
+ "line": 6
21
+ }
22
+ ],
23
+ "severity": "critical",
24
+ "confidence": "high",
25
+ "cwe": [
26
+ "CWE-89"
27
+ ],
28
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
29
+ "status": "unverified"
30
+ },
31
+ {
32
+ "finding_id": "INJ-I-0002",
33
+ "category": "sql_injection",
34
+ "subtype": "string_concatenation",
35
+ "title": "SQL Injection in classic-asp/shop/member.asp:7",
36
+ "candidate_id": "I-0002",
37
+ "location": {
38
+ "file": "classic-asp/shop/member.asp",
39
+ "start_line": 7
40
+ },
41
+ "evidence": [
42
+ {
43
+ "file": "classic-asp/shop/member.asp",
44
+ "start_line": 7,
45
+ "code": "sql = sql & \" WHERE member_id = \" & Request.Form(\"member_id\")",
46
+ "why": "Unsanitized input concatenated into query",
47
+ "line": 7
48
+ }
49
+ ],
50
+ "severity": "critical",
51
+ "confidence": "high",
52
+ "cwe": [
53
+ "CWE-89"
54
+ ],
55
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
56
+ "status": "unverified"
57
+ },
58
+ {
59
+ "finding_id": "INJ-I-0003",
60
+ "category": "sql_injection",
61
+ "subtype": "string_concatenation",
62
+ "title": "SQL Injection in classic-asp/shop/member.asp:10",
63
+ "candidate_id": "I-0003",
64
+ "location": {
65
+ "file": "classic-asp/shop/member.asp",
66
+ "start_line": 10
67
+ },
68
+ "evidence": [
69
+ {
70
+ "file": "classic-asp/shop/member.asp",
71
+ "start_line": 10,
72
+ "code": "conn.Execute \"DELETE FROM members WHERE member_id = \" & Request.QueryString(\"member_id\")",
73
+ "why": "Unsanitized input concatenated into query",
74
+ "line": 10
75
+ }
76
+ ],
77
+ "severity": "critical",
78
+ "confidence": "high",
79
+ "cwe": [
80
+ "CWE-89"
81
+ ],
82
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
83
+ "status": "unverified"
84
+ },
85
+ {
86
+ "finding_id": "INJ-I-0004",
87
+ "category": "sql_injection",
88
+ "subtype": "string_concatenation",
89
+ "title": "SQL Injection in classic-asp/shop/order.asp:6",
90
+ "candidate_id": "I-0004",
91
+ "location": {
92
+ "file": "classic-asp/shop/order.asp",
93
+ "start_line": 6
94
+ },
95
+ "evidence": [
96
+ {
97
+ "file": "classic-asp/shop/order.asp",
98
+ "start_line": 6,
99
+ "code": "Set rs = conn.Execute(\"SELECT * FROM orders WHERE id = \" & id)",
100
+ "why": "Unsanitized input concatenated into query",
101
+ "line": 6
102
+ }
103
+ ],
104
+ "severity": "critical",
105
+ "confidence": "high",
106
+ "cwe": [
107
+ "CWE-89"
108
+ ],
109
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
110
+ "status": "unverified"
111
+ },
112
+ {
113
+ "finding_id": "INJ-I-0005",
114
+ "category": "sql_injection",
115
+ "subtype": "string_concatenation",
116
+ "title": "SQL Injection in classic-asp/shop/order.asp:12",
117
+ "candidate_id": "I-0005",
118
+ "location": {
119
+ "file": "classic-asp/shop/order.asp",
120
+ "start_line": 12
121
+ },
122
+ "evidence": [
123
+ {
124
+ "file": "classic-asp/shop/order.asp",
125
+ "start_line": 12,
126
+ "code": "Set rs2 = conn.Execute(\"SELECT * FROM orders WHERE id = \" & sid & \" AND user_id = \" & CLng(Session(\"UserID\")))",
127
+ "why": "Unsanitized input concatenated into query",
128
+ "line": 12
129
+ }
130
+ ],
131
+ "severity": "critical",
132
+ "confidence": "high",
133
+ "cwe": [
134
+ "CWE-89"
135
+ ],
136
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
137
+ "status": "unverified"
138
+ },
139
+ {
140
+ "finding_id": "INJ-I-0006",
141
+ "category": "sql_injection",
142
+ "subtype": "template_placeholder",
143
+ "title": "SQL Injection in coldfusion/app/OrderService.cfc:5",
144
+ "candidate_id": "I-0006",
145
+ "location": {
146
+ "file": "coldfusion/app/OrderService.cfc",
147
+ "start_line": 5
148
+ },
149
+ "evidence": [
150
+ {
151
+ "file": "coldfusion/app/OrderService.cfc",
152
+ "start_line": 5,
153
+ "code": "SELECT * FROM orders WHERE id = #arguments.orderId#",
154
+ "why": "Unsanitized input interpolated into query",
155
+ "line": 5
156
+ }
157
+ ],
158
+ "severity": "critical",
159
+ "confidence": "high",
160
+ "cwe": [
161
+ "CWE-89"
162
+ ],
163
+ "recommendation": "Use cfqueryparam or parameterized queries; avoid unescaped interpolation",
164
+ "status": "unverified"
165
+ },
166
+ {
167
+ "finding_id": "INJ-I-0007",
168
+ "category": "sql_injection",
169
+ "subtype": "template_placeholder",
170
+ "title": "SQL Injection in coldfusion/app/order.cfm:3",
171
+ "candidate_id": "I-0007",
172
+ "location": {
173
+ "file": "coldfusion/app/order.cfm",
174
+ "start_line": 3
175
+ },
176
+ "evidence": [
177
+ {
178
+ "file": "coldfusion/app/order.cfm",
179
+ "start_line": 3,
180
+ "code": "SELECT * FROM orders WHERE id = #url.id#",
181
+ "why": "Unsanitized input interpolated into query",
182
+ "line": 3
183
+ }
184
+ ],
185
+ "severity": "critical",
186
+ "confidence": "high",
187
+ "cwe": [
188
+ "CWE-89"
189
+ ],
190
+ "recommendation": "Use cfqueryparam or parameterized queries; avoid unescaped interpolation",
191
+ "status": "unverified"
192
+ },
193
+ {
194
+ "finding_id": "INJ-I-0009",
195
+ "category": "sql_injection",
196
+ "subtype": "string_concatenation",
197
+ "title": "SQL Injection in dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7",
198
+ "candidate_id": "I-0009",
199
+ "location": {
200
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
201
+ "start_line": 7
202
+ },
203
+ "evidence": [
204
+ {
205
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
206
+ "start_line": 7,
207
+ "code": "Dim sql As String = \"UPDATE Orders SET Note = '\" & txtNote.Text & \"'\"",
208
+ "why": "Unsanitized input concatenated into query",
209
+ "line": 7
210
+ }
211
+ ],
212
+ "severity": "critical",
213
+ "confidence": "high",
214
+ "cwe": [
215
+ "CWE-89"
216
+ ],
217
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
218
+ "status": "unverified"
219
+ },
220
+ {
221
+ "finding_id": "INJ-I-0010",
222
+ "category": "sql_injection",
223
+ "subtype": "string_concatenation",
224
+ "title": "SQL Injection in dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8",
225
+ "candidate_id": "I-0010",
226
+ "location": {
227
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
228
+ "start_line": 8
229
+ },
230
+ "evidence": [
231
+ {
232
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
233
+ "start_line": 8,
234
+ "code": "sql &= \" WHERE OrderId = \" & hfOrderId.Value",
235
+ "why": "Unsanitized input concatenated into query",
236
+ "line": 8
237
+ }
238
+ ],
239
+ "severity": "critical",
240
+ "confidence": "high",
241
+ "cwe": [
242
+ "CWE-89"
243
+ ],
244
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
245
+ "status": "unverified"
246
+ },
247
+ {
248
+ "finding_id": "INJ-I-0011",
249
+ "category": "sql_injection",
250
+ "subtype": "string_concatenation",
251
+ "title": "SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13",
252
+ "candidate_id": "I-0011",
253
+ "location": {
254
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
255
+ "start_line": 13
256
+ },
257
+ "evidence": [
258
+ {
259
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
260
+ "start_line": 13,
261
+ "code": "var cmd = new SqlCommand(\"SELECT * FROM Orders WHERE OrderId = \" + id, conn);",
262
+ "why": "Unsanitized input concatenated into query",
263
+ "line": 13
264
+ }
265
+ ],
266
+ "severity": "critical",
267
+ "confidence": "high",
268
+ "cwe": [
269
+ "CWE-89"
270
+ ],
271
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
272
+ "status": "unverified"
273
+ },
274
+ {
275
+ "finding_id": "INJ-I-0012",
276
+ "category": "sql_injection",
277
+ "subtype": "string_concatenation",
278
+ "title": "SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:19",
279
+ "candidate_id": "I-0012",
280
+ "location": {
281
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
282
+ "start_line": 19
283
+ },
284
+ "evidence": [
285
+ {
286
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
287
+ "start_line": 19,
288
+ "code": "string sql2 = string.Format(\"SELECT * FROM Logs WHERE Ref = '{0}'\", Request[\"ref\"]);",
289
+ "why": "Unsanitized input concatenated into query",
290
+ "line": 19
291
+ }
292
+ ],
293
+ "severity": "critical",
294
+ "confidence": "high",
295
+ "cwe": [
296
+ "CWE-89"
297
+ ],
298
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
299
+ "status": "unverified"
300
+ },
301
+ {
302
+ "finding_id": "INJ-I-0013",
303
+ "category": "sql_injection",
304
+ "subtype": "string_concatenation",
305
+ "title": "SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:20",
306
+ "candidate_id": "I-0013",
307
+ "location": {
308
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
309
+ "start_line": 20
310
+ },
311
+ "evidence": [
312
+ {
313
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
314
+ "start_line": 20,
315
+ "code": "string sql3 = $\"DELETE FROM Carts WHERE CartId = {Request.Form[\"cart\"]}\";",
316
+ "why": "Unsanitized input concatenated into query",
317
+ "line": 20
318
+ }
319
+ ],
320
+ "severity": "critical",
321
+ "confidence": "high",
322
+ "cwe": [
323
+ "CWE-89"
324
+ ],
325
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
326
+ "status": "unverified"
327
+ },
328
+ {
329
+ "finding_id": "INJ-I-0014",
330
+ "category": "sql_injection",
331
+ "subtype": "string_concatenation",
332
+ "title": "SQL Injection in java-legacy/WebContent/order/detail.jsp:5",
333
+ "candidate_id": "I-0014",
334
+ "location": {
335
+ "file": "java-legacy/WebContent/order/detail.jsp",
336
+ "start_line": 5
337
+ },
338
+ "evidence": [
339
+ {
340
+ "file": "java-legacy/WebContent/order/detail.jsp",
341
+ "start_line": 5,
342
+ "code": "ResultSet rs = c.createStatement().executeQuery(\"SELECT * FROM orders WHERE order_no = '\" + no + \"'\");",
343
+ "why": "Unsanitized input concatenated into query",
344
+ "line": 5
345
+ }
346
+ ],
347
+ "severity": "critical",
348
+ "confidence": "high",
349
+ "cwe": [
350
+ "CWE-89"
351
+ ],
352
+ "recommendation": "Use prepared statements with parameter binding; avoid string concatenation",
353
+ "status": "unverified"
354
+ },
355
+ {
356
+ "finding_id": "INJ-I-0016",
357
+ "category": "sql_injection",
358
+ "subtype": "string_concatenation",
359
+ "title": "SQL Injection in java-legacy/src/com/acme/struts/EditUserAction.java:13",
360
+ "candidate_id": "I-0016",
361
+ "location": {
362
+ "file": "java-legacy/src/com/acme/struts/EditUserAction.java",
363
+ "start_line": 13
364
+ },
365
+ "evidence": [
366
+ {
367
+ "file": "java-legacy/src/com/acme/struts/EditUserAction.java",
368
+ "start_line": 13,
369
+ "code": "PreparedStatement ps = conn.prepareStatement(\"UPDATE users SET email = '\" + email + \"' WHERE id = \" + userId);",
370
+ "why": "Unsanitized input concatenated into query",
371
+ "line": 13
372
+ }
373
+ ],
374
+ "severity": "critical",
375
+ "confidence": "high",
376
+ "cwe": [
377
+ "CWE-89"
378
+ ],
379
+ "recommendation": "Use parameterized queries; avoid string concatenation",
380
+ "status": "unverified"
381
+ },
382
+ {
383
+ "finding_id": "INJ-I-0017",
384
+ "category": "sql_injection",
385
+ "subtype": "string_concatenation",
386
+ "title": "SQL Injection in java-legacy/src/com/acme/web/InvoiceController.java:29",
387
+ "candidate_id": "I-0017",
388
+ "location": {
389
+ "file": "java-legacy/src/com/acme/web/InvoiceController.java",
390
+ "start_line": 29
391
+ },
392
+ "evidence": [
393
+ {
394
+ "file": "java-legacy/src/com/acme/web/InvoiceController.java",
395
+ "start_line": 29,
396
+ "code": "model.addAttribute(\"list\", session.createQuery(\"from Invoice i where i.customer = '\" + customer + \"'\").list());",
397
+ "why": "Unsanitized input concatenated into query",
398
+ "line": 29
399
+ }
400
+ ],
401
+ "severity": "critical",
402
+ "confidence": "high",
403
+ "cwe": [
404
+ "CWE-89"
405
+ ],
406
+ "recommendation": "Use parameterized queries or named parameters; avoid string concatenation",
407
+ "status": "unverified"
408
+ },
409
+ {
410
+ "finding_id": "INJ-I-0020",
411
+ "category": "sql_injection",
412
+ "subtype": "string_concatenation",
413
+ "title": "SQL Injection in node-express/routes/orders.js:17",
414
+ "candidate_id": "I-0020",
415
+ "location": {
416
+ "file": "node-express/routes/orders.js",
417
+ "start_line": 17
418
+ },
419
+ "evidence": [
420
+ {
421
+ "file": "node-express/routes/orders.js",
422
+ "start_line": 17,
423
+ "code": "db.query(\"SELECT * FROM reports WHERE month = '\" + req.query.month + \"'\", function (e, rows) { res.json(rows); });",
424
+ "why": "Unsanitized input concatenated into query",
425
+ "line": 17
426
+ }
427
+ ],
428
+ "severity": "critical",
429
+ "confidence": "high",
430
+ "cwe": [
431
+ "CWE-89"
432
+ ],
433
+ "recommendation": "Use parameterized queries or query builders; avoid string concatenation",
434
+ "status": "unverified"
435
+ },
436
+ {
437
+ "finding_id": "INJ-I-0021",
438
+ "category": "sql_injection",
439
+ "subtype": "string_concatenation",
440
+ "title": "SQL Injection in node-express/routes/orders.js:29",
441
+ "candidate_id": "I-0021",
442
+ "location": {
443
+ "file": "node-express/routes/orders.js",
444
+ "start_line": 29
445
+ },
446
+ "evidence": [
447
+ {
448
+ "file": "node-express/routes/orders.js",
449
+ "start_line": 29,
450
+ "code": "db.query(`SELECT COUNT(*) AS n FROM orders WHERE shop_id = ${req.query.shop}`, function (e, r) { res.json(r); });",
451
+ "why": "Unsanitized input concatenated into query",
452
+ "line": 29
453
+ }
454
+ ],
455
+ "severity": "critical",
456
+ "confidence": "high",
457
+ "cwe": [
458
+ "CWE-89"
459
+ ],
460
+ "recommendation": "Use parameterized queries or query builders; avoid string concatenation",
461
+ "status": "unverified"
462
+ },
463
+ {
464
+ "finding_id": "INJ-I-0022",
465
+ "category": "nosql_injection",
466
+ "subtype": "string_concatenation",
467
+ "title": "NoSQL Injection in node-express/routes/orders.js:21",
468
+ "candidate_id": "I-0022",
469
+ "location": {
470
+ "file": "node-express/routes/orders.js",
471
+ "start_line": 21
472
+ },
473
+ "evidence": [
474
+ {
475
+ "file": "node-express/routes/orders.js",
476
+ "start_line": 21,
477
+ "code": "db.collection('users').findOne(req.body, function (e, u) { res.json(!!u); });",
478
+ "why": "Unsanitized request body used directly as query filter",
479
+ "line": 21
480
+ }
481
+ ],
482
+ "severity": "critical",
483
+ "confidence": "high",
484
+ "cwe": [
485
+ "CWE-89"
486
+ ],
487
+ "recommendation": "Validate and sanitize query objects; avoid passing raw request bodies to database",
488
+ "status": "unverified"
489
+ },
490
+ {
491
+ "finding_id": "INJ-I-0023",
492
+ "category": "nosql_injection",
493
+ "subtype": "string_concatenation",
494
+ "title": "NoSQL Injection in node-express/routes/orders.js:25",
495
+ "candidate_id": "I-0023",
496
+ "location": {
497
+ "file": "node-express/routes/orders.js",
498
+ "start_line": 25
499
+ },
500
+ "evidence": [
501
+ {
502
+ "file": "node-express/routes/orders.js",
503
+ "start_line": 25,
504
+ "code": "db.collection('items').find({ $where: \"this.name == '\" + req.query.n + \"'\" }).toArray(function (e, r) { res.json(r); });",
505
+ "why": "Unsanitized input concatenated into $where string",
506
+ "line": 25
507
+ }
508
+ ],
509
+ "severity": "critical",
510
+ "confidence": "high",
511
+ "cwe": [
512
+ "CWE-89"
513
+ ],
514
+ "recommendation": "Avoid $where with user input; use parameterized queries or safe query operators",
515
+ "status": "unverified"
516
+ },
517
+ {
518
+ "finding_id": "INJ-I-0024",
519
+ "category": "sql_injection",
520
+ "subtype": "string_concatenation",
521
+ "title": "SQL Injection in perl-cgi/cgi-bin/order.cgi:13",
522
+ "candidate_id": "I-0024",
523
+ "location": {
524
+ "file": "perl-cgi/cgi-bin/order.cgi",
525
+ "start_line": 13
526
+ },
527
+ "evidence": [
528
+ {
529
+ "file": "perl-cgi/cgi-bin/order.cgi",
530
+ "start_line": 13,
531
+ "code": "$dbh->prepare(\"SELECT * FROM orders WHERE id = $id\");",
532
+ "why": "Unsanitized input concatenated into query",
533
+ "line": 13
534
+ }
535
+ ],
536
+ "severity": "critical",
537
+ "confidence": "high",
538
+ "cwe": [
539
+ "CWE-89"
540
+ ],
541
+ "recommendation": "Use placeholders and bind parameters; avoid string interpolation",
542
+ "status": "unverified"
543
+ },
544
+ {
545
+ "finding_id": "INJ-I-0025",
546
+ "category": "sql_injection",
547
+ "subtype": "string_concatenation",
548
+ "title": "SQL Injection in perl-cgi/cgi-bin/order.cgi:19",
549
+ "candidate_id": "I-0025",
550
+ "location": {
551
+ "file": "perl-cgi/cgi-bin/order.cgi",
552
+ "start_line": 19
553
+ },
554
+ "evidence": [
555
+ {
556
+ "file": "perl-cgi/cgi-bin/order.cgi",
557
+ "start_line": 19,
558
+ "code": "$dbh->do(\"DELETE FROM carts WHERE cart_id = \" . $q->param('cart'));",
559
+ "why": "Unsanitized input concatenated into query",
560
+ "line": 19
561
+ }
562
+ ],
563
+ "severity": "critical",
564
+ "confidence": "high",
565
+ "cwe": [
566
+ "CWE-89"
567
+ ],
568
+ "recommendation": "Use placeholders and bind parameters; avoid string concatenation",
569
+ "status": "unverified"
570
+ },
571
+ {
572
+ "finding_id": "INJ-I-0027",
573
+ "category": "sql_injection",
574
+ "subtype": "string_concatenation",
575
+ "title": "SQL Injection in php-plain/admin.php:12",
576
+ "candidate_id": "I-0027",
577
+ "location": {
578
+ "file": "php-plain/admin.php",
579
+ "start_line": 8
580
+ },
581
+ "evidence": [
582
+ {
583
+ "file": "php-plain/admin.php",
584
+ "start_line": 12,
585
+ "code": "mysql_query(\"DELETE FROM users WHERE id = $id\");",
586
+ "why": "Unsanitized input concatenated into query",
587
+ "line": 12
588
+ }
589
+ ],
590
+ "severity": "critical",
591
+ "confidence": "high",
592
+ "cwe": [
593
+ "CWE-89"
594
+ ],
595
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
596
+ "status": "unverified"
597
+ },
598
+ {
599
+ "finding_id": "INJ-I-0028",
600
+ "category": "sql_injection",
601
+ "subtype": "string_concatenation",
602
+ "title": "SQL Injection in php-plain/admin.php:12",
603
+ "candidate_id": "I-0028",
604
+ "location": {
605
+ "file": "php-plain/admin.php",
606
+ "start_line": 12
607
+ },
608
+ "evidence": [
609
+ {
610
+ "file": "php-plain/admin.php",
611
+ "start_line": 12,
612
+ "code": "mysql_query(\"DELETE FROM users WHERE id = $id\");",
613
+ "why": "Unsanitized input concatenated into query",
614
+ "line": 12
615
+ }
616
+ ],
617
+ "severity": "critical",
618
+ "confidence": "high",
619
+ "cwe": [
620
+ "CWE-89"
621
+ ],
622
+ "recommendation": "Use parameterized queries or prepared statements; avoid string concatenation",
623
+ "status": "unverified"
624
+ },
625
+ {
626
+ "finding_id": "INJ-I-0029",
627
+ "category": "nosql_injection",
628
+ "subtype": "string_concatenation",
629
+ "title": "NoSQL Injection in php-plain/mongo_find.php:6",
630
+ "candidate_id": "I-0029",
631
+ "location": {
632
+ "file": "php-plain/mongo_find.php",
633
+ "start_line": 5
634
+ },
635
+ "evidence": [
636
+ {
637
+ "file": "php-plain/mongo_find.php",
638
+ "start_line": 6,
639
+ "code": "$docs = $coll->find(array('$where' => \"this.name == '\" . $_GET['n'] . \"'\"));",
640
+ "why": "Unsanitized input concatenated into $where string",
641
+ "line": 6
642
+ }
643
+ ],
644
+ "severity": "critical",
645
+ "confidence": "high",
646
+ "cwe": [
647
+ "CWE-89"
648
+ ],
649
+ "recommendation": "Avoid $where with user input; use safe query operators or parameterized queries",
650
+ "status": "unverified"
651
+ },
652
+ {
653
+ "finding_id": "INJ-I-0030",
654
+ "category": "nosql_injection",
655
+ "subtype": "string_concatenation",
656
+ "title": "NoSQL Injection in php-plain/mongo_find.php:6",
657
+ "candidate_id": "I-0030",
658
+ "location": {
659
+ "file": "php-plain/mongo_find.php",
660
+ "start_line": 6
661
+ },
662
+ "evidence": [
663
+ {
664
+ "file": "php-plain/mongo_find.php",
665
+ "start_line": 6,
666
+ "code": "$docs = $coll->find(array('$where' => \"this.name == '\" . $_GET['n'] . \"'\"));",
667
+ "why": "Unsanitized input concatenated into $where string",
668
+ "line": 6
669
+ }
670
+ ],
671
+ "severity": "critical",
672
+ "confidence": "high",
673
+ "cwe": [
674
+ "CWE-89"
675
+ ],
676
+ "recommendation": "Avoid $where with user input; use safe query operators or parameterized queries",
677
+ "status": "unverified"
678
+ }
679
+ ],
680
+ "candidate_verdicts": [
681
+ {
682
+ "candidate_id": "I-0001",
683
+ "verdict": "vulnerable"
684
+ },
685
+ {
686
+ "candidate_id": "I-0002",
687
+ "verdict": "vulnerable"
688
+ },
689
+ {
690
+ "candidate_id": "I-0003",
691
+ "verdict": "vulnerable"
692
+ },
693
+ {
694
+ "candidate_id": "I-0004",
695
+ "verdict": "vulnerable"
696
+ },
697
+ {
698
+ "candidate_id": "I-0005",
699
+ "verdict": "vulnerable"
700
+ },
701
+ {
702
+ "candidate_id": "I-0006",
703
+ "verdict": "vulnerable"
704
+ },
705
+ {
706
+ "candidate_id": "I-0007",
707
+ "verdict": "vulnerable"
708
+ },
709
+ {
710
+ "candidate_id": "I-0009",
711
+ "verdict": "vulnerable"
712
+ },
713
+ {
714
+ "candidate_id": "I-0010",
715
+ "verdict": "vulnerable"
716
+ },
717
+ {
718
+ "candidate_id": "I-0011",
719
+ "verdict": "vulnerable"
720
+ },
721
+ {
722
+ "candidate_id": "I-0012",
723
+ "verdict": "vulnerable"
724
+ },
725
+ {
726
+ "candidate_id": "I-0013",
727
+ "verdict": "vulnerable"
728
+ },
729
+ {
730
+ "candidate_id": "I-0014",
731
+ "verdict": "vulnerable"
732
+ },
733
+ {
734
+ "candidate_id": "I-0016",
735
+ "verdict": "vulnerable"
736
+ },
737
+ {
738
+ "candidate_id": "I-0017",
739
+ "verdict": "vulnerable"
740
+ },
741
+ {
742
+ "candidate_id": "I-0020",
743
+ "verdict": "vulnerable"
744
+ },
745
+ {
746
+ "candidate_id": "I-0021",
747
+ "verdict": "vulnerable"
748
+ },
749
+ {
750
+ "candidate_id": "I-0022",
751
+ "verdict": "vulnerable"
752
+ },
753
+ {
754
+ "candidate_id": "I-0023",
755
+ "verdict": "vulnerable"
756
+ },
757
+ {
758
+ "candidate_id": "I-0024",
759
+ "verdict": "vulnerable"
760
+ },
761
+ {
762
+ "candidate_id": "I-0025",
763
+ "verdict": "vulnerable"
764
+ },
765
+ {
766
+ "candidate_id": "I-0027",
767
+ "verdict": "vulnerable"
768
+ },
769
+ {
770
+ "candidate_id": "I-0028",
771
+ "verdict": "vulnerable"
772
+ },
773
+ {
774
+ "candidate_id": "I-0029",
775
+ "verdict": "vulnerable"
776
+ },
777
+ {
778
+ "candidate_id": "I-0030",
779
+ "verdict": "vulnerable"
780
+ }
781
+ ]
782
+ }