@@ -40,11 +40,111 @@ private module JsonWebToken {
4040 }
4141
4242 /**
43- * The private key for a JWT as a `CredentialsNode`.
43+ * The secret or PrivateKey for a JWT as a `CredentialsNode`.
4444 */
4545 private class JwtKey extends CredentialsNode {
46- JwtKey ( ) { this = DataFlow:: moduleMember ( "jsonwebtoken" , "sign" ) .getACall ( ) .getArgument ( 1 ) }
46+ JwtKey ( ) {
47+ this =
48+ API:: moduleImport ( "jsonwebtoken" ) .getMember ( [ "sign" , "verify" ] ) .getParameter ( 1 ) .asSink ( )
49+ }
50+
51+ override string getCredentialsKind ( ) { result = "jwt key" }
52+ }
53+ }
54+
55+ /**
56+ * Provides classes and predicates modeling the `jose` library.
57+ */
58+ private module Jose {
59+ /**
60+ * The asymmetric key or symmetric secret for verifying a JWT as a `CredentialsNode`.
61+ */
62+ private class JwtVerifyKey extends CredentialsNode {
63+ JwtVerifyKey ( ) {
64+ this = API:: moduleImport ( "jose" ) .getMember ( "jwtVerify" ) .getParameter ( 1 ) .asSink ( )
65+ }
66+
67+ override string getCredentialsKind ( ) { result = "jwt key" }
68+ }
69+ }
70+
71+ /**
72+ * Provides classes and predicates modeling the `jwt-simple` library.
73+ */
74+ private module JwtSimple {
75+ /**
76+ * The asymmetric key or symmetric secret for a JWT as a `CredentialsNode`.
77+ */
78+ private class JwtKey extends CredentialsNode {
79+ JwtKey ( ) { this = API:: moduleImport ( "jwt-simple" ) .getMember ( "decode" ) .getParameter ( 1 ) .asSink ( ) }
80+
81+ override string getCredentialsKind ( ) { result = "jwt key" }
82+ }
83+ }
84+
85+ /**
86+ * Provides classes and predicates modeling the `koa-jwt` library.
87+ */
88+ private module KoaJwt {
89+ /**
90+ * The shared secret for a JWT as a `CredentialsNode`.
91+ */
92+ private class SharedSecret extends CredentialsNode {
93+ SharedSecret ( ) {
94+ this = API:: moduleImport ( "koa-jwt" ) .getParameter ( 0 ) .getMember ( "secret" ) .asSink ( )
95+ }
96+
97+ override string getCredentialsKind ( ) { result = "jwt key" }
98+ }
99+ }
100+
101+ /**
102+ * Provides classes and predicates modeling the `express-jwt` library.
103+ */
104+ private module ExpressJwt {
105+ /**
106+ * The shared secret for a JWT as a `CredentialsNode`.
107+ */
108+ private class SharedSecret extends CredentialsNode {
109+ SharedSecret ( ) {
110+ this =
111+ API:: moduleImport ( "express-jwt" )
112+ .getMember ( "expressjwt" )
113+ .getParameter ( 0 )
114+ .getMember ( "secret" )
115+ .asSink ( )
116+ }
117+
118+ override string getCredentialsKind ( ) { result = "jwt key" }
119+ }
120+ }
121+
122+ /**
123+ * Provides classes and predicates modeling the `passport-jwt` library.
124+ */
125+ private module PassportJwt {
126+ /**
127+ * The secret (symmetric) or PEM-encoded public key (asymmetric) for a JWT as a `CredentialsNode`.
128+ */
129+ private class JwtKey extends CredentialsNode {
130+ JwtKey ( ) {
131+ this =
132+ API:: moduleImport ( "passport-jwt" )
133+ .getMember ( "Strategy" )
134+ .getParameter ( 0 )
135+ .getMember ( "secretOrKey" )
136+ .asSink ( )
137+ or
138+ this =
139+ API:: moduleImport ( "passport-jwt" )
140+ .getMember ( "Strategy" )
141+ .getParameter ( 0 )
142+ .getMember ( "secretOrKeyProvider" )
143+ .getParameter ( 2 )
144+ .getParameter ( 1 )
145+ .asSink ( )
146+ }
47147
48- override string getCredentialsKind ( ) { result = "key" }
148+ override string getCredentialsKind ( ) { result = "jwt key" }
49149 }
50150}
0 commit comments