[11062] in bugtraq

home help back first fref pref prev next nref lref last post

joe 2.8 makes world-readable DEADJOE

daemon@ATHENA.MIT.EDU (Trevor Johnson)
Sat Jul 17 23:17:06 1999

Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Message-Id:  <Pine.BSI.3.95.990717040216.12080A-100000@blues.jpj.net>
Date:         Sat, 17 Jul 1999 05:06:06 -0400
Reply-To: Trevor Johnson <trevor@jpj.net>
From: Trevor Johnson <trevor@JPJ.NET>
X-To:         sbr <sbr@DIRECT.CA>
To: BUGTRAQ@SECURITYFOCUS.COM
In-Reply-To:  <3.0.6.32.19990714143115.00a0cbe0@199.60.228.51>

Package: joe
Version: 2.8-12

I'm just guessing about the Debian version above.

sbr wrote:

> I recently started using a new editor called joe, with this editor there is
> a feature that if your existing session is terminated, it creates a DEADJOE
> in the directory.  While editing my shadow file my connection was
> terminated, thus leaving the DEADJOE in my /etc directory that was world
> readable containing my entire shadow file.  I think the problem is self
> explanitory.  I have emailed the creator and there is no feature to disable
> this that I can find or mentioned in the email.  My umask setting does not
> seem to affect the permissions of DEADJOE.
>
> The operating system is Debian Linux 2.1 kernel 2.2.10 i386.
>
> 	- Spencer.

How-To-Repeat:  use joe to edit a file, then kill -HUP its process.
                I was able to reproduce this with joe 2.8 under Red Hat
                6.0, with either Red Hat's -18 patches or the
                FreeBSD-current patches applied, so it looks like FreeBSD
                is probably vulnerable too.
Fix:  here's a patch against the pristine source, only tested on Red Hat.
Confidential:  no
__
Trevor Johnson

--- b.c.orig	Fri Jan 20 00:38:25 1995
+++ b.c	Sat Jul 17 01:54:09 1999
@@ -21,6 +21,7 @@
 #include <pwd.h>
 #endif
 #include <errno.h>
+#include <sys/types.h>

 #include "config.h"
 #include "blocks.h"
@@ -1990,6 +1991,7 @@
  {
  long tim=time(0);
  B *b;
+ mode_t mask=umask (077); /* no access to DEADJOE for others */
  FILE *f=fopen("DEADJOE","a");
  fprintf(f,"\n*** Modified files in JOE when it aborted on %s",ctime(&tim));
  if(sig) fprintf(f,"*** JOE was aborted by signal %d\n",sig);

home help back first fref pref prev next nref lref last post