Well I do realize that the Moodle packaging team it's aware of this bugreport 
anyway I attempted to fix some of the more serious problems that I think could 
impact my system, so as normally a good friend of mine says, check with 
upstream, well in this case not with upstream but with the package I use, 
Moodle on Debian, so I checked the release notes on 1.8.11 [1] build a chroot 
of Lenny on my Unstable installation via debootstrap and go and after an 
apt-get source moodle I searched for the things I believe can fix without 
breaking the package and the Debian Way of work, I searched for the security 
fixes, first problem as the release notes [1] and the tracker [2] don.t show 
the code (at least not to me) so ended searching on the git [3] for the commits 
and applied to the code, yes it's an unified diff, I'm not really sure if it's 
totally correct as I need to learn too much but, it's my best try, maybe it 
could help the Moodle packaging team or anyone to patch at least 
CVE-2009-4303[4].

This is a try of changelog of what I did.
 
Bug     MDL-20932         FIXED           Get rid of user->secret in backup 
files (and ignore it on restore)     Major           Resolved
Found on:    
http://git.moodle.org/gw?p=moodle.git;a=patch;h=306e851f93d67c6919f11d7c8910af301c57bbbf
Fixes:
CVE-2009-4303[4]:
Moodle 1.8 before 1.8.11 and 1.9 before 1.9.7 stores (1) password hashes and 
(2) unspecified "secrets" in backup files, which might allow attackers to 
obtain sensitive information.
 
Improvement     MDL-20941       FIXED   Store hashed username into user->email 
field for deleted users  Major   Resolved
(Not touched as is a new feature and on the tracker had a lot of discussion on 
what is the proper way to handle this)

Bug     MDL-13952       FIXED   "enrol_ldap_autocreate" create courses, even if 
"enrol_ldap_autocreate" is set to "no"  Minor   Resolved
Found on:
http://git.moodle.org/gw?p=moodle.git;a=commit;h=29bd2be123a23a6ae699af8bbd58c0551f9edb07

Bug     MDL-20288       FIXED   $url cannot be null for Oracle in datalib.php 
add_to_log        Minor   Resolved
Found on:
http://git.moodle.org/gw?p=moodle.git;a=commit;h=d217bcf1a8c5417db18ae07172d0a4dba5b1f6f3
        
Sub-task        MDL-20916       FIXED   MDL-19303
Apply sesskey() mechanism to all the actions in the XMLDB Editor        Minor   
Resolved
Found on:
http://git.moodle.org/gw?p=moodle.git;a=commit;h=5aa2b2e9430e8ecdc6e4fcb8694d9b8d8440d033
 (not fixed as it modifies 36 files, too complex for me)

Bug     MDL-18989       FIXED   Improper Course Creation in LDAP sync   Minor   
Resolved
(Fixed by MDL13952 above)

Bug     MDL-20638       FIXED   Smarty vulnerabilities may affect QTI2 export   
Minor   Resolved
(Too much modified files 69! Way too complex for me, also in the notes is asked 
to no use smarty and announces that it will be deprecated for version 2)

Bug     MDL-20890       FIXED   Upgrading Moodle database (1.9.6+) results in 8 
identical 
notices         Minor   Resolved
(Can.t fin on the git commit.s)
                
Bug     MDL-20927       FIXED   incorrect require_login check   Minor   Resolved
Found on:
http://git.moodle.org/gw?p=moodle.git;a=commit;h=afc9bd4ea34ddf281d0442012d245c8245ce3136
(Way too much different from the one on 1.8.2 I suspect that will break if I 
only add what changes on 1.8.11, so not touched)

SCORM MDL-20955 fix bad use of update_record - thanks Petr
Found on:
http://git.moodle.org/gw?p=moodle.git;a=commit;h=ad97538d8aa71cbb66108a8cc086b0a8d831b25e
Fixes:
CVE-2009-4305[0]:
SQL injection vulnerability in the SCORM module in Moodle 1.8 before 1.8.11 and 
1.9 before 1.9.7 allows remote authenticated users to| execute arbitrary SQL 
commands via vectors related to an "escaping issue when processing AICC CRS 
file (Course_Title)."
(I.m can.t really test this one, but as far as I think it didn.t break things)

Regards

[1] http://docs.moodle.org/en/Moodle_1.8.11_release_notes
[2] http://tracker.moodle.org/browse/MDL/fixforversion/10383
[3] 
http://git.moodle.org/gw?p=moodle.git;a=shortlog;h=refs/heads/MOODLE_18_STABLE
[4] http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-4303
    http://security-tracker.debian.org/tracker/CVE-2009-4303
Index: moodle.svn/enrol/ldap/enrol.php
===================================================================
--- moodle.svn/enrol/ldap/enrol.php	(revision 3)
+++ moodle.svn/enrol/ldap/enrol.php	(revision 4)
@@ -222,6 +222,11 @@
                                           $this->enrol_localcoursefield,
                                           $idnumber );
                 if (!is_object($course_obj)) {
+ 		   if (empty($CFG->enrol_ldap_autocreate)) { // autocreation not allowed
+			print "[ENROL_LDAP] Course $idnumber does not exist, skipping\n";
+			continue; // next foreach course
+		}
+
                     // ok, now then let's create it!
                     print "Creating Course $idnumber...";
                     $newcourseid = $this->create_course($course, true); // we are skipping fix_course_sortorder()
Index: moodle.svn/lib/datalib.php
===================================================================
--- moodle.svn/lib/datalib.php	(revision 3)
+++ moodle.svn/lib/datalib.php	(revision 4)
@@ -1541,12 +1541,10 @@
 
     if (defined('MDL_PERFDB')) { global $PERF ; $PERF->dbqueries++; $PERF->logwrites++;};
 
-    if ($CFG->type = 'oci8po') {
-        if (empty($info)) {
-            $info = ' ';
-        }
-    }
+    $info = empty($info) ? sql_empty() : $info; // Use proper empties for each database
 
+    $url  = empty($url)  ? sql_empty() : $url;
+
     $result = $db->Execute('INSERT INTO '. $CFG->prefix .'log (time, userid, course, ip, module, cmid, action, url, info)
         VALUES (' . "'$timenow', '$userid', '$courseid', '$REMOTE_ADDR', '$module', '$cm', '$action', '$url', '$info')");
 
Index: moodle.svn/mod/scorm/datamodels/aicclib.php
===================================================================
--- moodle.svn/mod/scorm/datamodels/aicclib.php	(revision 3)
+++ moodle.svn/mod/scorm/datamodels/aicclib.php	(revision 4)
@@ -252,7 +252,9 @@
                     $sco->next = 0;
                     if ($oldscoid = scorm_array_search('identifier',$sco->identifier,$oldscoes)) {
                         $sco->id = $oldscoid;
-                        $id = update_record('scorm_scoes',$sco);
+                        if ($DB->update_record('scorm_scoes',$sco)) {
+	                    $id = $oldscoid;
+                         }                        
                         unset($oldscoes[$oldscoid]);
                     } else {
                         $id = insert_record('scorm_scoes',$sco);
Index: moodle.svn/mod/lesson/lesson.php
===================================================================
--- moodle.svn/mod/lesson/lesson.php	(revision 3)
+++ moodle.svn/mod/lesson/lesson.php	(revision 4)
@@ -29,7 +29,7 @@
     
     list($cm, $course, $lesson) = lesson_get_basics($id);
 
-    require_login($course->id);
+    require_login($course, false, $cm);
     $context = get_context_instance(CONTEXT_MODULE, $cm->id);
     
 /// Set up some general variables
Index: moodle.svn/backup/backuplib.php
===================================================================
--- moodle.svn/backup/backuplib.php	(revision 3)
+++ moodle.svn/backup/backuplib.php	(revision 4)
@@ -1126,7 +1126,6 @@
                 fwrite ($bf,full_tag("LASTLOGIN",4,false,$user->lastlogin));
                 fwrite ($bf,full_tag("CURRENTLOGIN",4,false,$user->currentlogin));
                 fwrite ($bf,full_tag("LASTIP",4,false,$user->lastip));
-                fwrite ($bf,full_tag("SECRET",4,false,$user->secret));
                 fwrite ($bf,full_tag("PICTURE",4,false,$user->picture));
                 fwrite ($bf,full_tag("URL",4,false,$user->url));
                 fwrite ($bf,full_tag("DESCRIPTION",4,false,$user->description));
Index: moodle.svn/backup/restorelib.php
===================================================================
--- moodle.svn/backup/restorelib.php	(revision 3)
+++ moodle.svn/backup/restorelib.php	(revision 4)
@@ -4670,9 +4670,6 @@
                         case "LASTIP": 
                             $this->info->tempuser->lastip = $this->getContents();
                             break;
-                        case "SECRET": 
-                            $this->info->tempuser->secret = $this->getContents();
-                            break;
                         case "PICTURE": 
                             $this->info->tempuser->picture = $this->getContents();
                             break;

Reply via email to