@hoanghainh/komagu 2.5.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 +17 -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/operate/ai/client.py +22 -9
- package/operate/ai/runner.py +4 -2
- package/operate/cli/__init__.py +1 -1
- package/operate/cli/commands/scan.py +8 -1
- package/operate/tests/test_ai_reasoning_effort.py +65 -0
- package/operate/tests/test_ai_route_inventory.py +53 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1123 @@
|
|
|
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 member.asp:6 via Request.Form concatenation",
|
|
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
|
+
"line": 6,
|
|
18
|
+
"code": "sql = \"UPDATE members SET name = '\" & Replace(Request.Form(\"name\"), \"'\", \"''\") & \"'\"",
|
|
19
|
+
"why": "User input concatenated into SQL string"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"file": "classic-asp/shop/member.asp",
|
|
23
|
+
"line": 7,
|
|
24
|
+
"code": "sql = sql & \" WHERE member_id = \" & Request.Form(\"member_id\")",
|
|
25
|
+
"why": "User input concatenated into SQL string"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"file": "classic-asp/shop/member.asp",
|
|
29
|
+
"line": 8,
|
|
30
|
+
"code": "conn.Execute sql",
|
|
31
|
+
"why": "Sink executes constructed query"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"data_flow": [
|
|
35
|
+
"Request.Form(name)",
|
|
36
|
+
"Request.Form(member_id)",
|
|
37
|
+
"sql variable",
|
|
38
|
+
"conn.Execute"
|
|
39
|
+
],
|
|
40
|
+
"attack_scenario": "A crafted name or member_id parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
41
|
+
"impact": "Modification of user data; potential for arbitrary updates if WHERE clause is manipulated.",
|
|
42
|
+
"severity": "critical",
|
|
43
|
+
"confidence": "high",
|
|
44
|
+
"cwe": [
|
|
45
|
+
"CWE-89"
|
|
46
|
+
],
|
|
47
|
+
"owasp": [
|
|
48
|
+
"A03:2021"
|
|
49
|
+
],
|
|
50
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
51
|
+
"status": "unverified"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"finding_id": "INJ-I-0002",
|
|
55
|
+
"category": "sql_injection",
|
|
56
|
+
"subtype": "string_concatenation",
|
|
57
|
+
"title": "SQL Injection in member.asp:7 via Request.Form concatenation",
|
|
58
|
+
"candidate_id": "I-0002",
|
|
59
|
+
"location": {
|
|
60
|
+
"file": "classic-asp/shop/member.asp",
|
|
61
|
+
"start_line": 7
|
|
62
|
+
},
|
|
63
|
+
"evidence": [
|
|
64
|
+
{
|
|
65
|
+
"file": "classic-asp/shop/member.asp",
|
|
66
|
+
"line": 6,
|
|
67
|
+
"code": "sql = \"UPDATE members SET name = '\" & Replace(Request.Form(\"name\"), \"'\", \"''\") & \"'\"",
|
|
68
|
+
"why": "User input concatenated into SQL string"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"file": "classic-asp/shop/member.asp",
|
|
72
|
+
"line": 7,
|
|
73
|
+
"code": "sql = sql & \" WHERE member_id = \" & Request.Form(\"member_id\")",
|
|
74
|
+
"why": "User input concatenated into SQL string"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"file": "classic-asp/shop/member.asp",
|
|
78
|
+
"line": 8,
|
|
79
|
+
"code": "conn.Execute sql",
|
|
80
|
+
"why": "Sink executes constructed query"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"data_flow": [
|
|
84
|
+
"Request.Form(name)",
|
|
85
|
+
"Request.Form(member_id)",
|
|
86
|
+
"sql variable",
|
|
87
|
+
"conn.Execute"
|
|
88
|
+
],
|
|
89
|
+
"attack_scenario": "A crafted name or member_id parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
90
|
+
"impact": "Modification of user data; potential for arbitrary updates if WHERE clause is manipulated.",
|
|
91
|
+
"severity": "critical",
|
|
92
|
+
"confidence": "high",
|
|
93
|
+
"cwe": [
|
|
94
|
+
"CWE-89"
|
|
95
|
+
],
|
|
96
|
+
"owasp": [
|
|
97
|
+
"A03:2021"
|
|
98
|
+
],
|
|
99
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
100
|
+
"status": "unverified"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"finding_id": "INJ-I-0003",
|
|
104
|
+
"category": "sql_injection",
|
|
105
|
+
"subtype": "string_concatenation",
|
|
106
|
+
"title": "SQL Injection in member.asp:10 via Request.QueryString concatenation",
|
|
107
|
+
"candidate_id": "I-0003",
|
|
108
|
+
"location": {
|
|
109
|
+
"file": "classic-asp/shop/member.asp",
|
|
110
|
+
"start_line": 10
|
|
111
|
+
},
|
|
112
|
+
"evidence": [
|
|
113
|
+
{
|
|
114
|
+
"file": "classic-asp/shop/member.asp",
|
|
115
|
+
"line": 10,
|
|
116
|
+
"code": "conn.Execute \"DELETE FROM members WHERE member_id = \" & Request.QueryString(\"member_id\")",
|
|
117
|
+
"why": "User input concatenated into SQL string"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"file": "classic-asp/shop/member.asp",
|
|
121
|
+
"line": 8,
|
|
122
|
+
"code": "conn.Execute sql",
|
|
123
|
+
"why": "Previous query execution (contextual sink for the block)"
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"data_flow": [
|
|
127
|
+
"Request.QueryString(member_id)",
|
|
128
|
+
"SQL string literal",
|
|
129
|
+
"conn.Execute"
|
|
130
|
+
],
|
|
131
|
+
"attack_scenario": "A crafted member_id parameter can alter the SQL logic, potentially deleting unintended records.",
|
|
132
|
+
"impact": "Deletion of database records; potential for arbitrary data loss.",
|
|
133
|
+
"severity": "critical",
|
|
134
|
+
"confidence": "high",
|
|
135
|
+
"cwe": [
|
|
136
|
+
"CWE-89"
|
|
137
|
+
],
|
|
138
|
+
"owasp": [
|
|
139
|
+
"A03:2021"
|
|
140
|
+
],
|
|
141
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
142
|
+
"status": "unverified"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"finding_id": "INJ-I-0004",
|
|
146
|
+
"category": "sql_injection",
|
|
147
|
+
"subtype": "string_concatenation",
|
|
148
|
+
"title": "SQL Injection in order.asp:6 via Request concatenation",
|
|
149
|
+
"candidate_id": "I-0004",
|
|
150
|
+
"location": {
|
|
151
|
+
"file": "classic-asp/shop/order.asp",
|
|
152
|
+
"start_line": 6
|
|
153
|
+
},
|
|
154
|
+
"evidence": [
|
|
155
|
+
{
|
|
156
|
+
"file": "classic-asp/shop/order.asp",
|
|
157
|
+
"line": 5,
|
|
158
|
+
"code": "id = Request(\"id\")",
|
|
159
|
+
"why": "User input source"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"file": "classic-asp/shop/order.asp",
|
|
163
|
+
"line": 6,
|
|
164
|
+
"code": "Set rs = conn.Execute(\"SELECT * FROM orders WHERE id = \" & id)",
|
|
165
|
+
"why": "User input concatenated into SQL string"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"file": "classic-asp/shop/order.asp",
|
|
169
|
+
"line": 12,
|
|
170
|
+
"code": "Set rs2 = conn.Execute(\"SELECT * FROM orders WHERE id = \" & sid & \" AND user_id = \" & CLng(Session(\"UserID\")))",
|
|
171
|
+
"why": "User input concatenated into SQL string"
|
|
172
|
+
}
|
|
173
|
+
],
|
|
174
|
+
"data_flow": [
|
|
175
|
+
"Request(id)",
|
|
176
|
+
"sid (derived from Request)",
|
|
177
|
+
"SQL string literal",
|
|
178
|
+
"conn.Execute"
|
|
179
|
+
],
|
|
180
|
+
"attack_scenario": "A crafted id or sid parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
181
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
182
|
+
"severity": "critical",
|
|
183
|
+
"confidence": "high",
|
|
184
|
+
"cwe": [
|
|
185
|
+
"CWE-89"
|
|
186
|
+
],
|
|
187
|
+
"owasp": [
|
|
188
|
+
"A03:2021"
|
|
189
|
+
],
|
|
190
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
191
|
+
"status": "unverified"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"finding_id": "INJ-I-0005",
|
|
195
|
+
"category": "sql_injection",
|
|
196
|
+
"subtype": "string_concatenation",
|
|
197
|
+
"title": "SQL Injection in order.asp:12 via Request concatenation",
|
|
198
|
+
"candidate_id": "I-0005",
|
|
199
|
+
"location": {
|
|
200
|
+
"file": "classic-asp/shop/order.asp",
|
|
201
|
+
"start_line": 12
|
|
202
|
+
},
|
|
203
|
+
"evidence": [
|
|
204
|
+
{
|
|
205
|
+
"file": "classic-asp/shop/order.asp",
|
|
206
|
+
"line": 5,
|
|
207
|
+
"code": "id = Request(\"id\")",
|
|
208
|
+
"why": "User input source"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"file": "classic-asp/shop/order.asp",
|
|
212
|
+
"line": 6,
|
|
213
|
+
"code": "Set rs = conn.Execute(\"SELECT * FROM orders WHERE id = \" & id)",
|
|
214
|
+
"why": "User input concatenated into SQL string"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"file": "classic-asp/shop/order.asp",
|
|
218
|
+
"line": 12,
|
|
219
|
+
"code": "Set rs2 = conn.Execute(\"SELECT * FROM orders WHERE id = \" & sid & \" AND user_id = \" & CLng(Session(\"UserID\")))",
|
|
220
|
+
"why": "User input concatenated into SQL string"
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
"data_flow": [
|
|
224
|
+
"Request(id)",
|
|
225
|
+
"sid (derived from Request)",
|
|
226
|
+
"SQL string literal",
|
|
227
|
+
"conn.Execute"
|
|
228
|
+
],
|
|
229
|
+
"attack_scenario": "A crafted id or sid parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
230
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
231
|
+
"severity": "critical",
|
|
232
|
+
"confidence": "high",
|
|
233
|
+
"cwe": [
|
|
234
|
+
"CWE-89"
|
|
235
|
+
],
|
|
236
|
+
"owasp": [
|
|
237
|
+
"A03:2021"
|
|
238
|
+
],
|
|
239
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
240
|
+
"status": "unverified"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"finding_id": "INJ-I-0006",
|
|
244
|
+
"category": "sql_injection",
|
|
245
|
+
"subtype": "template_placeholder",
|
|
246
|
+
"title": "SQL Injection in OrderService.cfc:5 via ColdFusion template interpolation",
|
|
247
|
+
"candidate_id": "I-0006",
|
|
248
|
+
"location": {
|
|
249
|
+
"file": "coldfusion/app/OrderService.cfc",
|
|
250
|
+
"start_line": 5
|
|
251
|
+
},
|
|
252
|
+
"evidence": [
|
|
253
|
+
{
|
|
254
|
+
"file": "coldfusion/app/OrderService.cfc",
|
|
255
|
+
"line": 3,
|
|
256
|
+
"code": "<cfargument name=\"orderId\" type=\"string\" required=\"true\">",
|
|
257
|
+
"why": "Argument source"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"file": "coldfusion/app/OrderService.cfc",
|
|
261
|
+
"line": 5,
|
|
262
|
+
"code": "SELECT * FROM orders WHERE id = #arguments.orderId#",
|
|
263
|
+
"why": "ColdFusion template interpolation without cfqueryparam"
|
|
264
|
+
}
|
|
265
|
+
],
|
|
266
|
+
"data_flow": [
|
|
267
|
+
"arguments.orderId (function argument)",
|
|
268
|
+
"SQL string literal",
|
|
269
|
+
"cfquery"
|
|
270
|
+
],
|
|
271
|
+
"attack_scenario": "A crafted orderId parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
272
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
273
|
+
"severity": "critical",
|
|
274
|
+
"confidence": "high",
|
|
275
|
+
"cwe": [
|
|
276
|
+
"CWE-89"
|
|
277
|
+
],
|
|
278
|
+
"owasp": [
|
|
279
|
+
"A03:2021"
|
|
280
|
+
],
|
|
281
|
+
"recommendation": "Use cfqueryparam to type-cast the argument or use a stored procedure.",
|
|
282
|
+
"status": "unverified"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"finding_id": "INJ-I-0007",
|
|
286
|
+
"category": "sql_injection",
|
|
287
|
+
"subtype": "template_placeholder",
|
|
288
|
+
"title": "SQL Injection in order.cfm:3 via ColdFusion template interpolation",
|
|
289
|
+
"candidate_id": "I-0007",
|
|
290
|
+
"location": {
|
|
291
|
+
"file": "coldfusion/app/order.cfm",
|
|
292
|
+
"start_line": 3
|
|
293
|
+
},
|
|
294
|
+
"evidence": [
|
|
295
|
+
{
|
|
296
|
+
"file": "coldfusion/app/order.cfm",
|
|
297
|
+
"line": 2,
|
|
298
|
+
"code": "<cfquery name=\"qOrder\" datasource=\"shop\">",
|
|
299
|
+
"why": "Query sink"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"file": "coldfusion/app/order.cfm",
|
|
303
|
+
"line": 3,
|
|
304
|
+
"code": "SELECT * FROM orders WHERE id = #url.id#",
|
|
305
|
+
"why": "ColdFusion template interpolation without cfqueryparam"
|
|
306
|
+
}
|
|
307
|
+
],
|
|
308
|
+
"data_flow": [
|
|
309
|
+
"url.id (request input)",
|
|
310
|
+
"SQL string literal",
|
|
311
|
+
"cfquery"
|
|
312
|
+
],
|
|
313
|
+
"attack_scenario": "A crafted id parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
314
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
315
|
+
"severity": "critical",
|
|
316
|
+
"confidence": "high",
|
|
317
|
+
"cwe": [
|
|
318
|
+
"CWE-89"
|
|
319
|
+
],
|
|
320
|
+
"owasp": [
|
|
321
|
+
"A03:2021"
|
|
322
|
+
],
|
|
323
|
+
"recommendation": "Use cfqueryparam to type-cast the value or use a stored procedure.",
|
|
324
|
+
"status": "unverified"
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"finding_id": "INJ-I-0009",
|
|
328
|
+
"category": "sql_injection",
|
|
329
|
+
"subtype": "string_concatenation",
|
|
330
|
+
"title": "SQL Injection in OrderDetail.aspx.cs:13 via string concatenation",
|
|
331
|
+
"candidate_id": "I-0009",
|
|
332
|
+
"location": {
|
|
333
|
+
"file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
|
|
334
|
+
"start_line": 7
|
|
335
|
+
},
|
|
336
|
+
"evidence": [
|
|
337
|
+
{
|
|
338
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
339
|
+
"line": 10,
|
|
340
|
+
"code": "string id = Request.QueryString[\"id\"];",
|
|
341
|
+
"why": "User input source"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
345
|
+
"line": 13,
|
|
346
|
+
"code": "var cmd = new SqlCommand(\"SELECT * FROM Orders WHERE OrderId = \" + id, conn);",
|
|
347
|
+
"why": "User input concatenated into SQL string"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
351
|
+
"line": 19,
|
|
352
|
+
"code": "string sql2 = string.Format(\"SELECT * FROM Logs WHERE Ref = '{0}'\", Request[\"ref\"]);",
|
|
353
|
+
"why": "User input concatenated into SQL string"
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
357
|
+
"line": 20,
|
|
358
|
+
"code": "string sql3 = $\"DELETE FROM Carts WHERE CartId = {Request.Form[\"cart\"]}\";",
|
|
359
|
+
"why": "User input interpolated into SQL string"
|
|
360
|
+
}
|
|
361
|
+
],
|
|
362
|
+
"data_flow": [
|
|
363
|
+
"Request.QueryString(id)",
|
|
364
|
+
"Request(ref)",
|
|
365
|
+
"Request.Form(cart)",
|
|
366
|
+
"SQL string literals",
|
|
367
|
+
"SqlCommand"
|
|
368
|
+
],
|
|
369
|
+
"attack_scenario": "A crafted id, ref, or cart parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
370
|
+
"impact": "Read/Modify/Delete of database records; potential for arbitrary data access.",
|
|
371
|
+
"severity": "critical",
|
|
372
|
+
"confidence": "high",
|
|
373
|
+
"cwe": [
|
|
374
|
+
"CWE-89"
|
|
375
|
+
],
|
|
376
|
+
"owasp": [
|
|
377
|
+
"A03:2021"
|
|
378
|
+
],
|
|
379
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
380
|
+
"status": "unverified"
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"finding_id": "INJ-I-0010",
|
|
384
|
+
"category": "sql_injection",
|
|
385
|
+
"subtype": "string_concatenation",
|
|
386
|
+
"title": "SQL Injection in OrderDetail.aspx.cs:19 via string.Format concatenation",
|
|
387
|
+
"candidate_id": "I-0010",
|
|
388
|
+
"location": {
|
|
389
|
+
"file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
|
|
390
|
+
"start_line": 8
|
|
391
|
+
},
|
|
392
|
+
"evidence": [
|
|
393
|
+
{
|
|
394
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
395
|
+
"line": 10,
|
|
396
|
+
"code": "string id = Request.QueryString[\"id\"];",
|
|
397
|
+
"why": "User input source"
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
401
|
+
"line": 13,
|
|
402
|
+
"code": "var cmd = new SqlCommand(\"SELECT * FROM Orders WHERE OrderId = \" + id, conn);",
|
|
403
|
+
"why": "User input concatenated into SQL string"
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
407
|
+
"line": 19,
|
|
408
|
+
"code": "string sql2 = string.Format(\"SELECT * FROM Logs WHERE Ref = '{0}'\", Request[\"ref\"]);",
|
|
409
|
+
"why": "User input concatenated into SQL string"
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
413
|
+
"line": 20,
|
|
414
|
+
"code": "string sql3 = $\"DELETE FROM Carts WHERE CartId = {Request.Form[\"cart\"]}\";",
|
|
415
|
+
"why": "User input interpolated into SQL string"
|
|
416
|
+
}
|
|
417
|
+
],
|
|
418
|
+
"data_flow": [
|
|
419
|
+
"Request.QueryString(id)",
|
|
420
|
+
"Request(ref)",
|
|
421
|
+
"Request.Form(cart)",
|
|
422
|
+
"SQL string literals",
|
|
423
|
+
"SqlCommand"
|
|
424
|
+
],
|
|
425
|
+
"attack_scenario": "A crafted id, ref, or cart parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
426
|
+
"impact": "Read/Modify/Delete of database records; potential for arbitrary data access.",
|
|
427
|
+
"severity": "critical",
|
|
428
|
+
"confidence": "high",
|
|
429
|
+
"cwe": [
|
|
430
|
+
"CWE-89"
|
|
431
|
+
],
|
|
432
|
+
"owasp": [
|
|
433
|
+
"A03:2021"
|
|
434
|
+
],
|
|
435
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
436
|
+
"status": "unverified"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"finding_id": "INJ-I-0011",
|
|
440
|
+
"category": "sql_injection",
|
|
441
|
+
"subtype": "string_concatenation",
|
|
442
|
+
"title": "SQL Injection in OrderDetail.aspx.cs:20 via interpolated string concatenation",
|
|
443
|
+
"candidate_id": "I-0011",
|
|
444
|
+
"location": {
|
|
445
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
446
|
+
"start_line": 13
|
|
447
|
+
},
|
|
448
|
+
"evidence": [
|
|
449
|
+
{
|
|
450
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
451
|
+
"line": 10,
|
|
452
|
+
"code": "string id = Request.QueryString[\"id\"];",
|
|
453
|
+
"why": "User input source"
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
457
|
+
"line": 13,
|
|
458
|
+
"code": "var cmd = new SqlCommand(\"SELECT * FROM Orders WHERE OrderId = \" + id, conn);",
|
|
459
|
+
"why": "User input concatenated into SQL string"
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
463
|
+
"line": 19,
|
|
464
|
+
"code": "string sql2 = string.Format(\"SELECT * FROM Logs WHERE Ref = '{0}'\", Request[\"ref\"]);",
|
|
465
|
+
"why": "User input concatenated into SQL string"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
469
|
+
"line": 20,
|
|
470
|
+
"code": "string sql3 = $\"DELETE FROM Carts WHERE CartId = {Request.Form[\"cart\"]}\";",
|
|
471
|
+
"why": "User input interpolated into SQL string"
|
|
472
|
+
}
|
|
473
|
+
],
|
|
474
|
+
"data_flow": [
|
|
475
|
+
"Request.QueryString(id)",
|
|
476
|
+
"Request(ref)",
|
|
477
|
+
"Request.Form(cart)",
|
|
478
|
+
"SQL string literals",
|
|
479
|
+
"SqlCommand"
|
|
480
|
+
],
|
|
481
|
+
"attack_scenario": "A crafted id, ref, or cart parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
482
|
+
"impact": "Read/Modify/Delete of database records; potential for arbitrary data access.",
|
|
483
|
+
"severity": "critical",
|
|
484
|
+
"confidence": "high",
|
|
485
|
+
"cwe": [
|
|
486
|
+
"CWE-89"
|
|
487
|
+
],
|
|
488
|
+
"owasp": [
|
|
489
|
+
"A03:2021"
|
|
490
|
+
],
|
|
491
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
492
|
+
"status": "unverified"
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"finding_id": "INJ-I-0012",
|
|
496
|
+
"category": "sql_injection",
|
|
497
|
+
"subtype": "string_concatenation",
|
|
498
|
+
"title": "SQL Injection in detail.jsp:5 via string concatenation",
|
|
499
|
+
"candidate_id": "I-0012",
|
|
500
|
+
"location": {
|
|
501
|
+
"file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
|
|
502
|
+
"start_line": 19
|
|
503
|
+
},
|
|
504
|
+
"evidence": [
|
|
505
|
+
{
|
|
506
|
+
"file": "java-legacy/WebContent/order/detail.jsp",
|
|
507
|
+
"line": 3,
|
|
508
|
+
"code": "String no = request.getParameter(\"no\");",
|
|
509
|
+
"why": "User input source"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"file": "java-legacy/WebContent/order/detail.jsp",
|
|
513
|
+
"line": 5,
|
|
514
|
+
"code": "ResultSet rs = c.createStatement().executeQuery(\"SELECT * FROM orders WHERE order_no = '\" + no + \"'\");",
|
|
515
|
+
"why": "User input concatenated into SQL string"
|
|
516
|
+
}
|
|
517
|
+
],
|
|
518
|
+
"data_flow": [
|
|
519
|
+
"request.getParameter(no)",
|
|
520
|
+
"SQL string literal",
|
|
521
|
+
"executeQuery"
|
|
522
|
+
],
|
|
523
|
+
"attack_scenario": "A crafted no parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
524
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
525
|
+
"severity": "critical",
|
|
526
|
+
"confidence": "high",
|
|
527
|
+
"cwe": [
|
|
528
|
+
"CWE-89"
|
|
529
|
+
],
|
|
530
|
+
"owasp": [
|
|
531
|
+
"A03:2021"
|
|
532
|
+
],
|
|
533
|
+
"recommendation": "Use PreparedStatement with bound parameters instead of string concatenation.",
|
|
534
|
+
"status": "unverified"
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
"finding_id": "INJ-I-0016",
|
|
538
|
+
"category": "sql_injection",
|
|
539
|
+
"subtype": "string_concatenation",
|
|
540
|
+
"title": "SQL Injection in EditUserAction.java:13 via string concatenation",
|
|
541
|
+
"candidate_id": "I-0016",
|
|
542
|
+
"location": {
|
|
543
|
+
"file": "java-legacy/src/com/acme/struts/EditUserAction.java",
|
|
544
|
+
"start_line": 13
|
|
545
|
+
},
|
|
546
|
+
"evidence": [
|
|
547
|
+
{
|
|
548
|
+
"file": "java-legacy/src/com/acme/struts/EditUserAction.java",
|
|
549
|
+
"line": 10,
|
|
550
|
+
"code": "String userId = request.getParameter(\"user_id\");",
|
|
551
|
+
"why": "User input source"
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"file": "java-legacy/src/com/acme/struts/EditUserAction.java",
|
|
555
|
+
"line": 13,
|
|
556
|
+
"code": "PreparedStatement ps = conn.prepareStatement(\"UPDATE users SET email = '\" + email + \"' WHERE id = \" + userId);",
|
|
557
|
+
"why": "User input concatenated into SQL string"
|
|
558
|
+
}
|
|
559
|
+
],
|
|
560
|
+
"data_flow": [
|
|
561
|
+
"request.getParameter(user_id)",
|
|
562
|
+
"SQL string literal",
|
|
563
|
+
"prepareStatement"
|
|
564
|
+
],
|
|
565
|
+
"attack_scenario": "A crafted user_id or email parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
566
|
+
"impact": "Modification of user data; potential for arbitrary updates if WHERE clause is manipulated.",
|
|
567
|
+
"severity": "critical",
|
|
568
|
+
"confidence": "high",
|
|
569
|
+
"cwe": [
|
|
570
|
+
"CWE-89"
|
|
571
|
+
],
|
|
572
|
+
"owasp": [
|
|
573
|
+
"A03:2021"
|
|
574
|
+
],
|
|
575
|
+
"recommendation": "Use PreparedStatement with bound parameters instead of string concatenation.",
|
|
576
|
+
"status": "unverified"
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"finding_id": "INJ-I-0017",
|
|
580
|
+
"category": "sql_injection",
|
|
581
|
+
"subtype": "string_concatenation",
|
|
582
|
+
"title": "SQL Injection in InvoiceController.java:29 via string concatenation",
|
|
583
|
+
"candidate_id": "I-0017",
|
|
584
|
+
"location": {
|
|
585
|
+
"file": "java-legacy/src/com/acme/web/InvoiceController.java",
|
|
586
|
+
"start_line": 29
|
|
587
|
+
},
|
|
588
|
+
"evidence": [
|
|
589
|
+
{
|
|
590
|
+
"file": "java-legacy/src/com/acme/web/InvoiceController.java",
|
|
591
|
+
"line": 28,
|
|
592
|
+
"code": "public String search(@RequestParam(\"customer\") String customer, Model model) {",
|
|
593
|
+
"why": "User input source"
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"file": "java-legacy/src/com/acme/web/InvoiceController.java",
|
|
597
|
+
"line": 29,
|
|
598
|
+
"code": "model.addAttribute(\"list\", session.createQuery(\"from Invoice i where i.customer = '\" + customer + \"'\").list());",
|
|
599
|
+
"why": "User input concatenated into SQL string"
|
|
600
|
+
}
|
|
601
|
+
],
|
|
602
|
+
"data_flow": [
|
|
603
|
+
"@RequestParam(customer)",
|
|
604
|
+
"SQL string literal",
|
|
605
|
+
"session.createQuery"
|
|
606
|
+
],
|
|
607
|
+
"attack_scenario": "A crafted customer parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
608
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
609
|
+
"severity": "critical",
|
|
610
|
+
"confidence": "high",
|
|
611
|
+
"cwe": [
|
|
612
|
+
"CWE-89"
|
|
613
|
+
],
|
|
614
|
+
"owasp": [
|
|
615
|
+
"A03:2021"
|
|
616
|
+
],
|
|
617
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
618
|
+
"status": "unverified"
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"finding_id": "INJ-I-0020",
|
|
622
|
+
"category": "sql_injection",
|
|
623
|
+
"subtype": "string_concatenation",
|
|
624
|
+
"title": "SQL Injection in orders.js:17 via string concatenation",
|
|
625
|
+
"candidate_id": "I-0020",
|
|
626
|
+
"location": {
|
|
627
|
+
"file": "node-express/routes/orders.js",
|
|
628
|
+
"start_line": 17
|
|
629
|
+
},
|
|
630
|
+
"evidence": [
|
|
631
|
+
{
|
|
632
|
+
"file": "node-express/routes/orders.js",
|
|
633
|
+
"line": 16,
|
|
634
|
+
"code": "db.query(\"SELECT * FROM reports WHERE month = '\" + req.query.month + \"'\", function (e, rows) { res.json(rows); });",
|
|
635
|
+
"why": "User input concatenated into SQL string"
|
|
636
|
+
}
|
|
637
|
+
],
|
|
638
|
+
"data_flow": [
|
|
639
|
+
"req.query.month",
|
|
640
|
+
"SQL string literal",
|
|
641
|
+
"db.query"
|
|
642
|
+
],
|
|
643
|
+
"attack_scenario": "A crafted month parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
644
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
645
|
+
"severity": "critical",
|
|
646
|
+
"confidence": "high",
|
|
647
|
+
"cwe": [
|
|
648
|
+
"CWE-89"
|
|
649
|
+
],
|
|
650
|
+
"owasp": [
|
|
651
|
+
"A03:2021"
|
|
652
|
+
],
|
|
653
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
654
|
+
"status": "unverified"
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
"finding_id": "INJ-I-0021",
|
|
658
|
+
"category": "sql_injection",
|
|
659
|
+
"subtype": "string_interpolation",
|
|
660
|
+
"title": "SQL Injection in orders.js:29 via template literal interpolation",
|
|
661
|
+
"candidate_id": "I-0021",
|
|
662
|
+
"location": {
|
|
663
|
+
"file": "node-express/routes/orders.js",
|
|
664
|
+
"start_line": 29
|
|
665
|
+
},
|
|
666
|
+
"evidence": [
|
|
667
|
+
{
|
|
668
|
+
"file": "node-express/routes/orders.js",
|
|
669
|
+
"line": 28,
|
|
670
|
+
"code": "db.query(`SELECT COUNT(*) AS n FROM orders WHERE shop_id = ${req.query.shop}`, function (e, r) { res.json(r); });",
|
|
671
|
+
"why": "User input interpolated into SQL string"
|
|
672
|
+
}
|
|
673
|
+
],
|
|
674
|
+
"data_flow": [
|
|
675
|
+
"req.query.shop",
|
|
676
|
+
"SQL string literal",
|
|
677
|
+
"db.query"
|
|
678
|
+
],
|
|
679
|
+
"attack_scenario": "A crafted shop parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
680
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
681
|
+
"severity": "critical",
|
|
682
|
+
"confidence": "high",
|
|
683
|
+
"cwe": [
|
|
684
|
+
"CWE-89"
|
|
685
|
+
],
|
|
686
|
+
"owasp": [
|
|
687
|
+
"A03:2021"
|
|
688
|
+
],
|
|
689
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string interpolation.",
|
|
690
|
+
"status": "unverified"
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
"finding_id": "INJ-I-0022",
|
|
694
|
+
"category": "nosql_injection",
|
|
695
|
+
"subtype": "operator_injection",
|
|
696
|
+
"title": "NoSQL Injection in orders.js:21 via direct request body usage",
|
|
697
|
+
"candidate_id": "I-0022",
|
|
698
|
+
"location": {
|
|
699
|
+
"file": "node-express/routes/orders.js",
|
|
700
|
+
"start_line": 21
|
|
701
|
+
},
|
|
702
|
+
"evidence": [
|
|
703
|
+
{
|
|
704
|
+
"file": "node-express/routes/orders.js",
|
|
705
|
+
"line": 20,
|
|
706
|
+
"code": "db.collection('users').findOne(req.body, function (e, u) { res.json(!!u); });",
|
|
707
|
+
"why": "User input passed directly as filter object"
|
|
708
|
+
}
|
|
709
|
+
],
|
|
710
|
+
"data_flow": [
|
|
711
|
+
"req.body",
|
|
712
|
+
"filter object",
|
|
713
|
+
"findOne"
|
|
714
|
+
],
|
|
715
|
+
"attack_scenario": "A crafted req.body can inject operators like $ne or $gt to bypass filters or modify data.",
|
|
716
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
717
|
+
"severity": "critical",
|
|
718
|
+
"confidence": "high",
|
|
719
|
+
"cwe": [
|
|
720
|
+
"CWE-89"
|
|
721
|
+
],
|
|
722
|
+
"owasp": [
|
|
723
|
+
"A03:2021"
|
|
724
|
+
],
|
|
725
|
+
"recommendation": "Validate and sanitize the request body against a strict schema before passing to the database.",
|
|
726
|
+
"status": "unverified"
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
"finding_id": "INJ-I-0023",
|
|
730
|
+
"category": "nosql_injection",
|
|
731
|
+
"subtype": "operator_injection",
|
|
732
|
+
"title": "NoSQL Injection in orders.js:25 via $where with string concatenation",
|
|
733
|
+
"candidate_id": "I-0023",
|
|
734
|
+
"location": {
|
|
735
|
+
"file": "node-express/routes/orders.js",
|
|
736
|
+
"start_line": 25
|
|
737
|
+
},
|
|
738
|
+
"evidence": [
|
|
739
|
+
{
|
|
740
|
+
"file": "node-express/routes/orders.js",
|
|
741
|
+
"line": 24,
|
|
742
|
+
"code": "db.collection('items').find({ $where: \"this.name == '\" + req.query.n + \"'\" }).toArray(function (e, r) { res.json(r); });",
|
|
743
|
+
"why": "User input concatenated into $where string"
|
|
744
|
+
}
|
|
745
|
+
],
|
|
746
|
+
"data_flow": [
|
|
747
|
+
"req.query.n",
|
|
748
|
+
"$where string literal",
|
|
749
|
+
"find"
|
|
750
|
+
],
|
|
751
|
+
"attack_scenario": "A crafted n parameter can alter the JavaScript logic inside $where, potentially bypassing filters or modifying data.",
|
|
752
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
753
|
+
"severity": "critical",
|
|
754
|
+
"confidence": "high",
|
|
755
|
+
"cwe": [
|
|
756
|
+
"CWE-89"
|
|
757
|
+
],
|
|
758
|
+
"owasp": [
|
|
759
|
+
"A03:2021"
|
|
760
|
+
],
|
|
761
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
762
|
+
"status": "unverified"
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
"finding_id": "INJ-I-0024",
|
|
766
|
+
"category": "nosql_injection",
|
|
767
|
+
"subtype": "operator_injection",
|
|
768
|
+
"title": "NoSQL Injection in orders.js:29 via $where with template literal interpolation",
|
|
769
|
+
"candidate_id": "I-0024",
|
|
770
|
+
"location": {
|
|
771
|
+
"file": "perl-cgi/cgi-bin/order.cgi",
|
|
772
|
+
"start_line": 13
|
|
773
|
+
},
|
|
774
|
+
"evidence": [
|
|
775
|
+
{
|
|
776
|
+
"file": "node-express/routes/orders.js",
|
|
777
|
+
"line": 28,
|
|
778
|
+
"code": "db.query(`SELECT COUNT(*) AS n FROM orders WHERE shop_id = ${req.query.shop}`, function (e, r) { res.json(r); });",
|
|
779
|
+
"why": "User input interpolated into SQL string"
|
|
780
|
+
}
|
|
781
|
+
],
|
|
782
|
+
"data_flow": [
|
|
783
|
+
"req.query.shop",
|
|
784
|
+
"SQL string literal",
|
|
785
|
+
"db.query"
|
|
786
|
+
],
|
|
787
|
+
"attack_scenario": "A crafted shop parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
788
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
789
|
+
"severity": "critical",
|
|
790
|
+
"confidence": "high",
|
|
791
|
+
"cwe": [
|
|
792
|
+
"CWE-89"
|
|
793
|
+
],
|
|
794
|
+
"owasp": [
|
|
795
|
+
"A03:2021"
|
|
796
|
+
],
|
|
797
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string interpolation.",
|
|
798
|
+
"status": "unverified"
|
|
799
|
+
},
|
|
800
|
+
{
|
|
801
|
+
"finding_id": "INJ-I-0025",
|
|
802
|
+
"category": "sql_injection",
|
|
803
|
+
"subtype": "string_concatenation",
|
|
804
|
+
"title": "SQL Injection in order.cgi:13 via string concatenation",
|
|
805
|
+
"candidate_id": "I-0025",
|
|
806
|
+
"location": {
|
|
807
|
+
"file": "perl-cgi/cgi-bin/order.cgi",
|
|
808
|
+
"start_line": 19
|
|
809
|
+
},
|
|
810
|
+
"evidence": [
|
|
811
|
+
{
|
|
812
|
+
"file": "perl-cgi/cgi-bin/order.cgi",
|
|
813
|
+
"line": 11,
|
|
814
|
+
"code": "my $id = $q->param('id');",
|
|
815
|
+
"why": "User input source"
|
|
816
|
+
},
|
|
817
|
+
{
|
|
818
|
+
"file": "perl-cgi/cgi-bin/order.cgi",
|
|
819
|
+
"line": 13,
|
|
820
|
+
"code": "my $sth = $dbh->prepare(\"SELECT * FROM orders WHERE id = $id\");",
|
|
821
|
+
"why": "User input concatenated into SQL string"
|
|
822
|
+
}
|
|
823
|
+
],
|
|
824
|
+
"data_flow": [
|
|
825
|
+
"$q->param(id)",
|
|
826
|
+
"SQL string literal",
|
|
827
|
+
"prepare"
|
|
828
|
+
],
|
|
829
|
+
"attack_scenario": "A crafted id parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
830
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
831
|
+
"severity": "critical",
|
|
832
|
+
"confidence": "high",
|
|
833
|
+
"cwe": [
|
|
834
|
+
"CWE-89"
|
|
835
|
+
],
|
|
836
|
+
"owasp": [
|
|
837
|
+
"A03:2021"
|
|
838
|
+
],
|
|
839
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
840
|
+
"status": "unverified"
|
|
841
|
+
},
|
|
842
|
+
{
|
|
843
|
+
"finding_id": "INJ-I-0027",
|
|
844
|
+
"category": "sql_injection",
|
|
845
|
+
"subtype": "string_concatenation",
|
|
846
|
+
"title": "SQL Injection in admin.php:8 via string concatenation",
|
|
847
|
+
"candidate_id": "I-0027",
|
|
848
|
+
"location": {
|
|
849
|
+
"file": "php-plain/admin.php",
|
|
850
|
+
"start_line": 8
|
|
851
|
+
},
|
|
852
|
+
"evidence": [
|
|
853
|
+
{
|
|
854
|
+
"file": "php-plain/admin.php",
|
|
855
|
+
"line": 6,
|
|
856
|
+
"code": "$uid = (int)$_GET['uid'];",
|
|
857
|
+
"why": "User input source"
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
"file": "php-plain/admin.php",
|
|
861
|
+
"line": 8,
|
|
862
|
+
"code": "$r = mysql_query(\"SELECT * FROM users WHERE id = \" . $uid);",
|
|
863
|
+
"why": "User input concatenated into SQL string"
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
"file": "php-plain/admin.php",
|
|
867
|
+
"line": 12,
|
|
868
|
+
"code": "mysql_query(\"DELETE FROM users WHERE id = $id\");",
|
|
869
|
+
"why": "User input concatenated into SQL string"
|
|
870
|
+
}
|
|
871
|
+
],
|
|
872
|
+
"data_flow": [
|
|
873
|
+
"$_GET(uid)",
|
|
874
|
+
"$id (from $_POST)",
|
|
875
|
+
"SQL string literals",
|
|
876
|
+
"mysql_query"
|
|
877
|
+
],
|
|
878
|
+
"attack_scenario": "A crafted uid or id parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
879
|
+
"impact": "Read/Modify/Delete of database records; potential for arbitrary data access.",
|
|
880
|
+
"severity": "critical",
|
|
881
|
+
"confidence": "high",
|
|
882
|
+
"cwe": [
|
|
883
|
+
"CWE-89"
|
|
884
|
+
],
|
|
885
|
+
"owasp": [
|
|
886
|
+
"A03:2021"
|
|
887
|
+
],
|
|
888
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
889
|
+
"status": "unverified"
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"finding_id": "INJ-I-0028",
|
|
893
|
+
"category": "sql_injection",
|
|
894
|
+
"subtype": "string_concatenation",
|
|
895
|
+
"title": "SQL Injection in admin.php:12 via string concatenation",
|
|
896
|
+
"candidate_id": "I-0028",
|
|
897
|
+
"location": {
|
|
898
|
+
"file": "php-plain/admin.php",
|
|
899
|
+
"start_line": 12
|
|
900
|
+
},
|
|
901
|
+
"evidence": [
|
|
902
|
+
{
|
|
903
|
+
"file": "php-plain/admin.php",
|
|
904
|
+
"line": 6,
|
|
905
|
+
"code": "$uid = (int)$_GET['uid'];",
|
|
906
|
+
"why": "User input source"
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
"file": "php-plain/admin.php",
|
|
910
|
+
"line": 8,
|
|
911
|
+
"code": "$r = mysql_query(\"SELECT * FROM users WHERE id = \" . $uid);",
|
|
912
|
+
"why": "User input concatenated into SQL string"
|
|
913
|
+
},
|
|
914
|
+
{
|
|
915
|
+
"file": "php-plain/admin.php",
|
|
916
|
+
"line": 12,
|
|
917
|
+
"code": "mysql_query(\"DELETE FROM users WHERE id = $id\");",
|
|
918
|
+
"why": "User input concatenated into SQL string"
|
|
919
|
+
}
|
|
920
|
+
],
|
|
921
|
+
"data_flow": [
|
|
922
|
+
"$_GET(uid)",
|
|
923
|
+
"$id (from $_POST)",
|
|
924
|
+
"SQL string literals",
|
|
925
|
+
"mysql_query"
|
|
926
|
+
],
|
|
927
|
+
"attack_scenario": "A crafted uid or id parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
928
|
+
"impact": "Read/Modify/Delete of database records; potential for arbitrary data access.",
|
|
929
|
+
"severity": "critical",
|
|
930
|
+
"confidence": "high",
|
|
931
|
+
"cwe": [
|
|
932
|
+
"CWE-89"
|
|
933
|
+
],
|
|
934
|
+
"owasp": [
|
|
935
|
+
"A03:2021"
|
|
936
|
+
],
|
|
937
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
938
|
+
"status": "unverified"
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
"finding_id": "INJ-I-0029",
|
|
942
|
+
"category": "nosql_injection",
|
|
943
|
+
"subtype": "operator_injection",
|
|
944
|
+
"title": "NoSQL Injection in mongo_find.php:5 via direct request GET parameter usage",
|
|
945
|
+
"candidate_id": "I-0029",
|
|
946
|
+
"location": {
|
|
947
|
+
"file": "php-plain/mongo_find.php",
|
|
948
|
+
"start_line": 5
|
|
949
|
+
},
|
|
950
|
+
"evidence": [
|
|
951
|
+
{
|
|
952
|
+
"file": "php-plain/mongo_find.php",
|
|
953
|
+
"line": 4,
|
|
954
|
+
"code": "$doc = $coll->findOne(array('login' => $_GET['login'], 'pass' => $_GET['pass']));",
|
|
955
|
+
"why": "User input passed directly as filter object"
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
"file": "php-plain/mongo_find.php",
|
|
959
|
+
"line": 6,
|
|
960
|
+
"code": "$docs = $coll->find(array('$where' => \"this.name == '\" . $_GET['n'] . \"'\"));",
|
|
961
|
+
"why": "User input concatenated into $where string"
|
|
962
|
+
}
|
|
963
|
+
],
|
|
964
|
+
"data_flow": [
|
|
965
|
+
"$_GET(login)",
|
|
966
|
+
"$_GET(pass)",
|
|
967
|
+
"$_GET(n)",
|
|
968
|
+
"filter object / $where string literal",
|
|
969
|
+
"findOne / find"
|
|
970
|
+
],
|
|
971
|
+
"attack_scenario": "A crafted login, pass, or n parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
972
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
973
|
+
"severity": "critical",
|
|
974
|
+
"confidence": "high",
|
|
975
|
+
"cwe": [
|
|
976
|
+
"CWE-89"
|
|
977
|
+
],
|
|
978
|
+
"owasp": [
|
|
979
|
+
"A03:2021"
|
|
980
|
+
],
|
|
981
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
982
|
+
"status": "unverified"
|
|
983
|
+
},
|
|
984
|
+
{
|
|
985
|
+
"finding_id": "INJ-I-0030",
|
|
986
|
+
"category": "nosql_injection",
|
|
987
|
+
"subtype": "operator_injection",
|
|
988
|
+
"title": "NoSQL Injection in mongo_find.php:6 via $where with string concatenation",
|
|
989
|
+
"candidate_id": "I-0030",
|
|
990
|
+
"location": {
|
|
991
|
+
"file": "php-plain/mongo_find.php",
|
|
992
|
+
"start_line": 6
|
|
993
|
+
},
|
|
994
|
+
"evidence": [
|
|
995
|
+
{
|
|
996
|
+
"file": "php-plain/mongo_find.php",
|
|
997
|
+
"line": 4,
|
|
998
|
+
"code": "$doc = $coll->findOne(array('login' => $_GET['login'], 'pass' => $_GET['pass']));",
|
|
999
|
+
"why": "User input passed directly as filter object"
|
|
1000
|
+
},
|
|
1001
|
+
{
|
|
1002
|
+
"file": "php-plain/mongo_find.php",
|
|
1003
|
+
"line": 6,
|
|
1004
|
+
"code": "$docs = $coll->find(array('$where' => \"this.name == '\" . $_GET['n'] . \"'\"));",
|
|
1005
|
+
"why": "User input concatenated into $where string"
|
|
1006
|
+
}
|
|
1007
|
+
],
|
|
1008
|
+
"data_flow": [
|
|
1009
|
+
"$_GET(login)",
|
|
1010
|
+
"$_GET(pass)",
|
|
1011
|
+
"$_GET(n)",
|
|
1012
|
+
"filter object / $where string literal",
|
|
1013
|
+
"findOne / find"
|
|
1014
|
+
],
|
|
1015
|
+
"attack_scenario": "A crafted login, pass, or n parameter can alter the SQL logic, potentially bypassing filters or modifying unintended data.",
|
|
1016
|
+
"impact": "Read/Modify of database records; potential for arbitrary data access.",
|
|
1017
|
+
"severity": "critical",
|
|
1018
|
+
"confidence": "high",
|
|
1019
|
+
"cwe": [
|
|
1020
|
+
"CWE-89"
|
|
1021
|
+
],
|
|
1022
|
+
"owasp": [
|
|
1023
|
+
"A03:2021"
|
|
1024
|
+
],
|
|
1025
|
+
"recommendation": "Use parameterized queries or stored procedures instead of string concatenation.",
|
|
1026
|
+
"status": "unverified"
|
|
1027
|
+
}
|
|
1028
|
+
],
|
|
1029
|
+
"candidate_verdicts": [
|
|
1030
|
+
{
|
|
1031
|
+
"candidate_id": "I-0001",
|
|
1032
|
+
"verdict": "vulnerable"
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
"candidate_id": "I-0002",
|
|
1036
|
+
"verdict": "vulnerable"
|
|
1037
|
+
},
|
|
1038
|
+
{
|
|
1039
|
+
"candidate_id": "I-0003",
|
|
1040
|
+
"verdict": "vulnerable"
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
"candidate_id": "I-0004",
|
|
1044
|
+
"verdict": "vulnerable"
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"candidate_id": "I-0005",
|
|
1048
|
+
"verdict": "vulnerable"
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
"candidate_id": "I-0006",
|
|
1052
|
+
"verdict": "vulnerable"
|
|
1053
|
+
},
|
|
1054
|
+
{
|
|
1055
|
+
"candidate_id": "I-0007",
|
|
1056
|
+
"verdict": "vulnerable"
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
"candidate_id": "I-0009",
|
|
1060
|
+
"verdict": "vulnerable"
|
|
1061
|
+
},
|
|
1062
|
+
{
|
|
1063
|
+
"candidate_id": "I-0010",
|
|
1064
|
+
"verdict": "vulnerable"
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
"candidate_id": "I-0011",
|
|
1068
|
+
"verdict": "vulnerable"
|
|
1069
|
+
},
|
|
1070
|
+
{
|
|
1071
|
+
"candidate_id": "I-0012",
|
|
1072
|
+
"verdict": "vulnerable"
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
"candidate_id": "I-0016",
|
|
1076
|
+
"verdict": "vulnerable"
|
|
1077
|
+
},
|
|
1078
|
+
{
|
|
1079
|
+
"candidate_id": "I-0017",
|
|
1080
|
+
"verdict": "vulnerable"
|
|
1081
|
+
},
|
|
1082
|
+
{
|
|
1083
|
+
"candidate_id": "I-0020",
|
|
1084
|
+
"verdict": "vulnerable"
|
|
1085
|
+
},
|
|
1086
|
+
{
|
|
1087
|
+
"candidate_id": "I-0021",
|
|
1088
|
+
"verdict": "vulnerable"
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"candidate_id": "I-0022",
|
|
1092
|
+
"verdict": "vulnerable"
|
|
1093
|
+
},
|
|
1094
|
+
{
|
|
1095
|
+
"candidate_id": "I-0023",
|
|
1096
|
+
"verdict": "vulnerable"
|
|
1097
|
+
},
|
|
1098
|
+
{
|
|
1099
|
+
"candidate_id": "I-0024",
|
|
1100
|
+
"verdict": "vulnerable"
|
|
1101
|
+
},
|
|
1102
|
+
{
|
|
1103
|
+
"candidate_id": "I-0025",
|
|
1104
|
+
"verdict": "vulnerable"
|
|
1105
|
+
},
|
|
1106
|
+
{
|
|
1107
|
+
"candidate_id": "I-0027",
|
|
1108
|
+
"verdict": "vulnerable"
|
|
1109
|
+
},
|
|
1110
|
+
{
|
|
1111
|
+
"candidate_id": "I-0028",
|
|
1112
|
+
"verdict": "vulnerable"
|
|
1113
|
+
},
|
|
1114
|
+
{
|
|
1115
|
+
"candidate_id": "I-0029",
|
|
1116
|
+
"verdict": "vulnerable"
|
|
1117
|
+
},
|
|
1118
|
+
{
|
|
1119
|
+
"candidate_id": "I-0030",
|
|
1120
|
+
"verdict": "vulnerable"
|
|
1121
|
+
}
|
|
1122
|
+
]
|
|
1123
|
+
}
|