ATutor <= 2.2 (confirm.php) Session Variable Overloading Vulnerability

• Affected Versions:

Version 2.2 and prior versions.

• Vulnerability Description:

The vulnerable code is located in the /confirm.php script:

140if (isset($_REQUEST['auto_login']))
143    $sql = "SELECT M.member_id, M.login, M.preferences, M.language FROM %smembers M WHERE M.member_id=%d";
144    $row = queryDB($sql, array(TABLE_PREFIX, $_REQUEST["member_id"]), TRUE);
146    if ($row['member_id'] != '') 
147    {
148        $_SESSION['valid_user'] = true;
149        $_SESSION['member_id']  = $_REQUEST["member_id"];
150        $_SESSION['course_id']  = 0;
151        $_SESSION['login']      = $row[login];

This script is intended to be used for the account confirmation. However, its “auto-login” feature uses the same session variables used to authenticate the user in the whole application, and this might enable unauthenticated attackers to bypass the authentication mechanism and impersonate legitimate users by simply knowing their user IDs. Successful exploitation of this vulnerability might allow an attacker to access the application with the most privileged user, leading to achieve arbitrary PHP code execution by leveraging further vulnerabilities.

• Solution:

Apply the vendor patches.

• Disclosure Timeline:

[10/10/2014] – Vendor notified

[13/10/2014] – Vendor response stating this issue will be patched right away

[02/11/2014] – Vendor patch released:

[09/11/2014] – Vendor notified about incompleteness of the patch

[10/11/2014] – Vendor released a further patch:

[30/09/2015] – CVE number requested

[05/10/2015] – CVE number assigned

[04/11/2015] – Public disclosure

• CVE Reference:

The Common Vulnerabilities and Exposures project ( has assigned the name CVE-2014-9753 to this vulnerability.

• Credits:

Vulnerability discovered by Egidio Romano.