[rt-announce] RT 2.0.8_01 - CRITICAL SECURITY FIX

Jesse Vincent jesse at bestpractical.com
Wed Oct 31 01:34:07 EST 2001


Earlier today, I was alerted to a security vulnerability in RT's command
line administration tool, rtadmin by Jay Kramer at Mojomole.com.

The vulnerability, as Jay discovered, allows _local_ shell users to access
RT's commandline administrative tool with RT superuser permissions. If you
have local shell users who have access to execute the RT binaries but who are 
not trusted administrators, you MUST upgrade to RT 2.0.8_01 as soon as humanly
possible.

Until you upgrade, we recommend that you disable the rtadmin program by
executing the following command:

	chmod 000 /path/to/rt/bin/rtadmin

RT 2.0.8_01 is immediately available from:

	ftp://ftp.fsck.com/pub/rt/release/rt-2-0-8_01.tar.gz

A diff between RT 2.0.8 and RT 2.0.8_01 is attached to this message.

Thanks very much to Jay Kramer for his quick and professional handling of 
this vulnerability report.

	Jesse Vincent
	Best Practical Solutions, LLC


-- 
http://www.bestpractical.com/products/rt  -- Trouble Ticketing. Free.
-------------- next part --------------
Index: Makefile
===================================================================
RCS file: /raid/cvsroot/rt/Makefile,v
retrieving revision 1.90.2.262
diff -u -r1.90.2.262 Makefile
--- Makefile	2001/10/04 06:01:10	1.90.2.262
+++ Makefile	2001/10/31 05:50:09
@@ -6,7 +6,7 @@
 
 RT_VERSION_MAJOR	=	2
 RT_VERSION_MINOR	=	0
-RT_VERSION_PATCH	=	8
+RT_VERSION_PATCH	=	8-01
 
 
 RT_VERSION =	$(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH)
Index: bin/rt
===================================================================
RCS file: /raid/cvsroot/rt/bin/Attic/rt,v
retrieving revision 1.1.2.35
diff -u -r1.1.2.35 rt
--- bin/rt	2001/10/01 03:03:57	1.1.2.35
+++ bin/rt	2001/10/31 05:50:10
@@ -28,6 +28,10 @@
 #Get the current user all loaded
 my $CurrentUser = GetCurrentUser();
 
+unless ($CurrentUser->Id) {
+	print "No RT user found. Please consult your RT administrator.\n";
+	exit(1);
+}
 
 
 # {{{ commandline flags 
Index: bin/rt-mailgate
===================================================================
RCS file: /raid/cvsroot/rt/bin/Attic/rt-mailgate,v
retrieving revision 1.1.2.19
diff -u -r1.1.2.19 rt-mailgate
--- bin/rt-mailgate	2001/08/23 23:49:18	1.1.2.19
+++ bin/rt-mailgate	2001/10/31 05:50:10
@@ -93,6 +93,12 @@
 #Get us a current user object.
 my $CurrentUser = GetCurrentUser($head, $entity, $ErrorsTo);
 
+# We've already performed a warning and sent the mail off to somewhere safe ($RTOwner).
+#  this is _exceedingly_ unlikely but we don't want to keep going if we don't have a current user
+
+unless ($CurrentUser->Id) {
+	exit(1);
+}
 
 my $MessageId = $head->get('Message-Id') || 
   "<no-message-id-".time.rand(2000)."\@.$RT::rtname>";
Index: bin/rtadmin
===================================================================
RCS file: /raid/cvsroot/rt/bin/Attic/rtadmin,v
retrieving revision 1.1.2.18
diff -u -r1.1.2.18 rtadmin
--- bin/rtadmin	2001/08/22 03:17:26	1.1.2.18
+++ bin/rtadmin	2001/10/31 05:50:11
@@ -28,6 +28,13 @@
 #Get the current user all loaded
 my $CurrentUser = GetCurrentUser();
 
+unless ($CurrentUser->Id) {
+        print "No RT user found. Please consult your RT administrator.\n";   
+        exit(1);
+}
+
+
+
 
 PickMode();
 
Index: lib/RT/Interface/CLI.pm
===================================================================
RCS file: /raid/cvsroot/rt/lib/RT/Interface/Attic/CLI.pm,v
retrieving revision 1.1.2.6
diff -u -r1.1.2.6 CLI.pm
--- lib/RT/Interface/CLI.pm	2001/07/12 03:16:38	1.1.2.6
+++ lib/RT/Interface/CLI.pm	2001/10/31 05:50:11
@@ -124,8 +124,7 @@
     $CurrentUser->LoadByGecos($Gecos);
     
     unless ($CurrentUser->Id) {
-	$CurrentUser = $RT::Nobody;
-	$RT::Logger->debug("No user with a unix login of '$Gecos' was found. Continuing in unprivileged mode.\n");
+	$RT::Logger->debug("No user with a unix login of '$Gecos' was found. ");
     }
     return($CurrentUser);
 }
Index: lib/RT/Interface/Email.pm
===================================================================
RCS file: /raid/cvsroot/rt/lib/RT/Interface/Attic/Email.pm,v
retrieving revision 1.1.2.53
diff -u -r1.1.2.53 Email.pm
--- lib/RT/Interface/Email.pm	2001/10/01 06:42:30	1.1.2.53
+++ lib/RT/Interface/Email.pm	2001/10/31 05:50:11
@@ -372,12 +372,10 @@
 	    
 	    my $Message = "Sender's email address was not found in the user database.";
 
-	    $CurrentUser->Load($RT::Nobody->Id);
-
 	    # {{{  This code useful only if you've defined an AutoRejectRequest template
 	    
 	    require RT::Template;
-	    my $template = new RT::Template($CurrentUser);
+	    my $template = new RT::Template($RT::Nobody);
 	    $template->Load('AutoRejectRequest');
 	    $Message = $template->Content || $Message;
 	    
@@ -421,10 +419,14 @@
 	$CurrentUser->LoadByEmail($Address);
 	
 	unless ($CurrentUser->id) {
-	    $RT::Logger->warning("Couldn't load user '$Address'.".
-				 " Defaulting to nobody\n");
+	    $RT::Logger->warning("Couldn't load user '$Address'.".  "giving up");
+		MailError( To => $ErrorsTo,
+			   Subject => "User could not be loaded",
+			   Explanation => "User  '$Address' could not be loaded in the mail gateway",
+			   MIMEObj => $entity,
+			   LogLevel => 'crit'
+			 );
 	    
-	    $CurrentUser->Load($RT::Nobody->Id);
 	}
     }
  


More information about the Rt-announce mailing list