Hi again,

Ich schrob:
> The problem here is that the hardcoded "keep these at all costs" list
> in debian/patches/env.c-safety.diff (the second hunk) prevents that
> approach.
> 
> I suggest just dropping that, particularly as all but XAPPLRESDIR,
> XFILESEARCHPATH, XUSERFILESEARCHPATH are already listed in either
> initial_checkenv_table or initial_keepenv_table. [...]

Two additions:
Bug #523882 would also be positively impacted by the suggested change,
as the behaviour would at least be explainable by the env_keep/env_check
mechanism. The manpage for -i should still be fixed to mention it, but
at least there won't be the totally undocumented hardcoded list anymore.

And since I was already playing with the code, I'm also attaching two
patches, one flat out dropping the list and one adding the 3 remaining
envvars to initial_keepenv_table. Please pick one and replace
env.c-safety.diff by it.

Cheers,
    Jan
-- 
()  ascii ribbon campaign - against html e-mail
/\  www.asciiribbon.org   - against proprietary attachments
diff -ru sudo-orig//env.c sudo-1.7.4p4//env.c
--- sudo-orig//env.c	2010-10-01 05:21:10.000000000 +0200
+++ sudo-1.7.4p4//env.c	2010-10-01 07:26:28.000000000 +0200
@@ -116,6 +116,8 @@
 static const char *initial_badenv_table[] = {
     "IFS",
     "CDPATH",
+    "SHELLOPTS",
+    "PS4",
     "LOCALDOMAIN",
     "RES_OPTIONS",
     "HOSTALIASES",
diff -ru sudo-orig//sudo.pod sudo-1.7.4p4//sudo.pod
--- sudo-orig//sudo.pod	2010-10-01 05:21:10.000000000 +0200
+++ sudo-1.7.4p4//sudo.pod	2010-10-01 05:13:39.000000000 +0200
@@ -456,8 +456,8 @@
 To prevent command spoofing, B<sudo> checks "." and "" (both denoting
 current directory) last when searching for a command in the user's
 PATH (if one or both are in the PATH).  Note, however, that the
-actual C<PATH> environment variable is I<not> modified and is passed
-unchanged to the program that B<sudo> executes.
+C<PATH> environment variable is further modified in Debian because of
+the use of the I<SECURE_PATH> build option.
 
 B<sudo> will check the ownership of its time stamp directory
 (F<@timedir@> by default) and ignore the directory's contents if
diff -ru sudo-orig//sudoers.pod sudo-1.7.4p4//sudoers.pod
--- sudo-orig//sudoers.pod	2010-10-01 05:21:10.000000000 +0200
+++ sudo-1.7.4p4//sudoers.pod	2010-10-01 05:13:39.000000000 +0200
@@ -1309,6 +1309,9 @@
 
 =item env_delete
 
+Not effective due to security issues: only variables listed in 
+I<env_keep> or I<env_check> can be passed through B<sudo>!
+
 Environment variables to be removed from the user's environment
 when the I<env_reset> option is not in effect.  The argument may
 be a double-quoted, space-separated list or a single value without
@@ -1322,8 +1325,8 @@
 
 =item env_keep
 
-Environment variables to be preserved in the user's environment
-when the I<env_reset> option is in effect.  This allows fine-grained
+Environment variables to be preserved in the user's environment.
+This allows fine-grained
 control over the environment B<sudo>-spawned processes will receive.
 The argument may be a double-quoted, space-separated list or a
 single value without double-quotes.  The list can be replaced, added
diff -ru sudo-orig//env.c sudo-1.7.4p4//env.c
--- sudo-orig//env.c	2010-10-01 05:21:10.000000000 +0200
+++ sudo-1.7.4p4//env.c	2010-10-01 05:51:40.000000000 +0200
@@ -116,6 +116,8 @@
 static const char *initial_badenv_table[] = {
     "IFS",
     "CDPATH",
+    "SHELLOPTS",
+    "PS4",
     "LOCALDOMAIN",
     "RES_OPTIONS",
     "HOSTALIASES",
@@ -205,6 +207,9 @@
     "TZ",
     "XAUTHORITY",
     "XAUTHORIZATION",
+    "XAPPLRESDIR",
+    "XFILESEARCHPATH",
+    "XUSERFILESEARCHPATH",
     NULL
 };
 
diff -ru sudo-orig//sudo.pod sudo-1.7.4p4//sudo.pod
--- sudo-orig//sudo.pod	2010-10-01 05:21:10.000000000 +0200
+++ sudo-1.7.4p4//sudo.pod	2010-10-01 05:13:39.000000000 +0200
@@ -456,8 +456,8 @@
 To prevent command spoofing, B<sudo> checks "." and "" (both denoting
 current directory) last when searching for a command in the user's
 PATH (if one or both are in the PATH).  Note, however, that the
-actual C<PATH> environment variable is I<not> modified and is passed
-unchanged to the program that B<sudo> executes.
+C<PATH> environment variable is further modified in Debian because of
+the use of the I<SECURE_PATH> build option.
 
 B<sudo> will check the ownership of its time stamp directory
 (F<@timedir@> by default) and ignore the directory's contents if
diff -ru sudo-orig//sudoers.pod sudo-1.7.4p4//sudoers.pod
--- sudo-orig//sudoers.pod	2010-10-01 05:21:10.000000000 +0200
+++ sudo-1.7.4p4//sudoers.pod	2010-10-01 05:13:39.000000000 +0200
@@ -1309,6 +1309,9 @@
 
 =item env_delete
 
+Not effective due to security issues: only variables listed in 
+I<env_keep> or I<env_check> can be passed through B<sudo>!
+
 Environment variables to be removed from the user's environment
 when the I<env_reset> option is not in effect.  The argument may
 be a double-quoted, space-separated list or a single value without
@@ -1322,8 +1325,8 @@
 
 =item env_keep
 
-Environment variables to be preserved in the user's environment
-when the I<env_reset> option is in effect.  This allows fine-grained
+Environment variables to be preserved in the user's environment.
+This allows fine-grained
 control over the environment B<sudo>-spawned processes will receive.
 The argument may be a double-quoted, space-separated list or a
 single value without double-quotes.  The list can be replaced, added

Attachment: signature.asc
Description: Digital signature

Reply via email to