@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.
- package/CHANGELOG.md +41 -0
- package/LICENSE +202 -0
- package/README.md +1 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/ai-run-stats.json +87 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/auth-model.md +120 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/index.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-001.json +383 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-002.json +205 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-001.json +838 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-002.json +124 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-001.json +778 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-002.json +546 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-003.json +661 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-004.json +659 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-005.json +612 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-006.json +106 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/coverage.json +19 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-001.json +516 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-002.json +332 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-003.json +218 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-004.json +561 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-005.json +316 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-006.json +14 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-001.json +782 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-002.json +418 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-001.json +627 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-002.json +253 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-1.json +68 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-10.json +68 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-11.json +61 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-12.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-13.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-14.json +66 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-15.json +69 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-16.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-17.json +61 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-18.json +69 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-19.json +64 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-2.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-20.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-21.json +61 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-22.json +50 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-3.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-4.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-5.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-6.json +70 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-7.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-8.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-9.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/findings.json +4857 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/mass-assignment.candidates.json +232 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/report.ja.md +2112 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/report.md +2112 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-001.json +425 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-002.json +333 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-003.json +400 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-004.json +403 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-005.json +398 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-006.json +63 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/score.json +82 -0
- package/assess/lsa/examples/eval-run-6/gptoss-a/stack-profile.json +225 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/ai-run-stats.json +91 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/auth-model.md +120 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/index.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-001.json +383 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-002.json +205 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-001.json +838 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-002.json +124 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-001.json +778 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-002.json +546 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-003.json +661 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-004.json +659 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-005.json +612 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-006.json +106 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/coverage.json +21 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-001.json +593 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-002.json +367 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-003.json +207 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-004.json +477 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-005.json +341 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-006.json +14 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-001.json +821 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-002.json +410 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-001.json +649 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-002.json +222 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-1.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-10.json +67 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-11.json +68 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-12.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-13.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-14.json +64 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-15.json +70 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-16.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-17.json +61 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-18.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-19.json +65 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-2.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-20.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-21.json +62 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-22.json +50 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-3.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-4.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-5.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-6.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-7.json +64 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-8.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-9.json +60 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/findings.json +4966 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/mass-assignment.candidates.json +232 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-001.json +425 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-002.json +333 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-003.json +400 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-004.json +403 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-005.json +398 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-006.json +63 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/score.json +87 -0
- package/assess/lsa/examples/eval-run-6/gptoss-b/stack-profile.json +225 -0
- package/assess/lsa/examples/eval-run-6/ground-truth.json +851 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/ai-run-stats.json +96 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/auth-model.md +191 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/index.json +60 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-001.json +383 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-002.json +205 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-001.json +838 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-002.json +124 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-001.json +778 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-002.json +546 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-003.json +661 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-004.json +659 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-005.json +612 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-006.json +106 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/coverage.json +31 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-001.json +527 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-002.json +568 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-003.json +467 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-004.json +342 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-005.json +693 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-006.json +16 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-001.json +1123 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-002.json +391 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-001.json +726 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-002.json +306 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-1.json +137 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-10.json +106 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-11.json +81 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-12.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-13.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-14.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-15.json +110 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-16.json +116 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-17.json +141 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-18.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-19.json +140 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-2.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-20.json +82 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-21.json +74 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-22.json +99 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-3.json +140 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-4.json +145 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-5.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-6.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-7.json +87 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-8.json +125 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-9.json +135 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings.json +6989 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/mass-assignment.candidates.json +232 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/memory.log +36 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-001.json +425 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-002.json +333 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-003.json +400 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-004.json +403 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-005.json +398 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-006.json +63 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/score.json +106 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/stack-profile.json +225 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/auth-model.md +517 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-001.json +5 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-002.json +428 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-003.json +388 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-004.json +463 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-005.json +5 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-006.json +67 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/inj-injection-001.json +964 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings.partial.json +1872 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/memory.log +194 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/score.partial.json +108 -0
- package/assess/lsa/examples/eval-run-6/qwen-16k-partial/stack-profile.json +225 -0
- package/assess/lsa/scripts/detect_stack.py +13 -5
- package/assess/lsa/scripts/find_injection.py +35 -2
- package/assess/lsa/scripts/java_routes.py +323 -0
- package/assess/lsa/scripts/laravel_routes.py +102 -0
- package/assess/lsa/scripts/lsa_common.py +72 -2
- package/assess/lsa/scripts/map_routes.py +40 -161
- package/assess/lsa/scripts/merge_findings.py +2 -0
- package/assess/lsa/tests/EVAL-RESULTS.md +126 -0
- package/assess/lsa/tests/test_eval_run_6.py +104 -0
- package/assess/lsa/tests/test_java_legacy_realistic.py +453 -0
- package/assess/lsa/tests/test_laravel_routes.py +95 -0
- package/contracts/schemas/persona-suite.schema.json +38 -2
- package/examples/member-portal/backend-dotnet/Dockerfile +2 -1
- package/examples/member-portal/backend-spring/Dockerfile +2 -0
- package/examples/member-portal/docker-compose.yml +1 -1
- package/examples/member-portal/frontend/Dockerfile +3 -2
- package/examples/member-portal/frontend/package-lock.json +24 -656
- package/examples/member-portal/frontend/package.json +1 -1
- package/operate/ai/client.py +22 -9
- package/operate/ai/runner.py +24 -4
- package/operate/cli/__init__.py +1 -1
- package/operate/cli/commands/fix.py +4 -0
- package/operate/cli/commands/leak_check.py +75 -0
- package/operate/cli/commands/protect.py +32 -3
- package/operate/cli/commands/scan.py +8 -1
- package/operate/cli/commands/test.py +131 -15
- package/operate/cli/main.py +5 -3
- package/operate/cross_user_tester/persona_matrix.py +118 -25
- package/operate/cross_user_tester/runner.py +190 -7
- package/operate/cross_user_tester/session_config.py +180 -0
- package/operate/cross_user_tester/session_http.py +288 -0
- package/operate/devsecops/leak_check.py +314 -0
- package/operate/remediator/runner.py +18 -1
- package/operate/remediator/strategies.py +2 -2
- package/operate/simulate/scenarios.py +2 -2
- package/operate/tests/mock_legacy_session_app.py +160 -0
- package/operate/tests/test_ai_reasoning_effort.py +65 -0
- package/operate/tests/test_ai_route_inventory.py +53 -0
- package/operate/tests/test_cross_user_session.py +565 -0
- package/operate/tests/test_docker_packaging.py +3 -3
- package/operate/tests/test_headless_ai.py +6 -0
- package/operate/tests/test_leak_check.py +250 -0
- package/operate/tests/test_legacy_session_edge.py +192 -0
- package/operate/tests/test_pilot_safeguards.py +245 -0
- package/operate/tests/test_remediator_java_legacy.py +330 -0
- package/package.json +2 -1
- package/remediate/authz/patcher.py +120 -11
- package/remediate/authz/tests/test_bola_patcher.py +4 -1
- package/remediate/edge/coraza/Caddyfile +1 -1
- package/remediate/edge/coraza/Dockerfile +9 -0
- package/remediate/edge/coraza/rules/coraza-crs-custom.conf +12 -0
- package/remediate/edge/coraza/virtual_patcher.py +24 -0
- package/remediate/edge/docker-compose.yml +7 -2
- package/remediate/edge/kong/kong-legacy-session.yaml +51 -0
- package/remediate/edge/mock-backend/Dockerfile +2 -0
- package/remediate/edge/tests/test_edge_security.py +21 -1
- package/remediate/resilience/terraform/backup_worm.tf +39 -1
- package/remediate/resilience/terraform/main.tf +15 -3
- package/remediate/resilience/terraform/variables.tf +11 -0
- package/remediate/resilience/tests/test_resilience.py +16 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "privilege-002",
|
|
3
|
+
"findings": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "MASS-M-0009-1",
|
|
6
|
+
"category": "mass_assignment",
|
|
7
|
+
"subtype": "privileged_field_writable",
|
|
8
|
+
"title": "Team owner_id is writable via mass assignment",
|
|
9
|
+
"candidate_id": "M-0009",
|
|
10
|
+
"location": {
|
|
11
|
+
"file": "php-laravel/app/Http/Controllers/AccountController.php",
|
|
12
|
+
"start_line": 23
|
|
13
|
+
},
|
|
14
|
+
"evidence": [
|
|
15
|
+
{
|
|
16
|
+
"file": "php-laravel/app/Http/Controllers/AccountController.php",
|
|
17
|
+
"line": 23,
|
|
18
|
+
"why": "Whole object binding: Team::create($request->all());"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"file": "php-laravel/app/Models/Team.php",
|
|
22
|
+
"line": 8,
|
|
23
|
+
"why": "fillable includes privileged field owner_id"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"impact": "Any authenticated user can set the owner_id of a Team, effectively taking ownership of any team.",
|
|
27
|
+
"severity": "high",
|
|
28
|
+
"confidence": "high",
|
|
29
|
+
"cwe": [
|
|
30
|
+
"CWE-915"
|
|
31
|
+
],
|
|
32
|
+
"recommendation": "Remove owner_id from $fillable or set it server\u2011side after validating ownership.",
|
|
33
|
+
"status": "unverified"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"finding_id": "MASS-M-0006-1",
|
|
37
|
+
"category": "mass_assignment",
|
|
38
|
+
"title": "Unknown model fields in whole object binding",
|
|
39
|
+
"candidate_id": "M-0006",
|
|
40
|
+
"location": {
|
|
41
|
+
"file": "node-express/routes/profile.js",
|
|
42
|
+
"start_line": 8
|
|
43
|
+
},
|
|
44
|
+
"evidence": [
|
|
45
|
+
{
|
|
46
|
+
"file": "node-express/routes/profile.js",
|
|
47
|
+
"line": 8,
|
|
48
|
+
"why": "Location taken from the Tier 1 inventory"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"impact": "Unable to determine if privileged fields are writable.",
|
|
52
|
+
"severity": "medium",
|
|
53
|
+
"confidence": "medium",
|
|
54
|
+
"cwe": [
|
|
55
|
+
"CWE-915"
|
|
56
|
+
],
|
|
57
|
+
"recommendation": "Review the User model definition and ensure privileged fields are not mass\u2011assignable.",
|
|
58
|
+
"status": "needs_review",
|
|
59
|
+
"subtype": "whole_object_binding"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"finding_id": "MASS-M-0007-1",
|
|
63
|
+
"category": "mass_assignment",
|
|
64
|
+
"title": "Unknown model fields in whole object binding",
|
|
65
|
+
"candidate_id": "M-0007",
|
|
66
|
+
"location": {
|
|
67
|
+
"file": "node-express/routes/profile.js",
|
|
68
|
+
"start_line": 16
|
|
69
|
+
},
|
|
70
|
+
"evidence": [
|
|
71
|
+
{
|
|
72
|
+
"file": "node-express/routes/profile.js",
|
|
73
|
+
"line": 16,
|
|
74
|
+
"why": "Location taken from the Tier 1 inventory"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"impact": "Unable to determine if privileged fields are writable.",
|
|
78
|
+
"severity": "medium",
|
|
79
|
+
"confidence": "medium",
|
|
80
|
+
"cwe": [
|
|
81
|
+
"CWE-915"
|
|
82
|
+
],
|
|
83
|
+
"recommendation": "Review the User model definition and ensure privileged fields are not mass\u2011assignable.",
|
|
84
|
+
"status": "needs_review",
|
|
85
|
+
"subtype": "whole_object_binding"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"finding_id": "MASS-M-0008-1",
|
|
89
|
+
"category": "mass_assignment",
|
|
90
|
+
"title": "Unknown model fields in whole object binding",
|
|
91
|
+
"candidate_id": "M-0008",
|
|
92
|
+
"location": {
|
|
93
|
+
"file": "php-laravel/app/Http/Controllers/AccountController.php",
|
|
94
|
+
"start_line": 13
|
|
95
|
+
},
|
|
96
|
+
"evidence": [
|
|
97
|
+
{
|
|
98
|
+
"file": "php-laravel/app/Http/Controllers/AccountController.php",
|
|
99
|
+
"line": 13,
|
|
100
|
+
"why": "Whole object binding: User::create($request->all());"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"impact": "Unable to determine if privileged fields are writable due to missing field list.",
|
|
104
|
+
"severity": "medium",
|
|
105
|
+
"confidence": "medium",
|
|
106
|
+
"cwe": [
|
|
107
|
+
"CWE-915"
|
|
108
|
+
],
|
|
109
|
+
"recommendation": "Inspect the User model to confirm which fields are mass\u2011assignable and restrict privileged ones.",
|
|
110
|
+
"status": "needs_review",
|
|
111
|
+
"subtype": "whole_object_binding"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"finding_id": "MASS-M-0010-1",
|
|
115
|
+
"category": "mass_assignment",
|
|
116
|
+
"title": "Unknown model fields in whole object binding",
|
|
117
|
+
"candidate_id": "M-0010",
|
|
118
|
+
"location": {
|
|
119
|
+
"file": "php-laravel/app/Http/Controllers/AccountController.php",
|
|
120
|
+
"start_line": 36
|
|
121
|
+
},
|
|
122
|
+
"evidence": [
|
|
123
|
+
{
|
|
124
|
+
"file": "php-laravel/app/Http/Controllers/AccountController.php",
|
|
125
|
+
"line": 23,
|
|
126
|
+
"why": "Whole object binding: Team::create($request->all());"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"impact": "Unable to determine if privileged fields are writable.",
|
|
130
|
+
"severity": "medium",
|
|
131
|
+
"confidence": "medium",
|
|
132
|
+
"cwe": [
|
|
133
|
+
"CWE-915"
|
|
134
|
+
],
|
|
135
|
+
"recommendation": "Review the Team model definition and ensure privileged fields are not mass\u2011assignable.",
|
|
136
|
+
"status": "needs_review",
|
|
137
|
+
"subtype": "whole_object_binding"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"finding_id": "MASS-M-0013-1",
|
|
141
|
+
"category": "mass_assignment",
|
|
142
|
+
"title": "Unknown model fields in whole object binding",
|
|
143
|
+
"candidate_id": "M-0013",
|
|
144
|
+
"location": {
|
|
145
|
+
"file": "php-plain/register.php",
|
|
146
|
+
"start_line": 4
|
|
147
|
+
},
|
|
148
|
+
"evidence": [
|
|
149
|
+
{
|
|
150
|
+
"file": "php-plain/register.php",
|
|
151
|
+
"line": 4,
|
|
152
|
+
"why": "Location taken from the Tier 1 inventory"
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"impact": "Unable to determine if privileged fields are writable.",
|
|
156
|
+
"severity": "medium",
|
|
157
|
+
"confidence": "medium",
|
|
158
|
+
"cwe": [
|
|
159
|
+
"CWE-915"
|
|
160
|
+
],
|
|
161
|
+
"recommendation": "Avoid using extract() and bind all POST values; explicitly whitelist fields.",
|
|
162
|
+
"status": "needs_review",
|
|
163
|
+
"subtype": "whole_object_binding"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"finding_id": "MASS-M-0015-1",
|
|
167
|
+
"category": "mass_assignment",
|
|
168
|
+
"title": "Unknown model fields in whole object binding",
|
|
169
|
+
"candidate_id": "M-0015",
|
|
170
|
+
"location": {
|
|
171
|
+
"file": "python-flask/profile.py",
|
|
172
|
+
"start_line": 27
|
|
173
|
+
},
|
|
174
|
+
"evidence": [
|
|
175
|
+
{
|
|
176
|
+
"file": "python-flask/profile.py",
|
|
177
|
+
"line": 27,
|
|
178
|
+
"why": "Location taken from the Tier 1 inventory"
|
|
179
|
+
}
|
|
180
|
+
],
|
|
181
|
+
"impact": "Unable to determine if privileged fields are writable.",
|
|
182
|
+
"severity": "medium",
|
|
183
|
+
"confidence": "medium",
|
|
184
|
+
"cwe": [
|
|
185
|
+
"CWE-915"
|
|
186
|
+
],
|
|
187
|
+
"recommendation": "Validate and whitelist request fields before setting attributes.",
|
|
188
|
+
"status": "needs_review",
|
|
189
|
+
"subtype": "whole_object_binding"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"finding_id": "MASS-M-0014-1",
|
|
193
|
+
"category": "mass_assignment",
|
|
194
|
+
"title": "Unknown model fields in whole object binding",
|
|
195
|
+
"candidate_id": "M-0014",
|
|
196
|
+
"location": {
|
|
197
|
+
"file": "python-flask/profile.py",
|
|
198
|
+
"start_line": 10
|
|
199
|
+
},
|
|
200
|
+
"evidence": [
|
|
201
|
+
{
|
|
202
|
+
"file": "python-flask/profile.py",
|
|
203
|
+
"line": 10,
|
|
204
|
+
"why": "Location taken from the Tier 1 inventory"
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"impact": "Unable to determine if privileged fields are writable.",
|
|
208
|
+
"severity": "medium",
|
|
209
|
+
"confidence": "medium",
|
|
210
|
+
"cwe": [
|
|
211
|
+
"CWE-915"
|
|
212
|
+
],
|
|
213
|
+
"recommendation": "Use a DTO or explicit field mapping to prevent mass assignment of privileged fields.",
|
|
214
|
+
"status": "needs_review",
|
|
215
|
+
"subtype": "whole_object_binding"
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
"privilege_route_verdicts": [],
|
|
219
|
+
"candidate_verdicts": [
|
|
220
|
+
{
|
|
221
|
+
"candidate_id": "M-0006",
|
|
222
|
+
"verdict": "needs_review"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"candidate_id": "M-0007",
|
|
226
|
+
"verdict": "needs_review"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"candidate_id": "M-0008",
|
|
230
|
+
"verdict": "needs_review"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"candidate_id": "M-0009",
|
|
234
|
+
"verdict": "vulnerable"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"candidate_id": "M-0010",
|
|
238
|
+
"verdict": "needs_review"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"candidate_id": "M-0013",
|
|
242
|
+
"verdict": "needs_review"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"candidate_id": "M-0015",
|
|
246
|
+
"verdict": "needs_review"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"candidate_id": "M-0014",
|
|
250
|
+
"verdict": "needs_review"
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "verified-1",
|
|
3
|
+
"verifications": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "BOLA-R-0002",
|
|
6
|
+
"verdict": "likely",
|
|
7
|
+
"reason_code": "code_not_visible",
|
|
8
|
+
"confidence": "medium",
|
|
9
|
+
"checked": [
|
|
10
|
+
"classic-asp/shop/member.asp:6-8",
|
|
11
|
+
"classic-asp/shop/inc/auth.asp:1-3",
|
|
12
|
+
"classic-asp/shop/inc/conn.asp:1-4"
|
|
13
|
+
],
|
|
14
|
+
"control_found": null,
|
|
15
|
+
"notes": "The UPDATE statement uses Request.Form(\"member_id\") directly without any ownership check or parameter binding. No role or ownership helper is invoked in the visible code."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"finding_id": "BOLA-R-0003",
|
|
19
|
+
"verdict": "likely",
|
|
20
|
+
"reason_code": "code_not_visible",
|
|
21
|
+
"confidence": "medium",
|
|
22
|
+
"checked": [
|
|
23
|
+
"classic-asp/shop/member.asp:9-11",
|
|
24
|
+
"classic-asp/shop/inc/auth.asp:1-3",
|
|
25
|
+
"classic-asp/shop/inc/conn.asp:1-4"
|
|
26
|
+
],
|
|
27
|
+
"control_found": null,
|
|
28
|
+
"notes": "The DELETE statement concatenates Request.QueryString(\"member_id\") directly. No ownership verification is present in the shown code."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"finding_id": "BOLA-R-0004",
|
|
32
|
+
"verdict": "likely",
|
|
33
|
+
"reason_code": "code_not_visible",
|
|
34
|
+
"confidence": "medium",
|
|
35
|
+
"checked": [
|
|
36
|
+
"classic-asp/shop/order.asp:5-7",
|
|
37
|
+
"classic-asp/shop/order.asp:12-13",
|
|
38
|
+
"classic-asp/shop/inc/auth.asp:1-3",
|
|
39
|
+
"classic-asp/shop/inc/conn.asp:1-4"
|
|
40
|
+
],
|
|
41
|
+
"control_found": null,
|
|
42
|
+
"notes": "The first SELECT retrieves the order by id without scoping to the current user and its result is output. The later scoped query is not used for output."
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"finding_id": "BOLA-R-0005",
|
|
46
|
+
"verdict": "likely",
|
|
47
|
+
"reason_code": "code_not_visible",
|
|
48
|
+
"confidence": "medium",
|
|
49
|
+
"checked": [
|
|
50
|
+
"coldfusion/app/OrderService.cfc:4-6"
|
|
51
|
+
],
|
|
52
|
+
"control_found": null,
|
|
53
|
+
"notes": "The query interpolates #arguments.orderId# directly. No ownership check or parameter binding is visible."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"finding_id": "BOLA-R-0006",
|
|
57
|
+
"verdict": "likely",
|
|
58
|
+
"reason_code": "code_not_visible",
|
|
59
|
+
"confidence": "medium",
|
|
60
|
+
"checked": [
|
|
61
|
+
"coldfusion/app/order.cfm:2-4",
|
|
62
|
+
"coldfusion/app/order.cfm:5-9"
|
|
63
|
+
],
|
|
64
|
+
"control_found": null,
|
|
65
|
+
"notes": "The unscoped query qOrder uses #url.id# and its result is displayed. The scoped query qMine is not used for output."
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "verified-10",
|
|
3
|
+
"verifications": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "INJ-I-0001",
|
|
6
|
+
"verdict": "likely",
|
|
7
|
+
"reason_code": "code_not_visible",
|
|
8
|
+
"confidence": "medium",
|
|
9
|
+
"checked": [
|
|
10
|
+
"classic-asp/shop/member.asp lines 6-8",
|
|
11
|
+
"classic-asp/shop/inc/auth.asp lines 1-3"
|
|
12
|
+
],
|
|
13
|
+
"control_found": null,
|
|
14
|
+
"notes": "No ownership or role check is visible in the code context. The authentication include only verifies that a user is logged in, not that the user owns the member record."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"finding_id": "INJ-I-0002",
|
|
18
|
+
"verdict": "likely",
|
|
19
|
+
"reason_code": "code_not_visible",
|
|
20
|
+
"confidence": "medium",
|
|
21
|
+
"checked": [
|
|
22
|
+
"classic-asp/shop/member.asp lines 6-8",
|
|
23
|
+
"classic-asp/shop/inc/auth.asp lines 1-3"
|
|
24
|
+
],
|
|
25
|
+
"control_found": null,
|
|
26
|
+
"notes": "The query concatenates the member_id from the form with no ownership or role guard shown in the context."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"finding_id": "INJ-I-0003",
|
|
30
|
+
"verdict": "likely",
|
|
31
|
+
"reason_code": "code_not_visible",
|
|
32
|
+
"confidence": "medium",
|
|
33
|
+
"checked": [
|
|
34
|
+
"classic-asp/shop/member.asp lines 9-11",
|
|
35
|
+
"classic-asp/shop/inc/auth.asp lines 1-3"
|
|
36
|
+
],
|
|
37
|
+
"control_found": null,
|
|
38
|
+
"notes": "The DELETE statement uses a member_id from the query string with no visible ownership check."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"finding_id": "INJ-I-0004",
|
|
42
|
+
"verdict": "likely",
|
|
43
|
+
"reason_code": "code_not_visible",
|
|
44
|
+
"confidence": "medium",
|
|
45
|
+
"checked": [
|
|
46
|
+
"classic-asp/shop/order.asp lines 5-7",
|
|
47
|
+
"classic-asp/shop/inc/auth.asp lines 1-3"
|
|
48
|
+
],
|
|
49
|
+
"control_found": null,
|
|
50
|
+
"notes": "The SELECT query uses an id from the request without casting or an ownership guard in the visible code."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"finding_id": "INJ-I-0005",
|
|
54
|
+
"verdict": "rejected",
|
|
55
|
+
"reason_code": "control_found",
|
|
56
|
+
"confidence": "high",
|
|
57
|
+
"checked": [
|
|
58
|
+
"classic-asp/shop/order.asp lines 10-12"
|
|
59
|
+
],
|
|
60
|
+
"control_found": {
|
|
61
|
+
"file": "classic-asp/shop/order.asp",
|
|
62
|
+
"line": 12,
|
|
63
|
+
"code": "Set rs2 = conn.Execute(\"SELECT * FROM orders WHERE id = \" & sid & \" AND user_id = \" & CLng(Session(\"UserID\")))"
|
|
64
|
+
},
|
|
65
|
+
"notes": "The query includes an ownership check by binding the user_id to the session value and casts the sid to a long, preventing injection and ensuring the user can only access their own orders."
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "verified-11",
|
|
3
|
+
"verifications": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "INJ-I-0006",
|
|
6
|
+
"verdict": "confirmed",
|
|
7
|
+
"reason_code": "traced",
|
|
8
|
+
"confidence": "high",
|
|
9
|
+
"checked": [
|
|
10
|
+
"coldfusion/app/OrderService.cfc:5"
|
|
11
|
+
],
|
|
12
|
+
"control_found": null,
|
|
13
|
+
"notes": "The query interpolates the unsanitized argument directly into the SQL string. No ownership or role check, no parameter binding, and no integer cast is present in the visible code."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"finding_id": "INJ-I-0007",
|
|
17
|
+
"verdict": "confirmed",
|
|
18
|
+
"reason_code": "traced",
|
|
19
|
+
"confidence": "high",
|
|
20
|
+
"checked": [
|
|
21
|
+
"coldfusion/app/order.cfm:3"
|
|
22
|
+
],
|
|
23
|
+
"control_found": null,
|
|
24
|
+
"notes": "The first query uses the raw URL parameter in the WHERE clause. Although a second query later uses cfqueryparam and includes a user_id check, the vulnerable query is executed and its result is output, providing an injection vector."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"finding_id": "INJ-I-0009",
|
|
28
|
+
"verdict": "confirmed",
|
|
29
|
+
"reason_code": "traced",
|
|
30
|
+
"confidence": "high",
|
|
31
|
+
"checked": [
|
|
32
|
+
"dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7",
|
|
33
|
+
"dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8"
|
|
34
|
+
],
|
|
35
|
+
"control_found": null,
|
|
36
|
+
"notes": "Both the Note and OrderId values are concatenated into the SQL string without any parameterization or ownership check. The subsequent safe query does not mitigate the earlier vulnerable execution."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"finding_id": "INJ-I-0010",
|
|
40
|
+
"verdict": "confirmed",
|
|
41
|
+
"reason_code": "traced",
|
|
42
|
+
"confidence": "high",
|
|
43
|
+
"checked": [
|
|
44
|
+
"dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8"
|
|
45
|
+
],
|
|
46
|
+
"control_found": null,
|
|
47
|
+
"notes": "The OrderId is concatenated directly into the SQL string. No ownership or role validation is present in the visible code."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"finding_id": "INJ-I-0011",
|
|
51
|
+
"verdict": "confirmed",
|
|
52
|
+
"reason_code": "traced",
|
|
53
|
+
"confidence": "high",
|
|
54
|
+
"checked": [
|
|
55
|
+
"dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13"
|
|
56
|
+
],
|
|
57
|
+
"control_found": null,
|
|
58
|
+
"notes": "The id from the query string is concatenated into the SQL command without parameterization or ownership verification. The later safe query does not prevent the execution of the vulnerable statement."
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "verified-12",
|
|
3
|
+
"verifications": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "INJ-I-0012",
|
|
6
|
+
"verdict": "confirmed",
|
|
7
|
+
"reason_code": "traced",
|
|
8
|
+
"confidence": "high",
|
|
9
|
+
"checked": [
|
|
10
|
+
"dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13-22"
|
|
11
|
+
],
|
|
12
|
+
"control_found": null,
|
|
13
|
+
"notes": "The query string is built by string.Format with user-supplied Request[\"ref\"]. No parameter binding, no ownership or role check is visible in the code_context."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"finding_id": "INJ-I-0013",
|
|
17
|
+
"verdict": "confirmed",
|
|
18
|
+
"reason_code": "traced",
|
|
19
|
+
"confidence": "high",
|
|
20
|
+
"checked": [
|
|
21
|
+
"dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13-22"
|
|
22
|
+
],
|
|
23
|
+
"control_found": null,
|
|
24
|
+
"notes": "The DELETE statement concatenates Request.Form[\"cart\"] directly into the SQL. No compensating control is present in the visible code."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"finding_id": "INJ-I-0014",
|
|
28
|
+
"verdict": "confirmed",
|
|
29
|
+
"reason_code": "traced",
|
|
30
|
+
"confidence": "high",
|
|
31
|
+
"checked": [
|
|
32
|
+
"java-legacy/WebContent/order/detail.jsp:1-6"
|
|
33
|
+
],
|
|
34
|
+
"control_found": null,
|
|
35
|
+
"notes": "The query concatenates the request parameter \"no\" into the SQL string. No ownership or role check is shown."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"finding_id": "INJ-I-0016",
|
|
39
|
+
"verdict": "confirmed",
|
|
40
|
+
"reason_code": "traced",
|
|
41
|
+
"confidence": "high",
|
|
42
|
+
"checked": [
|
|
43
|
+
"java-legacy/src/com/acme/struts/EditUserAction.java:10-15"
|
|
44
|
+
],
|
|
45
|
+
"control_found": null,
|
|
46
|
+
"notes": "The UPDATE statement concatenates the email and userId parameters directly. No parameter binding or ownership check is visible."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"finding_id": "INJ-I-0017",
|
|
50
|
+
"verdict": "confirmed",
|
|
51
|
+
"reason_code": "traced",
|
|
52
|
+
"confidence": "high",
|
|
53
|
+
"checked": [
|
|
54
|
+
"java-legacy/src/com/acme/web/InvoiceController.java:27-31"
|
|
55
|
+
],
|
|
56
|
+
"control_found": null,
|
|
57
|
+
"notes": "The HQL query concatenates the customer request parameter. No ownership or role check is present in the code_context."
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "verified-13",
|
|
3
|
+
"verifications": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "INJ-I-0020",
|
|
6
|
+
"verdict": "confirmed",
|
|
7
|
+
"reason_code": "traced",
|
|
8
|
+
"confidence": "high",
|
|
9
|
+
"checked": [
|
|
10
|
+
"node-express/routes/orders.js:17"
|
|
11
|
+
],
|
|
12
|
+
"control_found": null,
|
|
13
|
+
"notes": "The query concatenates user input directly into the SQL string with no sanitization, casting, or parameter binding. No ownership or role check is present on this route."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"finding_id": "INJ-I-0021",
|
|
17
|
+
"verdict": "confirmed",
|
|
18
|
+
"reason_code": "traced",
|
|
19
|
+
"confidence": "high",
|
|
20
|
+
"checked": [
|
|
21
|
+
"node-express/routes/orders.js:29"
|
|
22
|
+
],
|
|
23
|
+
"control_found": null,
|
|
24
|
+
"notes": "The query interpolates req.query.shop directly into the SQL string. No cast, binding, or authorization guard is visible."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"finding_id": "INJ-I-0022",
|
|
28
|
+
"verdict": "confirmed",
|
|
29
|
+
"reason_code": "traced",
|
|
30
|
+
"confidence": "high",
|
|
31
|
+
"checked": [
|
|
32
|
+
"node-express/routes/orders.js:21"
|
|
33
|
+
],
|
|
34
|
+
"control_found": null,
|
|
35
|
+
"notes": "The request body is passed directly to findOne without validation or sanitization. No role or ownership check is present."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"finding_id": "INJ-I-0023",
|
|
39
|
+
"verdict": "confirmed",
|
|
40
|
+
"reason_code": "traced",
|
|
41
|
+
"confidence": "high",
|
|
42
|
+
"checked": [
|
|
43
|
+
"node-express/routes/orders.js:25"
|
|
44
|
+
],
|
|
45
|
+
"control_found": null,
|
|
46
|
+
"notes": "The $where string concatenates user input directly, enabling NoSQL injection. No validation or authorization guard is visible."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"finding_id": "INJ-I-0024",
|
|
50
|
+
"verdict": "confirmed",
|
|
51
|
+
"reason_code": "traced",
|
|
52
|
+
"confidence": "high",
|
|
53
|
+
"checked": [
|
|
54
|
+
"perl-cgi/cgi-bin/order.cgi:13"
|
|
55
|
+
],
|
|
56
|
+
"control_found": null,
|
|
57
|
+
"notes": "The prepared statement interpolates $id directly into the SQL string. No parameter binding or sanitization is used. The later safe query does not mitigate this earlier vulnerability."
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "verified-14",
|
|
3
|
+
"verifications": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "INJ-I-0025",
|
|
6
|
+
"verdict": "confirmed",
|
|
7
|
+
"reason_code": "traced",
|
|
8
|
+
"confidence": "high",
|
|
9
|
+
"checked": [
|
|
10
|
+
"perl-cgi/cgi-bin/order.cgi:13-19"
|
|
11
|
+
],
|
|
12
|
+
"control_found": null,
|
|
13
|
+
"notes": "The DELETE statement concatenates user input directly into the SQL string and no ownership or role check is present in the visible code."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"finding_id": "INJ-I-0027",
|
|
17
|
+
"verdict": "confirmed",
|
|
18
|
+
"reason_code": "traced",
|
|
19
|
+
"confidence": "high",
|
|
20
|
+
"checked": [
|
|
21
|
+
"php-plain/admin.php:10-12",
|
|
22
|
+
"php-plain/inc/auth.php:1-7",
|
|
23
|
+
"php-plain/inc/db.php:1-4"
|
|
24
|
+
],
|
|
25
|
+
"control_found": null,
|
|
26
|
+
"notes": "The DELETE query uses unsanitized POST data and the included auth file only verifies login, not ownership or role."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"finding_id": "INJ-I-0028",
|
|
30
|
+
"verdict": "confirmed",
|
|
31
|
+
"reason_code": "traced",
|
|
32
|
+
"confidence": "high",
|
|
33
|
+
"checked": [
|
|
34
|
+
"php-plain/admin.php:10-12",
|
|
35
|
+
"php-plain/inc/auth.php:1-7",
|
|
36
|
+
"php-plain/inc/db.php:1-4"
|
|
37
|
+
],
|
|
38
|
+
"control_found": null,
|
|
39
|
+
"notes": "Same as INJ-I-0027; no compensating control is visible."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"finding_id": "INJ-I-0029",
|
|
43
|
+
"verdict": "confirmed",
|
|
44
|
+
"reason_code": "traced",
|
|
45
|
+
"confidence": "high",
|
|
46
|
+
"checked": [
|
|
47
|
+
"php-plain/mongo_find.php:5-6",
|
|
48
|
+
"php-plain/inc/auth.php:1-7"
|
|
49
|
+
],
|
|
50
|
+
"control_found": null,
|
|
51
|
+
"notes": "The $where clause concatenates user input; no ownership or role check is present in the visible code."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"finding_id": "INJ-I-0030",
|
|
55
|
+
"verdict": "confirmed",
|
|
56
|
+
"reason_code": "traced",
|
|
57
|
+
"confidence": "high",
|
|
58
|
+
"checked": [
|
|
59
|
+
"php-plain/mongo_find.php:5-6",
|
|
60
|
+
"php-plain/inc/auth.php:1-7"
|
|
61
|
+
],
|
|
62
|
+
"control_found": null,
|
|
63
|
+
"notes": "Same as INJ-I-0029; no compensating control is visible."
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|