Skip to content

Go: go/log-injection produces false positives for logrus when sanitising formatters are used #11657

Open
@mbg

Description

@mbg

Description of the false positive

The go/log-injection (CWE-117) query identifies log entries that are created from user input without proper sanitisation. The logrus library is vulnerable to this when the default output formatter is used. However, different output formatters, such as JSONFormatter, may sanitise log entries themselves. The go/log-injection query is not currently aware of this behaviour and will report false positives whenever logrus is used for logging and log entries are based on unsanitised user data, even if a sanitising output formatter is used.

Code samples or links to source code

In the following example, go/log-injection will report that the log entry constructed using logrus.Fields depends on a user-provided value that has not been sanitised:

func example(req *http.Request, ctx *goproxy.ProxyCtx) {
	username := req.URL.Query()["username"][0]
	logrus.SetFormatter(&logrus.JSONFormatter{})
	logrus.WithFields(logrus.Fields{
		"USERNAME": username,
	})
}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions