@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.
- package/CHANGELOG.md +30 -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/laravel_routes.py +102 -0
- package/assess/lsa/scripts/map_routes.py +4 -1
- 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_laravel_routes.py +95 -0
- package/examples/member-portal/backend-dotnet/Auth/DemoAuthenticationHandler.cs +75 -0
- package/examples/member-portal/backend-dotnet/Program.cs +1 -72
- package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/Application.kt +4 -0
- package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/controller/Controllers.kt +3 -0
- package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/model/Entities.kt +4 -0
- package/examples/member-portal/tests/test_d6_demo_app.py +4 -4
- package/examples/member-portal/tests/test_d6_remediation_verification.py +6 -6
- package/operate/ai/client.py +27 -10
- package/operate/ai/runner.py +4 -2
- package/operate/cli/__init__.py +1 -1
- package/operate/cli/commands/scan.py +8 -1
- package/operate/cross_user_tester/runner.py +4 -1
- package/operate/devsecops/sbom.py +12 -4
- package/operate/simulate/scenarios.py +11 -2
- package/operate/tests/test_ai_reasoning_effort.py +65 -0
- package/operate/tests/test_ai_route_inventory.py +53 -0
- package/operate/tests/test_audit_minimum_versions.py +89 -0
- package/operate/tests/test_cli.py +1 -1
- package/operate/tests/test_scheme_and_xml_guards.py +67 -0
- package/package.json +1 -1
- package/remediate/authz/dotnet/src/Komagu.Security.Authorization/LoggingSecurityAuditSink.cs +19 -3
- package/remediate/authz/golang/authz_test.go +5 -2
- package/remediate/authz/spring/src/main/kotlin/io/komagu/security/authorization/DefaultKomaguSecurityManager.kt +74 -78
- package/remediate/authz/spring/src/main/kotlin/io/komagu/security/spring/OwnershipAspect.kt +129 -158
- package/remediate/deps/patcher.py +2 -1
- package/remediate/edge/mock-backend/app.py +2 -1
- package/remediate/edge/tests/test_edge_security.py +5 -5
- package/remediate/ekyc/requirements.txt +1 -1
- package/remediate/identity/dotnet/src/Komagu.Security.Identity/OidcServiceCollectionExtensions.cs +19 -6
- package/remediate/identity/python/requirements.txt +2 -2
- package/remediate/identity/spring/src/main/kotlin/io/komagu/security/identity/KomaguIdentityAutoConfiguration.kt +31 -38
- package/remediate/legacy_shims/tests/test_legacy_shims.py +8 -8
- package/remediate/query/dotnet/src/Komagu.Security.Query/SafeSortAllowList.cs +5 -2
- package/remediate/query/spring/src/main/kotlin/io/komagu/security/query/SafeSortAllowList.kt +10 -11
- package/remediate/query/spring/src/main/kotlin/io/komagu/security/query/detekt/StringBuiltSqlQueryRule.kt +19 -24
|
@@ -0,0 +1,726 @@
|
|
|
1
|
+
{
|
|
2
|
+
"batch_id": "privilege-001",
|
|
3
|
+
"findings": [
|
|
4
|
+
{
|
|
5
|
+
"finding_id": "BFLA-R-0003-1",
|
|
6
|
+
"category": "bfla",
|
|
7
|
+
"subtype": "missing_role_check",
|
|
8
|
+
"title": "Any authenticated user can delete members",
|
|
9
|
+
"route_id": "R-0003",
|
|
10
|
+
"endpoint": {
|
|
11
|
+
"method": "ANY",
|
|
12
|
+
"path": "/classic-asp/shop/member.asp?mode=delete"
|
|
13
|
+
},
|
|
14
|
+
"location": {
|
|
15
|
+
"file": "classic-asp/shop/member.asp",
|
|
16
|
+
"start_line": 9,
|
|
17
|
+
"end_line": 10
|
|
18
|
+
},
|
|
19
|
+
"evidence": [
|
|
20
|
+
{
|
|
21
|
+
"file": "classic-asp/shop/member.asp",
|
|
22
|
+
"line": 2,
|
|
23
|
+
"code": "<!--#include file=\"inc/auth.asp\"-->",
|
|
24
|
+
"why": "Includes auth check which only verifies login (Session(\"UserID\") exists), not role"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"file": "classic-asp/shop/member.asp",
|
|
28
|
+
"line": 10,
|
|
29
|
+
"code": "conn.Execute \"DELETE FROM members WHERE member_id = \" & Request.QueryString(\"member_id\")",
|
|
30
|
+
"why": "Privileged deletion action executed without verifying admin role"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"impact": "Any authenticated user can delete other users.",
|
|
34
|
+
"severity": "critical",
|
|
35
|
+
"confidence": "high",
|
|
36
|
+
"cwe": [
|
|
37
|
+
"CWE-285"
|
|
38
|
+
],
|
|
39
|
+
"owasp": [
|
|
40
|
+
"API5:2023",
|
|
41
|
+
"A01:2021"
|
|
42
|
+
],
|
|
43
|
+
"recommendation": "Add a server-side role check in the ASP page before executing the delete logic.",
|
|
44
|
+
"status": "unverified"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"finding_id": "BFLA-R-0009-1",
|
|
48
|
+
"category": "bfla",
|
|
49
|
+
"subtype": "role_from_request",
|
|
50
|
+
"title": "Admin role is determined by request parameter instead of server-side check",
|
|
51
|
+
"route_id": "R-0009",
|
|
52
|
+
"endpoint": {
|
|
53
|
+
"method": "POST",
|
|
54
|
+
"path": "/Admin/Export"
|
|
55
|
+
},
|
|
56
|
+
"location": {
|
|
57
|
+
"file": "dotnet-legacy/Web/Controllers/AdminController.cs",
|
|
58
|
+
"start_line": 32,
|
|
59
|
+
"end_line": 34
|
|
60
|
+
},
|
|
61
|
+
"evidence": [
|
|
62
|
+
{
|
|
63
|
+
"file": "dotnet-legacy/Web/Controllers/AdminController.cs",
|
|
64
|
+
"line": 32,
|
|
65
|
+
"code": "if (Request.QueryString[\"isAdmin\"] == \"true\")",
|
|
66
|
+
"why": "Role/permission is derived directly from client input"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"impact": "Any authenticated user can export all users by setting isAdmin=true.",
|
|
70
|
+
"severity": "critical",
|
|
71
|
+
"confidence": "high",
|
|
72
|
+
"cwe": [
|
|
73
|
+
"CWE-285"
|
|
74
|
+
],
|
|
75
|
+
"owasp": [
|
|
76
|
+
"API5:2023",
|
|
77
|
+
"A01:2021"
|
|
78
|
+
],
|
|
79
|
+
"recommendation": "Verify the user's role from the authenticated identity object before executing the export.",
|
|
80
|
+
"status": "unverified"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"finding_id": "BFLA-R-0023-1",
|
|
84
|
+
"category": "bfla",
|
|
85
|
+
"subtype": "missing_role_check",
|
|
86
|
+
"title": "Any authenticated user can delete users via REST endpoint",
|
|
87
|
+
"route_id": "R-0023",
|
|
88
|
+
"endpoint": {
|
|
89
|
+
"method": "POST",
|
|
90
|
+
"path": "/admin/users/{id}/delete"
|
|
91
|
+
},
|
|
92
|
+
"location": {
|
|
93
|
+
"file": "java-legacy/src/com/acme/web/AdminUserController.java",
|
|
94
|
+
"start_line": 13,
|
|
95
|
+
"end_line": 16
|
|
96
|
+
},
|
|
97
|
+
"evidence": [
|
|
98
|
+
{
|
|
99
|
+
"file": "java-legacy/src/com/acme/web/AdminUserController.java",
|
|
100
|
+
"line": 7,
|
|
101
|
+
"code": "@Controller",
|
|
102
|
+
"why": "No class-level security annotation found"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"file": "java-legacy/src/com/acme/web/AdminUserController.java",
|
|
106
|
+
"line": 13,
|
|
107
|
+
"code": "@RequestMapping(value = \"/{id}/delete\", method = RequestMethod.POST)",
|
|
108
|
+
"why": "Privileged delete action lacks specific role check"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"file": "java-legacy/src/com/acme/web/AdminUserController.java",
|
|
112
|
+
"line": 15,
|
|
113
|
+
"code": "userDao.deleteById(id);",
|
|
114
|
+
"why": "Execution proceeds without verifying admin role"
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
"impact": "Any authenticated user can delete other users.",
|
|
118
|
+
"severity": "critical",
|
|
119
|
+
"confidence": "high",
|
|
120
|
+
"cwe": [
|
|
121
|
+
"CWE-285"
|
|
122
|
+
],
|
|
123
|
+
"owasp": [
|
|
124
|
+
"API5:2023",
|
|
125
|
+
"A01:2021"
|
|
126
|
+
],
|
|
127
|
+
"recommendation": "Add @PreAuthorize(\"hasRole('ADMIN')\") or equivalent check before the delete logic.",
|
|
128
|
+
"status": "unverified"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"finding_id": "BFLA-R-0057-1",
|
|
132
|
+
"category": "bfla",
|
|
133
|
+
"subtype": "missing_role_check",
|
|
134
|
+
"title": "Any authenticated user can view admin users",
|
|
135
|
+
"route_id": "R-0057",
|
|
136
|
+
"endpoint": {
|
|
137
|
+
"method": "GET|POST",
|
|
138
|
+
"path": "/php-plain/admin.php?action=view"
|
|
139
|
+
},
|
|
140
|
+
"location": {
|
|
141
|
+
"file": "php-plain/admin.php",
|
|
142
|
+
"start_line": 6,
|
|
143
|
+
"end_line": 9
|
|
144
|
+
},
|
|
145
|
+
"evidence": [
|
|
146
|
+
{
|
|
147
|
+
"file": "php-plain/admin.php",
|
|
148
|
+
"line": 2,
|
|
149
|
+
"code": "require_once 'inc/auth.php';",
|
|
150
|
+
"why": "Includes auth check which only verifies login"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"file": "php-plain/admin.php",
|
|
154
|
+
"line": 8,
|
|
155
|
+
"code": "$r = mysql_query(\"SELECT * FROM users WHERE id = \" . $uid);",
|
|
156
|
+
"why": "Privileged read action executed without verifying admin role"
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"impact": "Any authenticated user can view other users' data.",
|
|
160
|
+
"severity": "high",
|
|
161
|
+
"confidence": "high",
|
|
162
|
+
"cwe": [
|
|
163
|
+
"CWE-285"
|
|
164
|
+
],
|
|
165
|
+
"owasp": [
|
|
166
|
+
"API5:2023",
|
|
167
|
+
"A01:2021"
|
|
168
|
+
],
|
|
169
|
+
"recommendation": "Add a server-side role check in the PHP file before executing the query.",
|
|
170
|
+
"status": "unverified"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"finding_id": "BFLA-R-0058-1",
|
|
174
|
+
"category": "bfla",
|
|
175
|
+
"subtype": "missing_role_check",
|
|
176
|
+
"title": "Any authenticated user can delete users via GET/POST",
|
|
177
|
+
"route_id": "R-0058",
|
|
178
|
+
"endpoint": {
|
|
179
|
+
"method": "GET|POST",
|
|
180
|
+
"path": "/php-plain/admin.php?action=delete"
|
|
181
|
+
},
|
|
182
|
+
"location": {
|
|
183
|
+
"file": "php-plain/admin.php",
|
|
184
|
+
"start_line": 10,
|
|
185
|
+
"end_line": 12
|
|
186
|
+
},
|
|
187
|
+
"evidence": [
|
|
188
|
+
{
|
|
189
|
+
"file": "php-plain/admin.php",
|
|
190
|
+
"line": 2,
|
|
191
|
+
"code": "require_once 'inc/auth.php';",
|
|
192
|
+
"why": "Includes auth check which only verifies login"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"file": "php-plain/admin.php",
|
|
196
|
+
"line": 12,
|
|
197
|
+
"code": "mysql_query(\"DELETE FROM users WHERE id = $id\");",
|
|
198
|
+
"why": "Privileged deletion action executed without verifying admin role"
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
"impact": "Any authenticated user can delete other users.",
|
|
202
|
+
"severity": "critical",
|
|
203
|
+
"confidence": "high",
|
|
204
|
+
"cwe": [
|
|
205
|
+
"CWE-285"
|
|
206
|
+
],
|
|
207
|
+
"owasp": [
|
|
208
|
+
"API5:2023",
|
|
209
|
+
"A01:2021"
|
|
210
|
+
],
|
|
211
|
+
"recommendation": "Add a server-side role check in the PHP file before executing the delete logic.",
|
|
212
|
+
"status": "unverified"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"finding_id": "BFLA-R-0066-1",
|
|
216
|
+
"category": "bfla",
|
|
217
|
+
"subtype": "missing_role_check",
|
|
218
|
+
"title": "Any authenticated user can delete users via POST",
|
|
219
|
+
"route_id": "R-0066",
|
|
220
|
+
"endpoint": {
|
|
221
|
+
"method": "POST",
|
|
222
|
+
"path": "/php-plain/admin/delete_user.php"
|
|
223
|
+
},
|
|
224
|
+
"location": {
|
|
225
|
+
"file": "php-plain/admin/delete_user.php",
|
|
226
|
+
"start_line": 6,
|
|
227
|
+
"end_line": 7
|
|
228
|
+
},
|
|
229
|
+
"evidence": [
|
|
230
|
+
{
|
|
231
|
+
"file": "php-plain/admin/delete_user.php",
|
|
232
|
+
"line": 2,
|
|
233
|
+
"code": "require_once '../inc/auth.php';",
|
|
234
|
+
"why": "Includes auth check which only verifies login"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"file": "php-plain/admin/delete_user.php",
|
|
238
|
+
"line": 6,
|
|
239
|
+
"code": "$stmt = $db->prepare(\"DELETE FROM users WHERE id = ?\");",
|
|
240
|
+
"why": "Privileged deletion action executed without verifying admin role"
|
|
241
|
+
}
|
|
242
|
+
],
|
|
243
|
+
"impact": "Any authenticated user can delete other users.",
|
|
244
|
+
"severity": "critical",
|
|
245
|
+
"confidence": "high",
|
|
246
|
+
"cwe": [
|
|
247
|
+
"CWE-285"
|
|
248
|
+
],
|
|
249
|
+
"owasp": [
|
|
250
|
+
"API5:2023",
|
|
251
|
+
"A01:2021"
|
|
252
|
+
],
|
|
253
|
+
"recommendation": "Add a server-side role check in the PHP file before executing the delete logic.",
|
|
254
|
+
"status": "unverified"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"finding_id": "BFLA-R-0067-1",
|
|
258
|
+
"category": "bfla",
|
|
259
|
+
"subtype": "role_from_request",
|
|
260
|
+
"title": "Admin role is determined by request parameter instead of server-side check",
|
|
261
|
+
"route_id": "R-0067",
|
|
262
|
+
"endpoint": {
|
|
263
|
+
"method": "POST",
|
|
264
|
+
"path": "/php-plain/admin/promote.php"
|
|
265
|
+
},
|
|
266
|
+
"location": {
|
|
267
|
+
"file": "php-plain/admin/promote.php",
|
|
268
|
+
"start_line": 5,
|
|
269
|
+
"end_line": 7
|
|
270
|
+
},
|
|
271
|
+
"evidence": [
|
|
272
|
+
{
|
|
273
|
+
"file": "php-plain/admin/promote.php",
|
|
274
|
+
"line": 2,
|
|
275
|
+
"code": "require_once '../inc/auth.php';",
|
|
276
|
+
"why": "Includes auth check which only verifies login"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"file": "php-plain/admin/promote.php",
|
|
280
|
+
"line": 5,
|
|
281
|
+
"code": "if ($_POST['is_admin'] == '1') {",
|
|
282
|
+
"why": "Privileged action triggered by client-controlled flag"
|
|
283
|
+
}
|
|
284
|
+
],
|
|
285
|
+
"impact": "Any authenticated user can promote other users to admin.",
|
|
286
|
+
"severity": "critical",
|
|
287
|
+
"confidence": "high",
|
|
288
|
+
"cwe": [
|
|
289
|
+
"CWE-285"
|
|
290
|
+
],
|
|
291
|
+
"owasp": [
|
|
292
|
+
"API5:2023",
|
|
293
|
+
"A01:2021"
|
|
294
|
+
],
|
|
295
|
+
"recommendation": "Verify the user's role from the session or database before executing the update.",
|
|
296
|
+
"status": "unverified"
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"finding_id": "BFLA-R-0063-1",
|
|
300
|
+
"category": "bfla",
|
|
301
|
+
"subtype": "role_from_request",
|
|
302
|
+
"title": "User role is determined by request parameter instead of server-side check",
|
|
303
|
+
"route_id": "R-0063",
|
|
304
|
+
"endpoint": {
|
|
305
|
+
"method": "POST",
|
|
306
|
+
"path": "/php-plain/profile.php"
|
|
307
|
+
},
|
|
308
|
+
"location": {
|
|
309
|
+
"file": "php-plain/profile.php",
|
|
310
|
+
"start_line": 10,
|
|
311
|
+
"end_line": 10
|
|
312
|
+
},
|
|
313
|
+
"evidence": [
|
|
314
|
+
{
|
|
315
|
+
"file": "php-plain/profile.php",
|
|
316
|
+
"line": 2,
|
|
317
|
+
"code": "require_once 'inc/auth.php';",
|
|
318
|
+
"why": "Includes auth check which only verifies login"
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"file": "php-plain/profile.php",
|
|
322
|
+
"line": 10,
|
|
323
|
+
"code": "$user->role = $_POST['role'];",
|
|
324
|
+
"why": "Privileged field assignment from client input"
|
|
325
|
+
}
|
|
326
|
+
],
|
|
327
|
+
"impact": "Any authenticated user can change their own role to admin.",
|
|
328
|
+
"severity": "critical",
|
|
329
|
+
"confidence": "high",
|
|
330
|
+
"cwe": [
|
|
331
|
+
"CWE-285"
|
|
332
|
+
],
|
|
333
|
+
"owasp": [
|
|
334
|
+
"API5:2023",
|
|
335
|
+
"A01:2021"
|
|
336
|
+
],
|
|
337
|
+
"recommendation": "Restrict the set of writable fields or explicitly check role before assignment.",
|
|
338
|
+
"status": "unverified"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"finding_id": "MASS-M-0003-1",
|
|
342
|
+
"category": "mass_assignment",
|
|
343
|
+
"subtype": "privileged_field_writable",
|
|
344
|
+
"title": "Account model allows writing the 'role' field via whole object binding",
|
|
345
|
+
"candidate_id": "M-0003",
|
|
346
|
+
"endpoint": {
|
|
347
|
+
"method": "POST|PUT",
|
|
348
|
+
"path": "/account/save|/account/api"
|
|
349
|
+
},
|
|
350
|
+
"location": {
|
|
351
|
+
"file": "java-legacy/src/com/acme/web/AccountController.java",
|
|
352
|
+
"start_line": 14
|
|
353
|
+
},
|
|
354
|
+
"evidence": [
|
|
355
|
+
{
|
|
356
|
+
"file": "java-legacy/src/com/acme/web/AccountController.java",
|
|
357
|
+
"line": 14,
|
|
358
|
+
"code": "@RequestMapping(value = \"/save\", method = RequestMethod.POST)",
|
|
359
|
+
"why": "Endpoint accepts POST without explicit role check"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"file": "java-legacy/src/com/acme/web/AccountController.java",
|
|
363
|
+
"line": 15,
|
|
364
|
+
"code": "accountDao.save(account);",
|
|
365
|
+
"why": "Saves the entire object bound from request"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"file": "java-legacy/src/com/acme/model/Account.java",
|
|
369
|
+
"line": 11,
|
|
370
|
+
"code": "private String role;",
|
|
371
|
+
"why": "Privileged field 'role' exists in model"
|
|
372
|
+
}
|
|
373
|
+
],
|
|
374
|
+
"impact": "Any authenticated user can escalate privileges by setting role=admin.",
|
|
375
|
+
"severity": "critical",
|
|
376
|
+
"confidence": "high",
|
|
377
|
+
"cwe": [
|
|
378
|
+
"CWE-915"
|
|
379
|
+
],
|
|
380
|
+
"owasp": [
|
|
381
|
+
"API3:2023",
|
|
382
|
+
"A01:2021"
|
|
383
|
+
],
|
|
384
|
+
"recommendation": "Use a DTO with only editable fields or whitelist allowed properties before saving.",
|
|
385
|
+
"status": "unverified"
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"finding_id": "MASS-M-0004-1",
|
|
389
|
+
"category": "mass_assignment",
|
|
390
|
+
"subtype": "privileged_field_writable",
|
|
391
|
+
"title": "Account model allows writing the 'role' field via whole object binding",
|
|
392
|
+
"candidate_id": "M-0004",
|
|
393
|
+
"endpoint": {
|
|
394
|
+
"method": "POST|PUT",
|
|
395
|
+
"path": "/account/save|/account/api"
|
|
396
|
+
},
|
|
397
|
+
"location": {
|
|
398
|
+
"file": "java-legacy/src/com/acme/web/AccountController.java",
|
|
399
|
+
"start_line": 27
|
|
400
|
+
},
|
|
401
|
+
"evidence": [
|
|
402
|
+
{
|
|
403
|
+
"file": "java-legacy/src/com/acme/web/AccountController.java",
|
|
404
|
+
"line": 14,
|
|
405
|
+
"code": "@RequestMapping(value = \"/save\", method = RequestMethod.POST)",
|
|
406
|
+
"why": "Endpoint accepts POST without explicit role check"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"file": "java-legacy/src/com/acme/web/AccountController.java",
|
|
410
|
+
"line": 15,
|
|
411
|
+
"code": "accountDao.save(account);",
|
|
412
|
+
"why": "Saves the entire object bound from request"
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"file": "java-legacy/src/com/acme/model/Account.java",
|
|
416
|
+
"line": 11,
|
|
417
|
+
"code": "private String role;",
|
|
418
|
+
"why": "Privileged field 'role' exists in model"
|
|
419
|
+
}
|
|
420
|
+
],
|
|
421
|
+
"impact": "Any authenticated user can escalate privileges by setting role=admin.",
|
|
422
|
+
"severity": "critical",
|
|
423
|
+
"confidence": "high",
|
|
424
|
+
"cwe": [
|
|
425
|
+
"CWE-915"
|
|
426
|
+
],
|
|
427
|
+
"owasp": [
|
|
428
|
+
"API3:2023",
|
|
429
|
+
"A01:2021"
|
|
430
|
+
],
|
|
431
|
+
"recommendation": "Use a DTO with only editable fields or whitelist allowed properties before saving.",
|
|
432
|
+
"status": "unverified"
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"finding_id": "MASS-M-0005-1",
|
|
436
|
+
"category": "mass_assignment",
|
|
437
|
+
"subtype": "privileged_field_writable",
|
|
438
|
+
"title": "Account model allows writing the 'role' field via BeanUtils.populate",
|
|
439
|
+
"candidate_id": "M-0005",
|
|
440
|
+
"endpoint": {
|
|
441
|
+
"method": "POST",
|
|
442
|
+
"path": "/profile"
|
|
443
|
+
},
|
|
444
|
+
"location": {
|
|
445
|
+
"file": "java-legacy/src/com/acme/web/ProfileServlet.java",
|
|
446
|
+
"start_line": 12
|
|
447
|
+
},
|
|
448
|
+
"evidence": [
|
|
449
|
+
{
|
|
450
|
+
"file": "java-legacy/src/com/acme/web/ProfileServlet.java",
|
|
451
|
+
"line": 9,
|
|
452
|
+
"code": "protected void doPost(HttpServletRequest request, HttpServletResponse response)",
|
|
453
|
+
"why": "Endpoint accepts POST without explicit role check"
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"file": "java-legacy/src/com/acme/web/ProfileServlet.java",
|
|
457
|
+
"line": 12,
|
|
458
|
+
"code": "BeanUtils.populate(account, request.getParameterMap());",
|
|
459
|
+
"why": "Populates all fields from request parameters"
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"file": "java-legacy/src/com/acme/model/Account.java",
|
|
463
|
+
"line": 11,
|
|
464
|
+
"code": "private String role;",
|
|
465
|
+
"why": "Privileged field 'role' exists in model"
|
|
466
|
+
}
|
|
467
|
+
],
|
|
468
|
+
"impact": "Any authenticated user can escalate privileges by setting role=admin.",
|
|
469
|
+
"severity": "critical",
|
|
470
|
+
"confidence": "high",
|
|
471
|
+
"cwe": [
|
|
472
|
+
"CWE-915"
|
|
473
|
+
],
|
|
474
|
+
"owasp": [
|
|
475
|
+
"API3:2023",
|
|
476
|
+
"A01:2021"
|
|
477
|
+
],
|
|
478
|
+
"recommendation": "Manually copy only safe fields or use a whitelist before populating the model.",
|
|
479
|
+
"status": "unverified"
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"finding_id": "BFLA-R-0032-verdict",
|
|
483
|
+
"category": "bfla",
|
|
484
|
+
"subtype": "missing_role_check",
|
|
485
|
+
"title": "Missing role check at node-express/routes/admin.js:16 (from auditor verdict)",
|
|
486
|
+
"route_id": "R-0032",
|
|
487
|
+
"location": {
|
|
488
|
+
"file": "node-express/routes/admin.js",
|
|
489
|
+
"start_line": 16
|
|
490
|
+
},
|
|
491
|
+
"evidence": [
|
|
492
|
+
{
|
|
493
|
+
"file": "node-express/routes/admin.js",
|
|
494
|
+
"line": 16,
|
|
495
|
+
"why": "The auditor judged this route 'needs_review' but wrote no finding"
|
|
496
|
+
}
|
|
497
|
+
],
|
|
498
|
+
"impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
|
|
499
|
+
"severity": "medium",
|
|
500
|
+
"confidence": "low",
|
|
501
|
+
"cwe": [
|
|
502
|
+
"CWE-285"
|
|
503
|
+
],
|
|
504
|
+
"recommendation": "Check the caller's role on the server before the privileged action.",
|
|
505
|
+
"status": "unverified",
|
|
506
|
+
"endpoint": {
|
|
507
|
+
"method": "GET",
|
|
508
|
+
"path": "/reports/export"
|
|
509
|
+
}
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"finding_id": "BFLA-R-0059-verdict",
|
|
513
|
+
"category": "bfla",
|
|
514
|
+
"subtype": "missing_role_check",
|
|
515
|
+
"title": "Missing role check at php-plain/manage_users.php:1 (from auditor verdict)",
|
|
516
|
+
"route_id": "R-0059",
|
|
517
|
+
"location": {
|
|
518
|
+
"file": "php-plain/manage_users.php",
|
|
519
|
+
"start_line": 1
|
|
520
|
+
},
|
|
521
|
+
"evidence": [
|
|
522
|
+
{
|
|
523
|
+
"file": "php-plain/manage_users.php",
|
|
524
|
+
"line": 1,
|
|
525
|
+
"why": "The auditor judged this route 'needs_review' but wrote no finding"
|
|
526
|
+
}
|
|
527
|
+
],
|
|
528
|
+
"impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
|
|
529
|
+
"severity": "medium",
|
|
530
|
+
"confidence": "low",
|
|
531
|
+
"cwe": [
|
|
532
|
+
"CWE-285"
|
|
533
|
+
],
|
|
534
|
+
"recommendation": "Check the caller's role on the server before the privileged action.",
|
|
535
|
+
"status": "unverified",
|
|
536
|
+
"endpoint": {
|
|
537
|
+
"method": "POST",
|
|
538
|
+
"path": "/php-plain/manage_users.php"
|
|
539
|
+
}
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
"finding_id": "MASS-M-0011-verdict",
|
|
543
|
+
"category": "mass_assignment",
|
|
544
|
+
"subtype": "whole_object_binding",
|
|
545
|
+
"title": "Mass assignment at php-plain/profile.php:6 (from auditor verdict)",
|
|
546
|
+
"candidate_id": "M-0011",
|
|
547
|
+
"location": {
|
|
548
|
+
"file": "php-plain/profile.php",
|
|
549
|
+
"start_line": 6
|
|
550
|
+
},
|
|
551
|
+
"evidence": [
|
|
552
|
+
{
|
|
553
|
+
"file": "php-plain/profile.php",
|
|
554
|
+
"line": 6,
|
|
555
|
+
"why": "The auditor judged this candidate 'needs_review' but wrote no finding"
|
|
556
|
+
}
|
|
557
|
+
],
|
|
558
|
+
"impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
|
|
559
|
+
"severity": "medium",
|
|
560
|
+
"confidence": "low",
|
|
561
|
+
"cwe": [
|
|
562
|
+
"CWE-915"
|
|
563
|
+
],
|
|
564
|
+
"recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
|
|
565
|
+
"status": "unverified"
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"finding_id": "MASS-M-0012-verdict",
|
|
569
|
+
"category": "mass_assignment",
|
|
570
|
+
"subtype": "privileged_field_writable",
|
|
571
|
+
"title": "Mass assignment at php-plain/profile.php:10 (from auditor verdict)",
|
|
572
|
+
"candidate_id": "M-0012",
|
|
573
|
+
"location": {
|
|
574
|
+
"file": "php-plain/profile.php",
|
|
575
|
+
"start_line": 10
|
|
576
|
+
},
|
|
577
|
+
"evidence": [
|
|
578
|
+
{
|
|
579
|
+
"file": "php-plain/profile.php",
|
|
580
|
+
"line": 10,
|
|
581
|
+
"why": "The auditor judged this candidate 'needs_review' but wrote no finding"
|
|
582
|
+
}
|
|
583
|
+
],
|
|
584
|
+
"impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
|
|
585
|
+
"severity": "medium",
|
|
586
|
+
"confidence": "low",
|
|
587
|
+
"cwe": [
|
|
588
|
+
"CWE-915"
|
|
589
|
+
],
|
|
590
|
+
"recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
|
|
591
|
+
"status": "unverified"
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"finding_id": "MASS-M-0001-verdict",
|
|
595
|
+
"category": "mass_assignment",
|
|
596
|
+
"subtype": "whole_object_binding",
|
|
597
|
+
"title": "Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:12 (from auditor verdict)",
|
|
598
|
+
"candidate_id": "M-0001",
|
|
599
|
+
"location": {
|
|
600
|
+
"file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
|
|
601
|
+
"start_line": 12
|
|
602
|
+
},
|
|
603
|
+
"evidence": [
|
|
604
|
+
{
|
|
605
|
+
"file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
|
|
606
|
+
"line": 12,
|
|
607
|
+
"why": "The auditor judged this candidate 'needs_review' but wrote no finding"
|
|
608
|
+
}
|
|
609
|
+
],
|
|
610
|
+
"impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
|
|
611
|
+
"severity": "medium",
|
|
612
|
+
"confidence": "low",
|
|
613
|
+
"cwe": [
|
|
614
|
+
"CWE-915"
|
|
615
|
+
],
|
|
616
|
+
"recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
|
|
617
|
+
"status": "unverified"
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
"finding_id": "MASS-M-0002-verdict",
|
|
621
|
+
"category": "mass_assignment",
|
|
622
|
+
"subtype": "whole_object_binding",
|
|
623
|
+
"title": "Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:30 (from auditor verdict)",
|
|
624
|
+
"candidate_id": "M-0002",
|
|
625
|
+
"location": {
|
|
626
|
+
"file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
|
|
627
|
+
"start_line": 30
|
|
628
|
+
},
|
|
629
|
+
"evidence": [
|
|
630
|
+
{
|
|
631
|
+
"file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
|
|
632
|
+
"line": 30,
|
|
633
|
+
"why": "The auditor judged this candidate 'needs_review' but wrote no finding"
|
|
634
|
+
}
|
|
635
|
+
],
|
|
636
|
+
"impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
|
|
637
|
+
"severity": "medium",
|
|
638
|
+
"confidence": "low",
|
|
639
|
+
"cwe": [
|
|
640
|
+
"CWE-915"
|
|
641
|
+
],
|
|
642
|
+
"recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
|
|
643
|
+
"status": "unverified"
|
|
644
|
+
}
|
|
645
|
+
],
|
|
646
|
+
"privilege_route_verdicts": [
|
|
647
|
+
{
|
|
648
|
+
"route_id": "R-0003",
|
|
649
|
+
"verdict": "vulnerable"
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
"route_id": "R-0007",
|
|
653
|
+
"verdict": "safe"
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
"route_id": "R-0009",
|
|
657
|
+
"verdict": "needs_review"
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
"route_id": "R-0023",
|
|
661
|
+
"verdict": "vulnerable"
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"route_id": "R-0030",
|
|
665
|
+
"verdict": "safe"
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"route_id": "R-0032",
|
|
669
|
+
"verdict": "needs_review"
|
|
670
|
+
},
|
|
671
|
+
{
|
|
672
|
+
"route_id": "R-0057",
|
|
673
|
+
"verdict": "vulnerable"
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
"route_id": "R-0058",
|
|
677
|
+
"verdict": "vulnerable"
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"route_id": "R-0066",
|
|
681
|
+
"verdict": "vulnerable"
|
|
682
|
+
},
|
|
683
|
+
{
|
|
684
|
+
"route_id": "R-0067",
|
|
685
|
+
"verdict": "vulnerable"
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
"route_id": "R-0059",
|
|
689
|
+
"verdict": "needs_review"
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
"route_id": "R-0063",
|
|
693
|
+
"verdict": "vulnerable"
|
|
694
|
+
}
|
|
695
|
+
],
|
|
696
|
+
"candidate_verdicts": [
|
|
697
|
+
{
|
|
698
|
+
"candidate_id": "M-0011",
|
|
699
|
+
"verdict": "needs_review"
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
"candidate_id": "M-0012",
|
|
703
|
+
"verdict": "needs_review"
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
"candidate_id": "M-0001",
|
|
707
|
+
"verdict": "needs_review"
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"candidate_id": "M-0002",
|
|
711
|
+
"verdict": "needs_review"
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
"candidate_id": "M-0003",
|
|
715
|
+
"verdict": "vulnerable"
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
"candidate_id": "M-0004",
|
|
719
|
+
"verdict": "vulnerable"
|
|
720
|
+
},
|
|
721
|
+
{
|
|
722
|
+
"candidate_id": "M-0005",
|
|
723
|
+
"verdict": "vulnerable"
|
|
724
|
+
}
|
|
725
|
+
]
|
|
726
|
+
}
|