Moderate severityNVD Advisory· Published Jun 1, 2015· Updated May 6, 2026
CVE-2015-3176
CVE-2015-3176
Description
The account-confirmation feature in login/confirm.php in Moodle through 2.5.9, 2.6.x before 2.6.11, 2.7.x before 2.7.8, and 2.8.x before 2.8.6 allows remote attackers to obtain sensitive full-name information by attempting to self-register.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
moodle/moodlePackagist | < 2.6.11 | 2.6.11 |
moodle/moodlePackagist | >= 2.7.0, < 2.7.8 | 2.7.8 |
moodle/moodlePackagist | >= 2.8.0, < 2.8.6 | 2.8.6 |
Affected products
35cpe:2.3:a:moodle:moodle:*:*:*:*:*:*:*:*+ 34 more
- cpe:2.3:a:moodle:moodle:*:*:*:*:*:*:*:*range: <=2.5.9
- cpe:2.3:a:moodle:moodle:2.5.0:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.1:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.2:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.3:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.4:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.5:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.6:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.7:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.5.8:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.0:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.1:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.10:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.2:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.3:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.4:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.5:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.6:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.7:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.8:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.6.9:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.0:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.1:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.2:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.3:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.4:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.5:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.6:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.7.7:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.8.0:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.8.1:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.8.2:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.8.3:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.8.4:*:*:*:*:*:*:*
- cpe:2.3:a:moodle:moodle:2.8.5:*:*:*:*:*:*:*
Patches
4e2e7e35da31eMDL-50099 auth: less verbose account confirmed message
3 files changed · +8 −9
auth/email/auth.php+4 −4 modified@@ -139,12 +139,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in $DB->set_field("user", "confirmed", 1, array("id"=>$user->id)); if ($user->firstaccess == 0) {
auth/ldap/auth.php+4 −4 modified@@ -604,12 +604,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in if (!$this->user_activate($username)) { return AUTH_CONFIRM_FAIL;
login/confirm.php+0 −1 modified@@ -63,7 +63,6 @@ $PAGE->set_heading($COURSE->fullname); echo $OUTPUT->header(); echo $OUTPUT->box_start('generalbox centerpara boxwidthnormal boxaligncenter'); - echo "<h3>".get_string("thanks").", ". fullname($user) . "</h3>\n"; echo "<p>".get_string("alreadyconfirmed")."</p>\n"; echo $OUTPUT->single_button("$CFG->wwwroot/course/", get_string('courses')); echo $OUTPUT->box_end();
80eb5bc7b7daMDL-50099 auth: less verbose account confirmed message
3 files changed · +8 −9
auth/email/auth.php+4 −4 modified@@ -139,12 +139,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in $DB->set_field("user", "confirmed", 1, array("id"=>$user->id)); if ($user->firstaccess == 0) {
auth/ldap/auth.php+4 −4 modified@@ -604,12 +604,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in if (!$this->user_activate($username)) { return AUTH_CONFIRM_FAIL;
login/confirm.php+0 −1 modified@@ -63,7 +63,6 @@ $PAGE->set_heading($COURSE->fullname); echo $OUTPUT->header(); echo $OUTPUT->box_start('generalbox centerpara boxwidthnormal boxaligncenter'); - echo "<h3>".get_string("thanks").", ". fullname($user) . "</h3>\n"; echo "<p>".get_string("alreadyconfirmed")."</p>\n"; echo $OUTPUT->single_button("$CFG->wwwroot/course/", get_string('courses')); echo $OUTPUT->box_end();
4f8b6d567494MDL-50099 auth: less verbose account confirmed message
3 files changed · +8 −9
auth/email/auth.php+4 −4 modified@@ -142,12 +142,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in $DB->set_field("user", "confirmed", 1, array("id"=>$user->id)); return AUTH_CONFIRM_OK;
auth/ldap/auth.php+4 −4 modified@@ -607,12 +607,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in if (!$this->user_activate($username)) { return AUTH_CONFIRM_FAIL;
login/confirm.php+0 −1 modified@@ -63,7 +63,6 @@ $PAGE->set_heading($COURSE->fullname); echo $OUTPUT->header(); echo $OUTPUT->box_start('generalbox centerpara boxwidthnormal boxaligncenter'); - echo "<h3>".get_string("thanks").", ". fullname($user) . "</h3>\n"; echo "<p>".get_string("alreadyconfirmed")."</p>\n"; echo $OUTPUT->single_button("$CFG->wwwroot/course/", get_string('courses')); echo $OUTPUT->box_end();
d5922686e762MDL-50099 auth: less verbose account confirmed message
3 files changed · +8 −9
auth/email/auth.php+4 −4 modified@@ -139,12 +139,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in $DB->set_field("user", "confirmed", 1, array("id"=>$user->id)); if ($user->firstaccess == 0) {
auth/ldap/auth.php+4 −4 modified@@ -604,12 +604,12 @@ function user_confirm($username, $confirmsecret) { $user = get_complete_user_data('username', $username); if (!empty($user)) { - if ($user->confirmed) { - return AUTH_CONFIRM_ALREADY; - - } else if ($user->auth != $this->authtype) { + if ($user->auth != $this->authtype) { return AUTH_CONFIRM_ERROR; + } else if ($user->secret == $confirmsecret && $user->confirmed) { + return AUTH_CONFIRM_ALREADY; + } else if ($user->secret == $confirmsecret) { // They have provided the secret key to get in if (!$this->user_activate($username)) { return AUTH_CONFIRM_FAIL;
login/confirm.php+0 −1 modified@@ -63,7 +63,6 @@ $PAGE->set_heading($COURSE->fullname); echo $OUTPUT->header(); echo $OUTPUT->box_start('generalbox centerpara boxwidthnormal boxaligncenter'); - echo "<h3>".get_string("thanks").", ". fullname($user) . "</h3>\n"; echo "<p>".get_string("alreadyconfirmed")."</p>\n"; echo $OUTPUT->single_button("$CFG->wwwroot/course/", get_string('courses')); echo $OUTPUT->box_end();
Vulnerability mechanics
Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
12- github.com/advisories/GHSA-fqrg-vmvj-jv3xghsaADVISORY
- moodle.org/mod/forum/discuss.phpnvdVendor AdvisoryWEB
- nvd.nist.gov/vuln/detail/CVE-2015-3176ghsaADVISORY
- openwall.com/lists/oss-security/2015/05/18/1nvdWEB
- github.com/moodle/moodle/commit/4f8b6d567494375017c4bc2228e1668d13b21645ghsaWEB
- github.com/moodle/moodle/commit/80eb5bc7b7da4927d2d8021e8c18cbd3a8093406ghsaWEB
- github.com/moodle/moodle/commit/d5922686e7622e1aa58b9b31633f0906f5be2eb3ghsaWEB
- github.com/moodle/moodle/commit/e2e7e35da31ef174589d54f70e791d6acefb59c9ghsaWEB
- web.archive.org/web/20200228054912/http://www.securityfocus.com/bid/74644ghsaWEB
- web.archive.org/web/20201030042703/http://www.securitytracker.com/id/1032358ghsaWEB
- www.securityfocus.com/bid/74644nvd
- www.securitytracker.com/id/1032358nvd
News mentions
0No linked articles in our index yet.