<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>86257</bug_id>
          
          <creation_ts>2005-03-22 06:31 0000</creation_ts>
          <short_desc>sys-fs/e2fsprogs: BLKID_FILE should not be honored in SUID</short_desc>
          <delta_ts>2005-06-11 01:18:18 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Security</product>
          <component>Vulnerabilities</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          <bug_file_loc>http://sourceforge.net/projects/e2fsprogs</bug_file_loc>
          <status_whiteboard>~1 [noglsa] koon</status_whiteboard>
          
          <priority>P2</priority>
          <bug_severity>trivial</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>koon@gentoo.org</reporter>
          <assigned_to>security@gentoo.org</assigned_to>
          

      

      
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-03-22 06:31:40 0000</bug_when>
            <thetext>e2fsprogs 1.37 contains the following fix :

* cache.c (blkid_get_cache): Ignore the BLKID_FILE environment variable if blkid_get_cache() is called from a setuid program.

The official patch is here :
=======================================================
diff -Nru a/lib/blkid/cache.c b/lib/blkid/cache.c
--- a/lib/blkid/cache.c	2005-03-22 07:01:25 -05:00
+++ b/lib/blkid/cache.c	2005-03-22 07:01:25 -05:00
@@ -41,7 +41,7 @@
 
 	if (filename &amp;&amp; !strlen(filename))
 		filename = 0;
-	if (!filename)
+	if (!filename &amp;&amp; (getuid() == geteuid()))
 		filename = getenv(&quot;BLKID_FILE&quot;);
 	if (!filename)
 		filename = BLKID_CACHE_FILE;
======================================================

Solar Designer (Openwall) suggested the following Linux-only (better) alternative :

======================================================
 		filename = 0;
 	if (!filename)
- 		filename = getenv(&quot;BLKID_FILE&quot;);
+ 		filename = __secure_getenv(&quot;BLKID_FILE&quot;);
 	if (!filename)
 		filename = BLKID_CACHE_FILE;
======================================================

base-system, please advise.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2005-03-22 11:46:52 0000</bug_when>
            <thetext>__secure_getenv() exists only in glibc. It&apos;s not portable and we have had problems with patches of his in the past in which __secure_env() crept in.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2005-03-22 11:55:15 0000</bug_when>
            <thetext>How about this?

--- lib/blkid/cache.c.orig	2005-03-22 14:48:19.000000000 -0500
+++ lib/blkid/cache.c	2005-03-22 14:53:08.000000000 -0500
@@ -41,8 +41,13 @@ int blkid_get_cache(blkid_cache *ret_cac
 
 	if (filename &amp;&amp; !strlen(filename))
 		filename = 0;
-	if (!filename)
+
+	if (!filename &amp;&amp; (getuid() == geteuid()))
+#ifdef __UCLIBC__
 		filename = getenv(&quot;BLKID_FILE&quot;);
+#else
+		filename = __secure_getenv(&quot;BLKID_FILE&quot;);
+#endif
 	if (!filename)
 		filename = BLKID_CACHE_FILE;
 	cache-&gt;bic_filename = blkid_strdup(filename);
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2005-03-22 12:26:05 0000</bug_when>
            <thetext>Created an attachment (id=54173)
e2fsprogs-1.36-r3.ebuild.diff
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2005-03-22 12:26:58 0000</bug_when>
            <thetext>Created an attachment (id=54174)
e2fsprogs-1.36-blkid-cache.patch
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>robbat2@gentoo.org</who>
            <bug_when>2005-03-22 13:38:50 0000</bug_when>
            <thetext>I&apos;d think it would be better to do it the other way around, eg. explictly check for GLIBC before using  __secure_getenv. This ensures it can compile on any other libc as opposed to just uclibc.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-03-22 13:55:48 0000</bug_when>
            <thetext>We should wait for upstream a little before they chose a final patch</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2005-03-22 14:12:33 0000</bug_when>
            <thetext>agriffis put the following proposed solution for this. tested on uClibc and it compiles fine after running autoconf.
http://dev.gentoo.org/~agriffis/misc/e2fsprogs-1.36-blkid-cache.patch
I mailed &lt;tytso@mit.edu&gt; about it, awaiting reply.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2005-03-22 15:46:07 0000</bug_when>
            <thetext>1.37 is now in portage w/out any patch here ... i&apos;d prefer upstream handle this which is what Nedd is pursuing

is e2fsprogs-1.35 affected or is it just 1.36 ?  if it&apos;s just 1.36, then ia64 is the only one who had that version stable [it was marked last nite ...]</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2005-03-22 16:37:56 0000</bug_when>
            <thetext>I&apos;m pretty sure it&apos;s 1.36 only. </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-03-23 00:41:20 0000</bug_when>
            <thetext>I know upstream was considering pushing some autoconf stuff to enable/disable use of __secure_getenv. Maybe better to wait for their final choice.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>solar@gentoo.org</who>
            <bug_when>2005-03-23 06:40:07 0000</bug_when>
            <thetext>Anybody know the attack vector here? Like nothing in e2fsprogs is suid afaik.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>robbat2@gentoo.org</who>
            <bug_when>2005-03-23 07:04:56 0000</bug_when>
            <thetext>solar: re: attack vector
I think /bin/mount might be an attack vector.
it&apos;s suid, and uses the function in question (blkid_get_cache).
it&apos;s got the blkid stuff so you can do &apos;mount LABEL=foo /bar&apos;.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-03-30 07:15:42 0000</bug_when>
            <thetext>Keeping the bug open until upstream final resolution, but won&apos;t generate a GLSA as affected versions are unsupported.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-04-21 01:17:34 0000</bug_when>
            <thetext>Contacted upstream to see what they plan to do exactly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-05-15 08:13:35 0000</bug_when>
            <thetext>A TEST version 1.38-WIP-0509 has been released... No answer from upstream btw.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-06-10 06:54:46 0000</bug_when>
            <thetext>Given that I had no answer from upstream on this, I tend to consider 1.37 is
probably the final upstream fix for that.

So should we consider this one fixed ?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>vapier@gentoo.org</who>
            <bug_when>2005-06-10 18:18:34 0000</bug_when>
            <thetext>works for me

ia64 is now stable in 1.37-r1 since ia64 is the only arch that had 1.36 stable</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>koon@gentoo.org</who>
            <bug_when>2005-06-11 01:18:18 0000</bug_when>
            <thetext>Closing as SOMEWHATFIXED. Please reopen if you have a better idea.</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54173</attachid>
            <date>2005-03-22 12:26 0000</date>
            <desc>e2fsprogs-1.36-r3.ebuild.diff</desc>
            <filename>e2fsprogs-1.36-r3.ebuild.diff</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGUyZnNwcm9ncy0xLjM2LXIyLmVidWlsZAkyMDA1LTAzLTIyIDE0OjQxOjU1LjAwMDAwMDAw
MCAtMDUwMAorKysgZTJmc3Byb2dzLTEuMzYtcjMuZWJ1aWxkCTIwMDUtMDMtMjIgMTQ6NTg6MjAu
MDAwMDAwMDAwIC0wNTAwCkBAIC0zMCw2ICszMCw5IEBACiAJIyBDbGVhbiB1cCBtYWtlZmlsZSB0
byBzdWNrIGxlc3MKIAllcGF0Y2ggIiR7RklMRVNESVJ9Ii8ke1B9LW1ha2VmaWxlLnBhdGNoCiAK
KwkjODYyNTcgIEJMS0lEX0ZJTEUgc2hvdWxkIG5vdCBiZSBob25vcmVkIGluIFNVSUQuCisJZXBh
dGNoICR7RklMRVNESVJ9LyR7UH0tYmxraWQtY2FjaGUucGF0Y2gKKwogCSMga2VybmVsIGhlYWRl
cnMgdXNlIHRoZSBzYW1lIGRlZmluZXMgYXMgZTJmc3Byb2dzIGFuZCBjYW4gY2F1c2UgaXNzdWVz
ICM0ODgyOQogCXNlZCAtaSBcCiAJCS1lICdzOkNPTkZJR19KQkRfREVCVUc6X19DT05GSUdfSkJE
X0RFQlVHX19FMkZTOmcnIFwK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54174</attachid>
            <date>2005-03-22 12:26 0000</date>
            <desc>e2fsprogs-1.36-blkid-cache.patch</desc>
            <filename>e2fsprogs-1.36-blkid-cache.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGxpYi9ibGtpZC9jYWNoZS5jLm9yaWcJMjAwNS0wMy0yMiAxNDo0ODoxOS4wMDAwMDAwMDAg
LTA1MDAKKysrIGxpYi9ibGtpZC9jYWNoZS5jCTIwMDUtMDMtMjIgMTQ6NTM6MDguMDAwMDAwMDAw
IC0wNTAwCkBAIC00MSw4ICs0MSwxMyBAQCBpbnQgYmxraWRfZ2V0X2NhY2hlKGJsa2lkX2NhY2hl
ICpyZXRfY2FjCiAKIAlpZiAoZmlsZW5hbWUgJiYgIXN0cmxlbihmaWxlbmFtZSkpCiAJCWZpbGVu
YW1lID0gMDsKLQlpZiAoIWZpbGVuYW1lKQorCisJaWYgKCFmaWxlbmFtZSAmJiAoZ2V0dWlkKCkg
PT0gZ2V0ZXVpZCgpKSkKKyNpZmRlZiBfX1VDTElCQ19fCiAJCWZpbGVuYW1lID0gZ2V0ZW52KCJC
TEtJRF9GSUxFIik7CisjZWxzZQorCQlmaWxlbmFtZSA9IF9fc2VjdXJlX2dldGVudigiQkxLSURf
RklMRSIpOworI2VuZGlmCiAJaWYgKCFmaWxlbmFtZSkKIAkJZmlsZW5hbWUgPSBCTEtJRF9DQUNI
RV9GSUxFOwogCWNhY2hlLT5iaWNfZmlsZW5hbWUgPSBibGtpZF9zdHJkdXAoZmlsZW5hbWUpOwo=
</data>        

          </attachment>
    </bug>

</bugzilla>