Taint Tracking to a LocalVariable
- Lingua principale
- CodeQL
- Stelle
- 10.1k
- Fork
- 2.1k
- Merge medio
- 2g 15h
- PR unite (30g)
- 141
Descrizione
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.
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.