github / github/codeql

Taint Tracking to a LocalVariable

Open
#16,438 2 comments 0 reactions 1 assignee Claimed by @MathiasVP View on GitHub
C++ question
Dominant language
CodeQL
Stars
10.1k
Forks
2.1k
Avg merge
2d 15h
Merged PRs (30d)
141

Description

Hello,

I'm trying my query on a simple code before moving to my main codebase. Basically, I would like to track all the local taints from all the function arguments to the LocalVariables in that function. This is the simplest version but eventually I want to find all such taints that are coming from an assignment in a loop.

Here's my simple C code:

```
#include
#include

void call1(char* in) {
char buff[10];
char a;
a = in[3];
for (int i = 0; i < 10; i++) {
buff[i] = in[i];
}
printf("%s\n", buff);
}

int main() {
char *input = "Hello!!!!";
call1(input);
return 0;
}
```
Here's my simple CodeQL query:
```
from DataFlow::Node source, DataFlow::Node sink, LocalVariable lv, Function f
where
f.getAParameter() = source.asParameter() and
lv.getAnAccess() = sink.asExpr() and
lv.getFunction() = f and
TaintTracking::localTaint(source, sink)
select source, sink
```
I want to find the following taints:
in -> buff, in -> a

For now the query returns nothing. But if I comment the `TaintTracking::localTaint(source, sink)` line it would return the following:
```
Result set: edges
| a | b |
+---+---+

Result set: nodes
| n | key | val |
+---+-----+-----+

Result set: subpaths
| arg | par | ret | out |
+-----+-----+-----+-----+

Result set: #select
| source | sink |
+--------+------+
| in | a |
| in | i |
| in | i |
| in | buff |
| in | i |
| in | i |
| in | buff |
```
I'm not really sure why this happens and if I should probably define an additional taint step. I'd appreciate any help.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.