Skip to content

Instantly share code, notes, and snippets.

@conikeec
Created December 17, 2019 07:14
Show Gist options
  • Save conikeec/f0b0092aa105600199e7dd536e48d02d to your computer and use it in GitHub Desktop.
Save conikeec/f0b0092aa105600199e7dd536e48d02d to your computer and use it in GitHub Desktop.
GitHub's password reset flaw emulation
//define the source function and attacker controlled vector (which is the email address parameter)
val source = cpg.method.fullNameExact("org.baeldung.web.controller.RegistrationController.resetPasswordBad:org.baeldung.web.util.GenericResponse(javax.servlet.http.HttpServletRequest,java.lang.String)").parameter.evalType("java.lang.String")
//define email channel sink function name
val EMAIL_CHANNEL_SINK="org.springframework.mail.javamail.JavaMailSender.send:void(org.springframework.mail.SimpleMailMessage)"
//define the sink function that participates in the data flow
val sink = cpg.method.fullNameExact(EMAIL_CHANNEL_SINK).parameter.evalType("java.lang.String")
// Verify BUSINESS LOGIC FLAW check to determine if attack controller vector (email) is used in emailSend function, rather than the registered user email (determined after fetch from DB in step #1)
sink.reachableBy(source).flows.p
//results
res58: List[String] = List(
""" __________________________________________________________________________________________________________________________________________________________________
| tracked | lineNumber| method | file |
|=================================================================================================================================================================|
| userEmail | 134 | resetPasswordBad | org/baeldung/web/controller/RegistrationController.java|
| userEmail | 139 | resetPasswordBad | org/baeldung/web/controller/RegistrationController.java|
| userEmail | 198 | constructResetTokenEmailBad| org/baeldung/web/controller/RegistrationController.java|
| userEmail | 201 | constructResetTokenEmailBad| org/baeldung/web/controller/RegistrationController.java|
| userEmail | 213 | constructEmailBad | org/baeldung/web/controller/RegistrationController.java|
| userEmail | 217 | constructEmailBad | org/baeldung/web/controller/RegistrationController.java|
| param0 | N/A | setTo | org/springframework/mail/SimpleMailMessage.java |
| this | N/A | setTo | org/springframework/mail/SimpleMailMessage.java |
| email | 217 | constructEmailBad | org/baeldung/web/controller/RegistrationController.java|
| email | 218 | constructEmailBad | org/baeldung/web/controller/RegistrationController.java|
| this | N/A | setFrom | org/springframework/mail/SimpleMailMessage.java |
| this | N/A | setFrom | org/springframework/mail/SimpleMailMessage.java |
| email | 218 | constructEmailBad | org/baeldung/web/controller/RegistrationController.java|
| email | 219 | constructEmailBad | org/baeldung/web/controller/RegistrationController.java|
| ret | 213 | constructEmailBad | org/baeldung/web/controller/RegistrationController.java|
| this.constructEmailBad("Reset Password",$r11,userEmail) | 201 | constructResetTokenEmailBad| org/baeldung/web/controller/RegistrationController.java|
| param1 | N/A | <operator>.assignment | N/A |
| param0 | N/A | <operator>.assignment | N/A |
| $r12 | 201 | constructResetTokenEmailBad| org/baeldung/web/controller/RegistrationController.java|
| $r12 | 201 | constructResetTokenEmailBad| org/baeldung/web/controller/RegistrationController.java|
| ret | 198 | constructResetTokenEmailBad| org/baeldung/web/controller/RegistrationController.java|
| this.constructResetTokenEmailBad($r9,$r10,token,$l0,userEmail)| 139 | resetPasswordBad | org/baeldung/web/controller/RegistrationController.java|
| param1 | N/A | <operator>.assignment | N/A |
| param0 | N/A | <operator>.assignment | N/A |
| $r12 | 139 | resetPasswordBad | org/baeldung/web/controller/RegistrationController.java|
| $r12 | 139 | resetPasswordBad | org/baeldung/web/controller/RegistrationController.java|
| param0 | N/A | send | org/springframework/mail/javamail/JavaMailSender.java |
"""
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment