I couldn't access Marcos Marado's patch for this bug, so I did the work again. I only dealt with aegis-web; the other vulnerable code in aegis is in examples and is therefore not so critical.
Here's the diff for my NMU. The stable version of aegis-web has an
almost identical version of the vulnerable CGI script, which my patch
applies to with an offset of 2 lines.
Ben.
diff -u aegis-4.24/debian/control aegis-4.24/debian/control
--- aegis-4.24/debian/control
+++ aegis-4.24/debian/control
@@ -62,7 +62,7 @@
Package: aegis-web
Architecture: any
-Depends: ${shlibs:Depends}, aegis, apache | httpd
+Depends: ${shlibs:Depends}, aegis, apache | httpd, mktemp
Replaces: aegis3-web, aegis (<< 4.10)
Conflicts: aegis3-web
Description: aegis web based user interface
diff -u aegis-4.24/debian/changelog aegis-4.24/debian/changelog
--- aegis-4.24/debian/changelog
+++ aegis-4.24/debian/changelog
@@ -1,3 +1,12 @@
+aegis (4.24-3.1) unstable; urgency=medium
+
+ * Non-maintainer upload.
+ * Add patch for aegis.cgi to make temporary file creation secure
+ (closes: #496400)
+ * Add dependency on mktemp, introduced by this patch
+
+ -- Ben Hutchings <[EMAIL PROTECTED]> Sat, 06 Sep 2008 19:58:13 +0100
+
aegis (4.24-3) unstable; urgency=low
* integrate updated patch to fix aefinish with non-existing $HOME,
only in patch2:
unchanged:
--- aegis-4.24.orig/debian/patches/11_cgi_use_secure_temp_files.patch
+++ aegis-4.24/debian/patches/11_cgi_use_secure_temp_files.patch
@@ -0,0 +1,338 @@
+--- script/aegis.cgi.in.orig 2008-09-06 18:48:00.000000000 +0100
++++ script/aegis.cgi.in 2008-09-06 19:15:51.000000000 +0100
+@@ -40,6 +40,12 @@
+ . /etc/aegis.cgi.conf
+ fi
+
++# securely create temporary file
++# Debian change to fix bug 496400
++aegis_tmp() {
++ mktemp /tmp/aegis$1.XXXXXX || exit 1
++}
++
+ extra=
+ lang=en
+ file=proj_list
+@@ -74,8 +80,12 @@
+ then
+ test -z "$project" && exit 1
+ test -z "$change" && change="--baseline"
++
++ out=$(aegis_tmp .ae)
++ log=$(aegis_tmp)
++
+ $bindir/aedist --send $project $change -ndh -naa \
+- -o /tmp/aegis.$$.ae > /tmp/aegis.$$ 2>&1
++ -o $out > $log 2>&1
+ status=$?
+ if test $status -ne 0
+ then
+@@ -88,18 +98,18 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$
++ sed 's|<|\<|g' < $log
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm /tmp/aegis.$$*
++ rm $out $log
+ exit 1
+ fi
+
+- cat /tmp/aegis.$$.ae
+- rm /tmp/aegis.$$*
++ cat $out
++ rm $out $log
+ exit 0
+ fi
+
+@@ -107,8 +117,12 @@
+ then
+ test -z "$project" && exit 1
+ test -z "$change" && change="--baseline"
++
++ out=$(aegis_tmp .ae)
++ log=$(aegis_tmp)
++
+ $bindir/aepatch --send $project $change -naa \
+- -o /tmp/aegis.$$.ae > /tmp/aegis.$$ 2>&1
++ -o $out > $log 2>&1
+ status=$?
+ if test $status -ne 0
+ then
+@@ -121,18 +135,18 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$
++ sed 's|<|\<|g' < $log
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm /tmp/aegis.$$*
++ rm $out $log
+ exit 1
+ fi
+
+- cat /tmp/aegis.$$.ae
+- rm /tmp/aegis.$$*
++ cat $out
++ rm $out $log
+ exit 0
+ fi
+
+@@ -140,8 +154,12 @@
+ then
+ test -z "$project" && exit 1
+ test -z "$change" && change="--baseline"
++
++ out=$(aegis_tmp .ae)
++ log=$(aegis_tmp)
++
+ $bindir/aetar --send $project $change \
+- -o /tmp/aegis.$$.ae > /tmp/aegis.$$ 2>&1
++ -o $out > $log 2>&1
+ status=$?
+ if test $status -ne 0
+ then
+@@ -154,21 +172,21 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$
++ sed 's|<|\<|g' < $log
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm /tmp/aegis.$$*
++ rm $out $log
+ exit 1
+ fi
+
+ echo 'Content-Type: application/x-tar-gz'
+ echo 'Content-Transfer-Encoding: 8bit'
+ echo ''
+- cat /tmp/aegis.$$.ae
+- rm /tmp/aegis.$$*
++ cat $out
++ rm $out $log
+ exit 0
+ fi
+
+@@ -180,11 +198,16 @@
+
+ File=$extra;
+
++ ver1=$(aegis_tmp .1)
++ ver2=$(aegis_tmp .2)
++ err=$(aegis_tmp .log)
++ out=$(aegis_tmp .out)
++
+ cmdcmd="$bindir/aereport -f $datadir/en/html/file_diff.rpt $delta1 \
+- $delta2 $File /tmp/aegis.$$.1 /tmp/aegis.$$.2 $project $change -unf"
++ $delta2 $File $ver1 $ver2 $project $change -unf"
+
+ # the script will work out where to get the file from
+- cmd="`$cmdcmd 2> /tmp/aegis.$$.log`";
++ cmd="`$cmdcmd 2> $err`";
+ status=$?
+
+ if test $status -ne 0
+@@ -198,18 +221,18 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$.log
++ sed 's|<|\<|g' < $err
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm -f /tmp/aegis.$$.*
++ rm -f $ver1 $ver2 $err $out
+ exit 1
+ fi
+- rm -f /tmp/aegis.$$.*
++ rm -f $ver1 $ver2
+
+- eval "$cmd 2> /tmp/aegis.$$.log" > /tmp/aegis.$$.out
++ eval "$cmd 2> $err" > $out
+ status=$?
+ if test $status -ne 0
+ then
+@@ -222,16 +245,16 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$.log
++ sed 's|<|\<|g' < $err
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm -f /tmp/aegis.$$.*
++ rm -f $err $out
+ exit 1
+ fi
+- rm /tmp/aegis.$$.log
++ rm -f $err
+
+ echo 'Content-Type: text/html'
+ echo ''
+@@ -247,13 +270,13 @@
+ echo "<br>Delta $delta1, Delta $delta2"
+ echo '</h1>'
+ echo '<pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$.out
++ sed 's|<|\<|g' < $out
+ echo '</pre>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm -f /tmp/aegis.$$.*
++ rm -f $out
+ exit 0
+ fi
+
+@@ -266,10 +289,14 @@
+ test -z "$delta" && Delta="";
+
+ File="$extra"
++
++ out=$(aegis_tmp)
++ log=$(aegis_tmp .log)
++
+ if test -z "$change"
+ then
+ $bindir/aegis -cp -ind $project -baserel $File $Delta \
+- -o /tmp/aegis.$$ 2> /tmp/aegis.$$.log
++ -o $out 2> $log
+ status=$?
+ if test $status -ne 0
+ then
+@@ -282,20 +309,20 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$.log
++ sed 's|<|\<|g' < $log
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm -f /tmp/aegis.$$ /tmp/aegis.$$.log
++ rm -f $out $log
+ exit 1
+ fi
+- rm -f /tmp/aegis.$$.log
++ rm -f $log
+ else
+ # the script will work out where to get the file from
+ cmd="`$bindir/aereport -f $datadir/en/html/cp_command.rpt $File
\
+- /tmp/aegis.$$ -unf $project $change 2> /tmp/aegis.$$.log`"
++ $out -unf $project $change 2> $log`"
+
+ status=$?
+ if test $status -ne 0
+@@ -307,22 +334,21 @@
+ echo '<blockquote><tt>'
+ echo $bindir/aereport -f \
+ $datadir/en/html/cp_command.rpt $File \
+- /tmp/aegis.$$ -unf $project $change
++ $out -unf $project $change
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$.log
++ sed 's|<|\<|g' < $log
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm /tmp/aegis.$$.log
++ rm $out $log
+ exit 1
+ fi
+- rm /tmp/aegis.$$.log
+
+- eval "$cmd 2> /tmp/aegis.$$.log"
++ eval "$cmd 2> $log"
+ status=$?
+ if test $status -ne 0
+ then
+@@ -335,16 +361,16 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$.log
++ sed 's|<|\<|g' < $log
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm -f /tmp/aegis.$$.log /tmp/aegis.$$
++ rm -f $out $log
+ exit 1
+ fi
+- rm /tmp/aegis.$$.log
++ rm $log
+ fi
+
+ echo 'Content-Type: text/html'
+@@ -360,19 +386,21 @@
+ echo "<br>File <i>$x</i>"
+ echo '</h1>'
+ echo '<pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$
++ sed 's|<|\<|g' < $out
+ echo '</pre>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+- rm /tmp/aegis.$$
++ rm $out
+ exit 0
+ fi
+
++log=$(aegis_tmp)
++
+ $bindir/aereport --file $datadir/$lang/html/$file.rpt \
+ $project $change $extra --page-width=1000 --unformatted \
+- > /tmp/aegis.$$ 2>&1
++ > $log 2>&1
+
+ status=$?
+ if test $status -ne 0
+@@ -387,14 +415,14 @@
+ echo '</tt></blockquote>'
+ echo "terminated with exit status $status."
+ echo 'The following text was produced <blockquote><pre>'
+- sed 's|<|\<|g' < /tmp/aegis.$$
++ sed 's|<|\<|g' < $log
+ echo '</pre></blockquote>'
+ echo '<hr>'
+ echo 'This page was generated'
+ date
+ echo '</body></html>'
+ else
+- cat /tmp/aegis.$$
++ cat $log
+ fi
+-rm /tmp/aegis.$$
++rm $log
+ exit 0
signature.asc
Description: This is a digitally signed message part

