|
|
Message-ID: <20121221110558.GA7583@netbsd.org>
Date: Fri, 21 Dec 2012 11:05:58 +0000
From: David Holland <dholland-oss-security@...bsd.org>
To: oss-security@...ts.openwall.com
Subject: Isearch insecure temporary files
NetBSD pkgsrc ships an old text search package called Isearch, which I
found tonight (in the course of making it compile with a modernish C++
compiler) to contain garden-variety /tmp races.
Does anyone else ship it? I don't think this is worth a CVE unless
someone does; the package appears to be dead upstream.
http://gnats.netbsd.org/47360 for reference; the relevant portions of
the patches cited follow.
--- doctype/anzmeta.cxx~ 2000-10-11 14:02:15.000000000 +0000
+++ doctype/anzmeta.cxx
@@ -1446,9 +1448,21 @@ ANZMETA::Present (const RESULT& ResultRe
} else {
STRING s_cmd;
//CHR* c_cmd;
- CHR *TmpName;
+ CHR TmpName[64];
+ int fd;
- TmpName = tempnam("/tmp", "mpout");
+ strcpy(TmpName, "/tmp/mpoutXXXXXX");
+ fd = mkstemp(TmpName);
+ if (fd < 0) {
+ /*
+ * Apparently failure is not an option here, so
+ * proceed in a way that at least won't be insecure.
+ */
+ strcpy(TmpName, "/dev/null");
+ }
+ else {
+ close(fd);
+ }
cout << "[ANZMETA::Present] no docs found, so build Fly cmd" << endl;
--- doctype/fgdc.cxx~ 2000-09-06 18:20:30.000000000 +0000
+++ doctype/fgdc.cxx
@@ -1824,10 +1826,22 @@ FGDC::Present (const RESULT& ResultRecor
return;
} else {
STRING s_cmd;
- CHR *TmpName;
-
- TmpName = tempnam("/tmp", "mpout");
+ CHR TmpName[64];
+ int fd;
+ strcpy(TmpName, "/tmp/mpoutXXXXXX");
+ fd = mkstemp(TmpName);
+ if (fd < 0) {
+ /*
+ * Apparently failure is not an option here, so
+ * proceed in a way that at least won't be insecure.
+ */
+ strcpy(TmpName, "/dev/null");
+ }
+ else {
+ close(fd);
+ }
+
BuildCommandLine(mpCommand, HoldFilename, RecordSyntax,
TmpName, &s_cmd);
system(s_cmd);
--- src/marc.cxx.orig 1998-05-12 16:49:10.000000000 +0000
+++ src/marc.cxx
@@ -194,9 +194,15 @@ MARC::GetPrettyBuffer(STRING *Buffer)
{
/*
// Cheese, cheese, cheese;-)
- char *tempfile = tempnam("/tmp", "marc");
+ char tempfile[32];
+ strcpy(tempfile, "/tmp/marcXXXXXX");
+ int tempfd = mkstemp(tempfile);
+ if (tempfd < 0) {
+ *Buffer = "MARC::GetPrettyBuffer() failed to open temp file";
+ return;
+ }
FILE *fp;
- if((fp = fopen(tempfile, "w")) == NULL) {
+ if((fp = fdopen(tempfd, "w")) == NULL) {
*Buffer = "MARC::GetPrettyBuffer() failed to open temp file";
return;
}
--
David A. Holland
dholland@...bsd.org
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.