False positive - Log injection is not mitigated via replace with Regex argument in Kotlin
- 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ả
**Description of the false positive**
CodeQL is reporting a log injection vulnerability even though I am deleting the problematic characters with Kotlin's `replace` function call with a Regex as its first parameter.
Reading the query (https://github.com/github/codeql/blob/main/java/ql/lib/semmle/code/java/security/LogInjection.qll) I suspect that's because it searches for uses of `replace` with either Strings or Chars as arguments (in order to check for line break removal), but not uses of `replace` with Regex as its first argument (in Kotlin, there is no `replaceAll` function, there is only a `replace` that can accept either String, Char or Regex).
I have also looked at the tests (https://github.com/github/codeql/blob/main/java/ql/test/query-tests/security/CWE-117/LogInjectionTest.java) and that's why I belive this might be the reason, as the tests always use `replaceAll` when working with regular expressions (as it is a Java file).
**Code samples or links to source code**
```
private fun baseSanitize(param: String) = param.replace(Regex("[^a-zA-Z0-9_-]"), "")
private fun baseSanitize(param: String) = param.replace("[^a-zA-Z0-9_-]".toRegex(), "")
private fun baseSanitize(param: String) = param.replace("\\W".toRegex(), "")
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Đọc java/ql/lib/semmle/code/java/security/LogInjection.qll và các bài kiểm thử hồi quy trong java/ql/test/query-tests/security/CWE-117/LogInjectionTest.java, tập trung vào cách các lệnh gọi replace và replaceAll được xử lý. Thêm coverage cho các ví dụ replace của Kotlin Regex để query không còn báo cáo chúng là log injection, sau đó chạy các query test của LogInjectionTest.java.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- kotlin
- Lĩnh vực
- security
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100