github / github/codeql

False positive - Log injection is not mitigated via replace with Regex argument in Kotlin

Open
#17,423 1 comment 0 reactions 0 assignees View on GitHub
false-positive Kotlin
Dominant language
CodeQL
Stars
10.1k
Forks
2.1k
Avg merge
2d 15h
Merged PRs (30d)
141

Description

**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(), "")
```

Contributor guide

Open the contributing guide

Research direction

Read java/ql/lib/semmle/code/java/security/LogInjection.qll and the regression tests in java/ql/test/query-tests/security/CWE-117/LogInjectionTest.java, focusing on how replace and replaceAll calls are handled. Add coverage for the Kotlin Regex replace examples so the query no longer reports them as log injection, then run the LogInjectionTest.java query tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
kotlin
Domain
security
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.