Skip to content

Commit 9842d1d

Browse files
committed
Added test cases for global usage of firebase and with Promise.all
1 parent 34dfa3d commit 9842d1d

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
| firebase-server.js:33:25:33:44 | statusSnapshot.val() | firebase-server.js:33:25:33:44 | statusSnapshot.val() | firebase-server.js:33:25:33:44 | statusSnapshot.val() | This code execution depends on a $@. | firebase-server.js:33:25:33:44 | statusSnapshot.val() | user-provided value |
4141
| firebase-server.js:44:12:44:30 | childSnapshot.val() | firebase-server.js:44:12:44:30 | childSnapshot.val() | firebase-server.js:44:12:44:30 | childSnapshot.val() | This code execution depends on a $@. | firebase-server.js:44:12:44:30 | childSnapshot.val() | user-provided value |
4242
| firebase-server.js:55:10:55:19 | snap.val() | firebase-server.js:55:10:55:19 | snap.val() | firebase-server.js:55:10:55:19 | snap.val() | This code execution depends on a $@. | firebase-server.js:55:10:55:19 | snap.val() | user-provided value |
43+
| firebase-server.js:70:12:70:21 | snap.val() | firebase-server.js:70:12:70:21 | snap.val() | firebase-server.js:70:12:70:21 | snap.val() | This code execution depends on a $@. | firebase-server.js:70:12:70:21 | snap.val() | user-provided value |
4344
| module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | This code execution depends on a $@. | module.js:9:16:9:29 | req.query.code | user-provided value |
4445
| module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value |
4546
| react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value |
@@ -170,6 +171,7 @@ nodes
170171
| firebase-server.js:33:25:33:44 | statusSnapshot.val() | semmle.label | statusSnapshot.val() |
171172
| firebase-server.js:44:12:44:30 | childSnapshot.val() | semmle.label | childSnapshot.val() |
172173
| firebase-server.js:55:10:55:19 | snap.val() | semmle.label | snap.val() |
174+
| firebase-server.js:70:12:70:21 | snap.val() | semmle.label | snap.val() |
173175
| module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code |
174176
| module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code |
175177
| react-native.js:7:7:7:33 | tainted | semmle.label | tainted |

javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/firebase-server.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,19 @@ async function fun3(uid, postId, size) {
5454
const snap = await imageUrlRef.once('value');
5555
eval(snap.val()); // $ Alert[js/code-injection]
5656
}
57+
58+
exports.sendFollowerNotification = functions.database.ref('/followers/{followedUid}/{followerUid}').onWrite(async (change, context) => {
59+
const followerUid = context.params.followerUid;
60+
const followedUid = context.params.followedUid;
61+
const getDeviceTokensPromise = admin.database().ref(`/users/${followedUid}/notificationTokens`).once('value');
62+
63+
const getFollowerProfilePromise = admin.auth().getUser(followerUid);
64+
65+
const results = await Promise.all([getDeviceTokensPromise, getFollowerProfilePromise]);
66+
let tokensSnapshot = results[0];
67+
const follower = results[1];
68+
eval(tokensSnapshot.val()); // $ MISSING: Alert[js/code-injection]
69+
let snap = await getDeviceTokensPromise;
70+
eval(snap.val()); // $ Alert[js/code-injection]
71+
return follower;
72+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function globalFirebaseUsage() {
2+
var usersRef = firebase.database().ref('users');
3+
usersRef.on('child_added', function(snapshot) {
4+
eval(snapshot.val()); // $ MISSING: Alert[js/code-injection]
5+
var followUserRef = firebase.database().ref('followers/' + uid + '/' + this.currentUid);
6+
7+
followUserRef.on('value', function(followSnapshot) {
8+
eval(followSnapshot.val()); // $ MISSING: Alert[js/code-injection]
9+
});
10+
});
11+
};

0 commit comments

Comments
 (0)