github / github/codeql

Taint Tracking to a LocalVariable

Đang mở
#16,438 2 bình luận 0 reaction 1 người được giao Được @MathiasVP nhận Xem trên GitHub
C++ question
Ngôn ngữ chính
CodeQL
Star
10.1k
Fork
2.1k
Merge trung bình
2 ngày 15 giờ
Pull request đã merge (30 ngày)
141

Mô tả

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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.