The product uses a protection mechanism that relies on the existence or values of a cookie, but it does not properly ensure that the cookie is valid for the associated user.
Attackers can easily modify cookies, within the browser or by implementing the client-side code outside of the browser. Attackers can bypass protection mechanisms such as authorization and authentication by modifying the cookie to contain an expected value.
Threat Mapped score: 0.0
Industry: Finiancial
Threat priority: Unclassified
CVE: CVE-2009-1549
Attacker can bypass authentication by setting a cookie to a specific value.
CVE: CVE-2009-1619
Attacker can bypass authentication and gain admin privileges by setting an "admin" cookie to 1.
CVE: CVE-2009-0864
Content management system allows admin privileges by setting a "login" cookie to "OK."
CVE: CVE-2008-5784
e-dating application allows admin privileges by setting the admin cookie to 1.
CVE: CVE-2008-6291
Web-based email list manager allows attackers to gain admin privileges by setting a login cookie to "admin."
N/A
N/A
Phase | Note |
---|---|
Implementation | N/A |
Intro: The following code excerpt reads a value from a browser cookie to determine the role of the user.
Cookie[] cookies = request.getCookies(); for (int i =0; i< cookies.length; i++) { Cookie c = cookies[i]; if (c.getName().equals("role")) { userRole = c.getValue(); } }
Intro: The following code could be for a medical records application. It performs authentication by checking if a cookie has been set.
Body: The programmer expects that the AuthenticateUser() check will always be applied, and the "authenticated" cookie will only be set when authentication succeeds. The programmer even diligently specifies a 2-hour expiration for the cookie.
$auth = $_COOKIES['authenticated']; if (! $auth) { if (AuthenticateUser($_POST['user'], $_POST['password']) == "success") { // save the cookie to send out in future responses setcookie("authenticated", "1", time()+60*60*2); } else { ShowLoginScreen(); die("\n"); } } DisplayMedicalHistory($_POST['patient_ID']);
Intro: In the following example, an authentication flag is read from a browser cookie, thus allowing for external control of user state data.
Cookie[] cookies = request.getCookies(); for (int i =0; i< cookies.length; i++) { Cookie c = cookies[i]; if (c.getName().equals("authenticated") && Boolean.TRUE.equals(c.getValue())) { authenticated = true; } }