Closed Bug 58580 Opened 24 years ago Closed 12 years ago

Temp files from sending drafts or posting news are (created with bad permissions and) left behind

Categories

(MailNews Core :: Backend, defect, P3)

x86
Linux
defect

Tracking

(Not tracked)

RESOLVED DUPLICATE of bug 235432
Future

People

(Reporter: sspitzer, Unassigned)

References

Details

(Keywords: privacy)

Attachments

(3 files)

looking at my /tmp, I see this:

-rw-rw-r--   1 seth     seth          944 Oct 29 00:34 /tmp/nscopy-1.tmp
-rw-rw-r--   1 seth     seth         3315 Oct 29 10:28 /tmp/nscopy-2.tmp
-rw-rw-r--   1 seth     seth         1673 Oct 29 00:32 /tmp/nscopy.tmp
-rw-------   1 seth     seth          856 Oct 29 00:34 /tmp/nsmail-1.eml
-rw-rw-r--   1 seth     seth          930 Oct 29 00:32 /tmp/nsmail-1.html
-rw-rw-r--   1 seth     seth          295 Oct 29 00:34 /tmp/nsmail-2-1.html
-rw-------   1 seth     seth         3313 Oct 29 10:28 /tmp/nsmail-2.eml
-rw-------   1 seth     seth          468 Oct 29 00:34 /tmp/nsmail-2.html
-rw-rw-r--   1 seth     seth         2536 Oct 29 10:28 /tmp/nsmail-3-1.html
-rw-------   1 seth     seth         2974 Oct 29 10:28 /tmp/nsmail-3.html
-rw-------   1 seth     seth         1585 Oct 29 00:32 /tmp/nsmail.eml
-rw-------   1 seth     seth         1195 Oct 29 00:32 /tmp/nsmail.html

Two things:

1) the temp files are left behind and we'll fill up /tmp.  I've talk to rhp
about this, and in addition to finding the problems and fixing them, we might
want to add some code to shutdown to remove temp files.

2) the permissions are bar.  we should make sure they are 600.  other users can
read my sent messages!
Egads, that smells like a /tmp race condition, which is a serious bad boy
security problem on unix systems with untrusted users.  Is Mozilla creating
files with serial names?

Looking through the code, the answer is "yes".  The action of checking for
non-existence of a filename and actually creating the file does not appear to be
atomic.  In particular, nsLocalFile::Exists checks for the existence of a file
with access(2), but the file isn't actually created until sometime later (in
nsOutputFileStream?).

In either case, it's a huge and obvious security hole.
> Is Mozilla creating files with serial names?
> In either case, it's a huge and obvious security hole.

We should use random names, i.e. "salt" them (compare bug 56002).

Even if it were no a security problem, it is annoying. Disks are slow and loud.
Some computers even turn off the hd after some time - accessing the hd will
reset it. We leave clutter behind.

Can't we get rid of those temp files completely? Maybe stuff them in mem cache,
or completely avoid them?
This is bug 49943
Well, the code is there to make EVERY temp file we create a 600 permission. 
Again, I would love to find the actual times that this does happen. Its not a 
default behavior...we clean up behind ourselves for most normal conditions, but 
crashing and failures could be an issue.

- rhp
Status: NEW → ASSIGNED
Target Milestone: --- → Future
At least the permissions problem should be investigated and fixed, if
problematic, for mozilla0.9.

My /tmp/ looks similar to sspitzer's. I don't know, which files are from 4.x and
which from Mozilla. IIRC, the following is from Mozilla:
-rw-rw-r--   1 ben      ben          1375 Oct 31 00:10 [Bug 56135] Changed -
Text copied from the Subject field is pasted into the body as a <pre>
Please note that Messenger 4.x/Mozilla is practically the only app which leaves
clutter in /tmp.
Keywords: mozilla0.9
Ben,
Every file I create in the compose back end is created with that permission 
mask. What I am saying is that with normal operations, these files are not left 
around, but you are a developer who I am sure crashes or kills processes in the 
debugger before total cleanup is completed.

Also, if you set TMPDIR in your environment, you can point the temp directory 
whereever you want.

- rhp
This problem with temp files is also a big deal on Mac. In Mac OS 9, there is a 
bug where the contents of 'Temporary Items' (the temp files folder) are not 
deleted each time you restart the machine, so copies of sent messages will just 
accumulate there.

This seems like a serious security risk to me; someone could come along later, 
and read all your sent messages.
But on a Mac if someone has access to your machine, can't they just go right 
into your sent folder and view your messages anyway?

- rhp
Not if I keep sent message on the server, or don't keep copies of sent messages 
at all. Some users will be paranoid enough to do this in a shared-machine 
setting. And it's easy to write an AppleScript to get at these files in the temp 
directory.
Is there agreement that this is limited to crashes and other such things that
prevent the cleanup from happening?
I've had this bug before. If you start CLEAN by going into your tmp directory 
and wiping out files in there, then run Seamonkey and send a message, you 
should be fine with no leftover files. Crashes, quitting in the debugger, 
etc... will cause problems where stuff doesn't get cleaned up.

If this is not the case, then it is new because I've fixed this bug in the 
past.

- rhp
This is a problem on Windows 2000 as well. I don't recall crashing while 
mailnews was open ... ever. But, I may be mistaken (I don't think so). You are 
correct that this does not happen everytime, so I will watch to see if I can 
find what does it.
Please note that with our current stability, crashing is not en exception ;-).
(BTW: I don't use a debugger, and have ~20 such temp files in tmp.)

sfraser, it's not only MacOS9 that doesn't clean up temp itself - many Linux
(/Unix?) distributions don't either. Debian 2.1 does, Redhat 6.0 doesn't.

Rich, I don't say it's your bug. But *anything* *does* seem to leave files with
bad permissions behind.

Does anybody want to test it? If on Unix, you could use this script to watch /tmp:

while ls -la /tmp;
do
sleep 3
clear;
rather

while ls -la /tmp;
do
sleep 1
clear;
done
I know one way to reproduce this.

postings a news message seems to leave tmp files behind.



Good! But that can't be the only source, because I also have them and can't use
news in Mozilla at all.
Is there some way that you can ensure the temp files are deleted (or at least 
badly corrupted) when Mozilla crashes? Like, I don't know, always having them 
open for write access except in the specific times you need to read them, or 
something?
Keywords: privacy
Hi All
I am getting these *.eml files left in temp on Win 95 B using
Build ID 2000091312 for every email, that's of course means all
entries.
None of these are from NS 4.75, haven't used it for weeks.
The above mentioned build is my daily browser and mail program.
These are being left there with no crashes of the mail program.
News program works fine and have seven news servers with many newsgroups.
From looking at the msg instances which are left behind for me, it might be
related to SaveAsDraft.
I just test the Branch Win32 bits and it is cleaning up properly.

- rhp
I was on linux.  I've seen the news posting problem on winnt, too.

we should be able to fix the file permissions for rtm, right?
Keywords: rtm
Whiteboard: [rtm need info]
Well, the problem is that I already "fixed" the permission problem. Let me 
rescan the code but I attempted to have every file I create in the compose back 
end be 600.

I'll look again.

- rhp
updating summary.  rhp and I have a fix.

we looked for all cases where we create an nsOutputFile stream and fixed them to
create the file with 600.

I'll attach the patch.

this will not fix the problem where we leave temp files behind, but that is
another bug, which I will go log on rhp.
Summary: temp files left behind with bad permissions → temp files from sending drafts or posting news are create with bad permissions
Seth and I worked on a permissions fix that is in his tree right now.

- rhp
Assignee: rhp → sspitzer
Status: ASSIGNED → NEW
Yes, this is a good fix!

r: rhp
looking for sr=.  mscott?
Status: NEW → ASSIGNED
Whiteboard: [rtm need info] → [rtm need info] r=rhp, sr=?
can you please attach diffs using
cvs diff -u

That way I can actually tell what lines were added and changed. I can't parse
these diffs.

Thanks!
Does PR_WRONLY | PR_CREATE_FILE represent any change from the previous behavior?
I believe the default behavior is:

(PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE)

this is a good point.

Seth, we should probably go with this kind of mask for newly created files.

- rhp
Hmm.  I assumed these were all the same.  Are any of them NOT opening new files
for creation?
I don't think we need to add the PR_TRUNCATE.

since we get unique (non-existing) names for temp files, truncating them is a no-op.

I'll repost the diff for mscott to sr.
True. 

Steve: yes, these are all new temp files being created.

- rhp
sr=mscott
Whiteboard: [rtm need info] r=rhp, sr=? → [rtm need info] r=rhp, sr=mscott
privacy issue, so worth running by the PDT.

feet don't fail me now!
Whiteboard: [rtm need info] r=rhp, sr=mscott → [rtm+] r=rhp, sr=mscott
rtm-, wouldn't a proper umask cover this situation where it matters?
Keywords: relnoteRTM
Whiteboard: [rtm+] r=rhp, sr=mscott → [rtm-] r=rhp, sr=mscott
Not the situation of leaving tmp files behind. Who wants to open their temp dir 
one day to see several hundred files left by Mozilla?
Jerry, the fix doesn't address that issue either.
selmer, yes umask would solve the problem.

jerry, see http://bugzilla.mozilla.org/show_bug.cgi?id=58979
yikes!  that patch is bad.  in nsMsgSend.cpp, we pass a deleted tFileSpec to the
nsOutputFileStream constructor!

lucky for me this didn't make it into rtm.

here's a new patch.  clearing reviews.
Whiteboard: [rtm-] r=rhp, sr=mscott → [rtm-]
This is scary. What on earth should the relnote be? "Wipe /tmp after using 
Mozilla Mail"?

Gerv
Whiteboard: [rtm-] → [rtm-] relnote-user
for a user relnote, you can tell people to set their umask to 077
umask on Win9x?
Win95/98/ME cannot be considered secure in any case.  You might as well assume
that your system is trojaned and anyon can read your mail, temp files or no.
I am not aware of anything in Windows 95/98/Me that saves your outgoing 
newsposts to a file. This bug is adding to the insecurity of Win 9x. Don't be 
fooled into thinking it is not making it worse.
What about WinNT? You can't really claim that it were inherently insecure, but
it has no umask either, does it?

Seth, on Unix, could we set the umask in the ./mozilla start script?
Changing umask is a bad idea. It's set by the user so you need to be careful not
to be less restrictive than the user. Fiddling with it is not a confidence
builder. In any case, it is never necessary to change it. You can always be more
restrictive on unix. You use chmod. Unfortunately, there seems to be no NSPR
equivalent.

Another way to look at this is that umask is a user security setting. Don't play
with it or you'll look bad.
We will look even more bad, if we leave "open" files around. I'm looking for a
good workaround for rtm, that catches as many cases as possible and is as less
risky as possible.

Is there no way to make the umask only more restrictive, e.g. by querying the
pre-existing umask and compute the new one (e.g. use the user bits from the user
preference and 7 for the group and world bits) or similar?
Let me clarify my position. It is *never* necessary to alter umask because umask can
only unset permission bits, not set them. On unix, the low-level open function
uses permission_bits & ~umask. If files are created with relaxed permissions, it's
Mozilla's fault; no one else's.

Furthermore, umask is inherited by child processes so changing it means determining
if such things as PSM will function appropriately. This is also true if a plugin
invokes a child process. It rapidly becomes a security issue. Condsider what happens if I
say:
      (umask 777; ./mozilla)
I expect that Mozilla will fail because it can't create files. If it does create
files, it is not secure.

Now, if you want, you can see if the file permissions are sufficiently restrictive
and use chmod if they are not, but that should also not be necessary.

There are probably other reasons why fiddling with umask is bad that I haven't
thought of. It's just a bad idea.
Missed something. Yes, you can make umask more restrictive
   oldmask = umask (0777);
   umask (oldmask | newbits);
but if you think you need this, you're wrong.
> it's Mozilla's fault; no one else's.

Nobody objected that. But we have no time to fix Mozilla for rtm.

> It's just a bad idea.

OK, what do you propose to do for RTM? Leave the files world-readable?
There's no time not to fix it. Quick and dirty hacks never work, though.

Having said that, why not create the temp files in the user's profile directory.
You might run into quota problems but it's certainly no less secure.
is a better relnote work around:

mkdir /tmp/mozilla
chmod 700 /tmp/mozilla
setenv TMPDIR /tmp/mozilla
./mozilla

we heed TMPDIR, and the directory would be non-readable, even though the files
in it would be.

comments?
- It would require as many changes as fixing the original problem would.
- Cluttering the user's dir with tmp files is not good Unix behaviour either,
for several reasons:
  - Often, the home dirs are on a different volume, so that they don't get so
many write accesses (-> less potential for corruption).
  - Considering that we don't do a good job cleaning up, the left-behind files
have a much better chance to be deleten, if they are in /tmp than if they were
somewhere else.
Well, if user A and user B both try to create /tmp/mozilla, one of them is______
screwed. I would do_____________________________________________________________
     mkdir -p <profile_dir>/tmp____________________________________________________
     chmod 1700 <profile_dir>/tmp__________________________________________________
     export TMPDIR=<profile_dir>/tmp_______________________________________________
     ./mozilla_____________________________________________________________________
but that potentially exposes the profile dir's name which someone seems to think
should be hidden.
I'd use /tmp/mozilla-<profilename>. This also lessens the cahnce that the user
used teh same dir for extracting a mozilla tarball or similar. I'd also add an
|rm -rf TMPDIR at startup, so we clean up files left behind from the last
run(/crash).
Posted with Mozilla? :)
You're right. In bash syntax,
  mkdir -p $HOME/moz-temp
  chmod 1700 $HOME/moz-temp
  TMPDIR=$HOME/moz-temp ./mozilla
or, if we could add that work around to the mozilla script, and have it use the
PID for the tmp dir name.

mkdir /tmp/mozilla-$$

Going forward (thinking about the trunk),

1) this bug has a fix, and I'll check in once I get it reviewed.
2) rhp owns the bug where we should be using a directory under tmp for all temp
files.
3) rhp owns the bug where we aren't cleaning up after ourselves.
> mkdir -p $HOME/moz-temp

I'll kill you, if you create additional dirs/files in my home dir.
You can't use the profile dir because there's no way for the shell script to kno
what it is. I also wouldn't remove files because of a crash. If Mozilla was guar
to always exit with a non-zero code on error one could deal with it in a script.

> Posted with Mozilla? :)
Cut and paste from a virtual console into Lynx because of a mid-air collision.

> /tmp/mozilla-$$

Nope. There just might be one of these left over from soemone else's crash.
Any simple scheme like this in /tmp will always be a problem.

Of course, you could use tempnam to get a unique name. You could even use a uuid
string if you could generate it.

> I'll kill you, if you create additional dirs/files in my home dir.
Write your own wrapper script?
With a modern Linux system,
  TEMPNAM=/tmp/`uuidgen`
  mkdir -p $TEMPNAM
  chmod 1700 $TEMPNAM
  TMPDIR=$TEMPNAM ./mozilla
Guys, there is already a patch attached to this bug.  I see no reason why we
would change the script that executes the app rather than taking the patch.
What you should be doing is producing evidence that this is a stop ship bug.

Let's stop discussing nuances of umask in this bug, it was mentioned as a
release note item for concerned users, not a code change for the product.
If Mozilla is only supposed to work in a single-user environment, then this is
not a serious problem. If Mozilla is intended to work in a multi-user environment,
then this becomes a serious security issue and, perhaps, a denial of service issue.
Someone needs to decide which position is correct and clearly state so in the
release notes.
> What you should be doing is producing evidence that this is a stop ship bug.

I thought, the severity where out of question? In crash situations, we leave
sent files with world-readable permissions. On a multi-user system, this means
that other people  can read some of your sent mail. IMO, this *is* severe.

If anything, we need evidence that the *patch* is good, and preferably that it
fixes the problem completely.
Looks good to me: r: rhp
It is not just crash situations. All news postings are left whether you crash or 
not. Mail is left if there is a crash. All the talk about umask this and umask 
that is fine for Unix systems. But that leaves Mac and Windows users nowhere. 
Please don't give us any of the "Windows is not secure, so we can be a privacy 
leaking walking security disaster" bs about this either. Thanks ;-)
pdt: marking rtm++ , please check in ASAP into the branch
Whiteboard: [rtm-] relnote-user → [rtm++] relnote-user
sr=mscott on Seth's latest patch (11/5)
this this is going to land on the branch and the trunk, we no longer need to
relnote it.

mscott has sr the latest patch.  I'll land this right now.
Keywords: relnoteRTM
Whiteboard: [rtm++] relnote-user → [rtm++]
Does this patch fix Mozilla leaving the temp files behind, or is it just the 
Unix-only umask fix? I'll open a new bug for leaving the files behind in temp if 
this one needs to be closed.
this is only the permissions fixed.

there is already a bug on rhp about leaving the files behind, no need to log a
new one.
For those that would like to track that: bug 58979
Cool that it got it for rtm!

Thanks Jerry for the bug-number - I was just going to ask :).
has this fix been checked in yet?  I'm waiting to respin.
sorry about that granrose.

the fix has landed on the trunk and the branch.
Status: ASSIGNED → RESOLVED
Closed: 24 years ago
Resolution: --- → FIXED
esther was able to verify this on linux, but on winnt there is a problem.

on my winnt, temp files are getting created with permissions 644 instead of 600.

reopening.  removing rtm++, this will not be a stop ship bug.

investigating.
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Whiteboard: [rtm++]
accepting.

from my nt box:

-rw-r--r--   1 0        everyone      387 Nov  8 13:58 nscopy.tmp
-rw-r--r--   1 0        everyone        5 Nov  8 13:58 nsmail-1.html
-rw-r--r--   1 0        everyone      385 Nov  8 13:58 nsmail.eml
-rw-r--r--   1 0        everyone       42 Nov  8 13:58 nsmail.html
Status: REOPENED → ASSIGNED
Is there something special about your NT box, or do all NT boxes do this?  Seems
like something we should have known before the checkin...
re-assign to cavin.

thanks cavin!
Assignee: sspitzer → cavin
Status: ASSIGNED → NEW
QA Contact: esther → stephend
*** Bug 71031 has been marked as a duplicate of this bug. ***
Any new here? Can someone verify this?
Mass removing self from CC list.
Now I feel sumb because I have to add back. Sorry for the spam.
Product: MailNews → Core
if patch fixed the persmissions can't this be closed? 
I don't see an inherent dependency on bug 58979


(In reply to comment #0)
> looking at my /tmp, I see this:
> 
> -rw-rw-r--   1 seth     seth          944 Oct 29 00:34 /tmp/nscopy-1.tmp
>...
> 1) the temp files are left behind and we'll fill up /tmp.  I've talk to rhp
> about this, and in addition to finding the problems and fixing them, we might
> want to add some code to shutdown to remove temp files.

also windows bug 77810
Assignee: cavin → nobody
QA Contact: stephend → backend
Product: Core → MailNews Core
No one has confirmed or denied fixture for years. As far as I can tell, this has been fixed (then again, the last comment mentioned not working on WINNT...).
Status: NEW → RESOLVED
Closed: 24 years ago14 years ago
Resolution: --- → INCOMPLETE
From initial description:
> 2) the permissions are bar.  we should make sure they are 600.

This seems to be fixed.

> 1) the temp files are left behind and we'll fill up /tmp.

This bug still exists:

-rw-------  1 ben  ben    1619 2010-10-28 13:07 nscopy-2.tmp
-rw-------  1 ben  ben    1383 2010-10-26 11:20 nscopy.tmp
-rw-------  1 ben  ben    1526 2010-10-28 13:07 nsemail-2.eml
-rw-------  1 ben  ben    1290 2010-10-26 11:20 nsemail.eml

This is from just a few days. When running longer, I had dozens, if not a hundred of them in /tmp/.
Status: RESOLVED → REOPENED
Resolution: INCOMPLETE → ---
Summary: temp files from sending drafts or posting news are create with bad permissions → Temp files from sending drafts or posting news are (created with bad permissions and) left behind
Looks like this could be fixed by bug 235432. Please reopen if you still see it (new temp files left behind).
Status: REOPENED → RESOLVED
Closed: 14 years ago12 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: