File tree Expand file tree Collapse file tree 3 files changed +44
-0
lines changed
java/ql/src/semmle/code/java Expand file tree Collapse file tree 3 files changed +44
-0
lines changed Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ import semmle.code.java.frameworks.android.WebView
1717import semmle.code.java.frameworks.JaxWS
1818import semmle.code.java.frameworks.android.Intent
1919import semmle.code.java.frameworks.SpringWeb
20+ import semmle.code.java.frameworks.Guice
2021
2122/** Class for `tainted` user input. */
2223abstract class UserInput extends DataFlow:: Node { }
@@ -69,6 +70,11 @@ class RemoteUserInput extends UserInput {
6970 )
7071 or
7172 this .asParameter ( ) .getAnAnnotation ( ) instanceof SpringServletInputAnnotation
73+ or
74+ exists ( GuiceRequestParametersAnnotation a |
75+ a = this .asParameter ( ) .getAnAnnotation ( ) or
76+ a = this .asExpr ( ) .( FieldRead ) .getField ( ) .getAnAnnotation ( )
77+ )
7278 }
7379
7480 /**
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ private import DefUse
1212private import semmle.code.java.security.SecurityTests
1313private import semmle.code.java.security.Validation
1414private import semmle.code.java.frameworks.android.Intent
15+ private import semmle.code.java.frameworks.Guice
1516private import semmle.code.java.Maps
1617
1718module TaintTracking {
@@ -471,6 +472,8 @@ module TaintTracking {
471472 or
472473 m .getDeclaringType ( ) .hasQualifiedName ( "java.nio" , "ByteBuffer" ) and
473474 m .hasName ( "get" )
475+ or
476+ m = any ( GuiceProvider gp ) .getAnOverridingGetMethod ( )
474477 }
475478
476479 private class StringReplaceMethod extends Method {
Original file line number Diff line number Diff line change 1+ /**
2+ * Provides classes and predicates for working with the Guice framework.
3+ */
4+
5+ import java
6+
7+ /**
8+ * A `@com.google.inject.servlet.RequestParameters` annotation.
9+ */
10+ class GuiceRequestParametersAnnotation extends Annotation {
11+ GuiceRequestParametersAnnotation ( ) {
12+ this .getType ( ) .hasQualifiedName ( "com.google.inject.servlet" , "RequestParameters" )
13+ }
14+ }
15+
16+ /**
17+ * The interface `com.google.inject.Provider`.
18+ */
19+ class GuiceProvider extends Interface {
20+ GuiceProvider ( ) { this .hasQualifiedName ( "com.google.inject" , "Provider" ) }
21+
22+ /**
23+ * The method named `get` declared on the interface `com.google.inject.Provider`.
24+ */
25+ Method getGetMethod ( ) {
26+ result .getDeclaringType ( ) = this and result .getName ( ) = "get" and result .hasNoParameters ( )
27+ }
28+
29+ /**
30+ * A method that overrides the `get` method on the interface `com.google.inject.Provider`.
31+ */
32+ Method getAnOverridingGetMethod ( ) {
33+ exists ( Method m | m .getSourceDeclaration ( ) = getGetMethod ( ) | result .overrides * ( m ) )
34+ }
35+ }
You can’t perform that action at this time.
0 commit comments