-
Notifications
You must be signed in to change notification settings - Fork 2
Separate CAP from non-CAP alerts #96
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
nodes | ||
| cqlinjection.js:7:34:7:36 | req | | ||
| cqlinjection.js:7:34:7:36 | req | | ||
| cqlinjection.js:8:13:8:30 | { book, quantity } | | ||
| cqlinjection.js:8:13:8:41 | book | | ||
| cqlinjection.js:8:15:8:18 | book | | ||
| cqlinjection.js:8:34:8:36 | req | | ||
| cqlinjection.js:8:34:8:41 | req.data | | ||
| cqlinjection.js:12:11:12:56 | query | | ||
| cqlinjection.js:12:19:12:56 | SELECT. ... book}`) | | ||
| cqlinjection.js:12:44:12:55 | `ID=${book}` | | ||
| cqlinjection.js:12:50:12:53 | book | | ||
| cqlinjection.js:13:36:13:40 | query | | ||
| cqlinjection.js:13:36:13:40 | query | | ||
| cqlinjection.js:15:27:15:64 | SELECT. ... book}`) | | ||
| cqlinjection.js:15:27:15:64 | SELECT. ... book}`) | | ||
| cqlinjection.js:15:52:15:63 | `ID=${book}` | | ||
| cqlinjection.js:15:58:15:61 | book | | ||
| cqlinjection.js:17:11:17:57 | query2 | | ||
| cqlinjection.js:17:20:17:57 | SELECT. ... + book) | | ||
| cqlinjection.js:17:45:17:56 | 'ID=' + book | | ||
| cqlinjection.js:17:53:17:56 | book | | ||
| cqlinjection.js:18:37:18:42 | query2 | | ||
| cqlinjection.js:18:37:18:42 | query2 | | ||
| cqlinjection.js:20:27:20:64 | SELECT. ... + book) | | ||
| cqlinjection.js:20:27:20:64 | SELECT. ... + book) | | ||
| cqlinjection.js:20:52:20:63 | 'ID=' + book | | ||
| cqlinjection.js:20:60:20:63 | book | | ||
| cqlinjection.js:27:11:27:62 | cqn | | ||
| cqlinjection.js:27:17:27:62 | CQL`SEL ... + book | | ||
| cqlinjection.js:27:59:27:62 | book | | ||
| cqlinjection.js:28:39:28:41 | cqn | | ||
| cqlinjection.js:28:39:28:41 | cqn | | ||
| cqlinjection.js:30:11:30:60 | cqn1 | | ||
| cqlinjection.js:30:18:30:60 | cds.par ... + book) | | ||
| cqlinjection.js:30:32:30:59 | `SELECT ... + book | | ||
| cqlinjection.js:30:56:30:59 | book | | ||
| cqlinjection.js:31:39:31:42 | cqn1 | | ||
| cqlinjection.js:31:39:31:42 | cqn1 | | ||
edges | ||
| cqlinjection.js:7:34:7:36 | req | cqlinjection.js:8:34:8:36 | req | | ||
| cqlinjection.js:7:34:7:36 | req | cqlinjection.js:8:34:8:36 | req | | ||
| cqlinjection.js:8:13:8:30 | { book, quantity } | cqlinjection.js:8:15:8:18 | book | | ||
| cqlinjection.js:8:13:8:41 | book | cqlinjection.js:12:50:12:53 | book | | ||
| cqlinjection.js:8:13:8:41 | book | cqlinjection.js:15:58:15:61 | book | | ||
| cqlinjection.js:8:13:8:41 | book | cqlinjection.js:17:53:17:56 | book | | ||
| cqlinjection.js:8:13:8:41 | book | cqlinjection.js:20:60:20:63 | book | | ||
| cqlinjection.js:8:13:8:41 | book | cqlinjection.js:27:59:27:62 | book | | ||
| cqlinjection.js:8:13:8:41 | book | cqlinjection.js:30:56:30:59 | book | | ||
| cqlinjection.js:8:15:8:18 | book | cqlinjection.js:8:13:8:41 | book | | ||
| cqlinjection.js:8:34:8:36 | req | cqlinjection.js:8:34:8:41 | req.data | | ||
| cqlinjection.js:8:34:8:41 | req.data | cqlinjection.js:8:13:8:30 | { book, quantity } | | ||
| cqlinjection.js:12:11:12:56 | query | cqlinjection.js:13:36:13:40 | query | | ||
| cqlinjection.js:12:11:12:56 | query | cqlinjection.js:13:36:13:40 | query | | ||
| cqlinjection.js:12:19:12:56 | SELECT. ... book}`) | cqlinjection.js:12:11:12:56 | query | | ||
| cqlinjection.js:12:44:12:55 | `ID=${book}` | cqlinjection.js:12:19:12:56 | SELECT. ... book}`) | | ||
| cqlinjection.js:12:50:12:53 | book | cqlinjection.js:12:44:12:55 | `ID=${book}` | | ||
| cqlinjection.js:15:52:15:63 | `ID=${book}` | cqlinjection.js:15:27:15:64 | SELECT. ... book}`) | | ||
| cqlinjection.js:15:52:15:63 | `ID=${book}` | cqlinjection.js:15:27:15:64 | SELECT. ... book}`) | | ||
| cqlinjection.js:15:58:15:61 | book | cqlinjection.js:15:52:15:63 | `ID=${book}` | | ||
| cqlinjection.js:17:11:17:57 | query2 | cqlinjection.js:18:37:18:42 | query2 | | ||
| cqlinjection.js:17:11:17:57 | query2 | cqlinjection.js:18:37:18:42 | query2 | | ||
| cqlinjection.js:17:20:17:57 | SELECT. ... + book) | cqlinjection.js:17:11:17:57 | query2 | | ||
| cqlinjection.js:17:45:17:56 | 'ID=' + book | cqlinjection.js:17:20:17:57 | SELECT. ... + book) | | ||
| cqlinjection.js:17:53:17:56 | book | cqlinjection.js:17:45:17:56 | 'ID=' + book | | ||
| cqlinjection.js:20:52:20:63 | 'ID=' + book | cqlinjection.js:20:27:20:64 | SELECT. ... + book) | | ||
| cqlinjection.js:20:52:20:63 | 'ID=' + book | cqlinjection.js:20:27:20:64 | SELECT. ... + book) | | ||
| cqlinjection.js:20:60:20:63 | book | cqlinjection.js:20:52:20:63 | 'ID=' + book | | ||
| cqlinjection.js:27:11:27:62 | cqn | cqlinjection.js:28:39:28:41 | cqn | | ||
| cqlinjection.js:27:11:27:62 | cqn | cqlinjection.js:28:39:28:41 | cqn | | ||
| cqlinjection.js:27:17:27:62 | CQL`SEL ... + book | cqlinjection.js:27:11:27:62 | cqn | | ||
| cqlinjection.js:27:59:27:62 | book | cqlinjection.js:27:17:27:62 | CQL`SEL ... + book | | ||
| cqlinjection.js:30:11:30:60 | cqn1 | cqlinjection.js:31:39:31:42 | cqn1 | | ||
| cqlinjection.js:30:11:30:60 | cqn1 | cqlinjection.js:31:39:31:42 | cqn1 | | ||
| cqlinjection.js:30:18:30:60 | cds.par ... + book) | cqlinjection.js:30:11:30:60 | cqn1 | | ||
| cqlinjection.js:30:32:30:59 | `SELECT ... + book | cqlinjection.js:30:18:30:60 | cds.par ... + book) | | ||
| cqlinjection.js:30:56:30:59 | book | cqlinjection.js:30:32:30:59 | `SELECT ... + book | | ||
#select | ||
| cqlinjection.js:13:36:13:40 | query | cqlinjection.js:7:34:7:36 | req | cqlinjection.js:13:36:13:40 | query | This query depends on a $@. | cqlinjection.js:7:34:7:36 | req | user-provided value | | ||
| cqlinjection.js:15:27:15:64 | SELECT. ... book}`) | cqlinjection.js:7:34:7:36 | req | cqlinjection.js:15:27:15:64 | SELECT. ... book}`) | This query depends on a $@. | cqlinjection.js:7:34:7:36 | req | user-provided value | | ||
| cqlinjection.js:18:37:18:42 | query2 | cqlinjection.js:7:34:7:36 | req | cqlinjection.js:18:37:18:42 | query2 | This query depends on a $@. | cqlinjection.js:7:34:7:36 | req | user-provided value | | ||
| cqlinjection.js:20:27:20:64 | SELECT. ... + book) | cqlinjection.js:7:34:7:36 | req | cqlinjection.js:20:27:20:64 | SELECT. ... + book) | This query depends on a $@. | cqlinjection.js:7:34:7:36 | req | user-provided value | | ||
| cqlinjection.js:28:39:28:41 | cqn | cqlinjection.js:7:34:7:36 | req | cqlinjection.js:28:39:28:41 | cqn | This query depends on a $@. | cqlinjection.js:7:34:7:36 | req | user-provided value | | ||
| cqlinjection.js:31:39:31:42 | cqn1 | cqlinjection.js:7:34:7:36 | req | cqlinjection.js:31:39:31:42 | cqn1 | This query depends on a $@. | cqlinjection.js:7:34:7:36 | req | user-provided value | |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
import cds from '@sap/cds' | ||
const { Books } = cds.entities('sap.capire.bookshop') | ||
|
||
class SampleVulnService extends cds.ApplicationService { | ||
init() { | ||
// contains a sample CQL injection | ||
this.on('submitOrder', async req => { | ||
const { book, quantity } = req.data | ||
|
||
let { stock } = await SELECT`stock`.from(Books, book) | ||
|
||
let query = SELECT.from`Books`.where(`ID=${book}`) | ||
let books = await cds.db.run(query) // CQL injection alert | ||
|
||
let books11 = await SELECT.from`Books`.where(`ID=${book}`) // CQL injection alert | ||
Check failureCode scanning / CodeQL CQL query built from user-controlled sources
This query depends on a [user-provided value](1).
|
||
|
||
let query2 = SELECT.from`Books`.where('ID=' + book) | ||
let books2 = await cds.db.run(query2) // CQL injection alert | ||
Check failureCode scanning / CodeQL CQL query built from user-controlled sources
This query depends on a [user-provided value](1).
|
||
|
||
let books22 = await SELECT.from`Books`.where('ID=' + book) // CQL injection alert | ||
Check failureCode scanning / CodeQL CQL query built from user-controlled sources
This query depends on a [user-provided value](1).
|
||
|
||
let books3 = await SELECT.from`Books`.where`ID=${book}` //safe | ||
|
||
let id = 2 | ||
let books33 = await SELECT.from`Books`.where('ID=' + id) //safe | ||
|
||
let cqn = CQL`SELECT col1, col2, col3 from Books` + book | ||
let books222 = await cds.db.run(cqn) // CQL injection alert | ||
Check failureCode scanning / CodeQL CQL query built from user-controlled sources
This query depends on a [user-provided value](1).
|
||
|
||
let cqn1 = cds.parse.cql(`SELECT * from Books` + book) | ||
let books111 = await cds.db.run(cqn1) // CQL injection alert | ||
Check failureCode scanning / CodeQL CQL query built from user-controlled sources
This query depends on a [user-provided value](1).
|
||
|
||
const pg = require("pg"), | ||
pool = new pg.Pool(config); | ||
pool.query(req.params.category, [], function (err, results) { // non-CQL injection alert from CAP source | ||
// process results | ||
}); | ||
|
||
const app = require("express")(); | ||
app.get("search", function handler(req2, res) { | ||
pool.query(req2.params.category, [], function (err, results) { // non-CQL injection alert from non-CAP source | ||
Check failureCode scanning / CodeQL Database query built from user-controlled sources
This query string depends on a [user-provided value](1).
|
||
// process results | ||
}); | ||
}); | ||
Comment on lines
+40
to
+44
Check failureCode scanning / CodeQL Missing rate limiting
This route handler performs [a database access](1), but is not rate-limited.
|
||
|
||
return super.init() | ||
}) | ||
} | ||
} | ||
export { SampleVulnService } |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
cqlinjection/CqlInjection.ql |
Check failure
Code scanning / CodeQL
CQL query built from user-controlled sources