Skip to content

Commit 33f4fff

Browse files
committed
Ruby: Simplify sub!/gsub! sanitizers for cleartext logging query
1 parent d55ba25 commit 33f4fff

File tree

1 file changed

+7
-16
lines changed

1 file changed

+7
-16
lines changed

ruby/ql/lib/codeql/ruby/security/CleartextLoggingCustomizations.qll

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -70,23 +70,14 @@ module CleartextLogging {
7070
}
7171

7272
/**
73-
* A node sanitized by a prior call to `sub!` or `gsub!`,
74-
* e.g. the `password` argument to `info` in:
75-
* ```
76-
* password = "changeme"
77-
* password.sub!(/.+/, "")
78-
* Logger.new(STDOUT).info password
79-
* ```
73+
* Like `MaskingReplacerSanitizer` but updates the receiver for methods that
74+
* sanitize the receiver.
75+
* Taint is thereby cleared for any subsequent read.
8076
*/
81-
private class MaskingReplacerSanitizedNode extends Sanitizer {
82-
MaskingReplacerSanitizedNode() {
83-
exists(Ssa::Definition def |
84-
exists(MaskingReplacerSanitizer maskCall |
85-
maskCall.getMethodName() = ["sub!", "gsub!"] and
86-
def.hasAdjacentReads(maskCall.getReceiver().asExpr(), this.asExpr())
87-
)
88-
or
89-
def.hasAdjacentReads(any(MaskingReplacerSanitizedNode read).asExpr(), this.asExpr())
77+
private class InPlaceMaskingReplacerSanitizer extends Sanitizer {
78+
InPlaceMaskingReplacerSanitizer() {
79+
exists(MaskingReplacerSanitizer m | m.getMethodName() = ["gsub!", "sub!"] |
80+
m.getReceiver() = this
9081
)
9182
}
9283
}

0 commit comments

Comments
 (0)