File nagios-3.2.1-CVE-2011-1523.patch of Package nagios
Index: cgi/statusmap.c
===================================================================
--- cgi/statusmap.c.orig
+++ cgi/statusmap.c
@@ -2404,7 +2404,7 @@ void print_layer_url(int get_method){
for(temp_layer=layer_list;temp_layer!=NULL;temp_layer=temp_layer->next){
if(get_method==TRUE)
- printf("&layer=%s",temp_layer->layer_name);
+ printf("&layer=%s",escape_string(temp_layer->layer_name));
else
printf("<input type='hidden' name='layer' value='%s'>\n",escape_string(temp_layer->layer_name));
}
Index: t/618cgisecurity.t
===================================================================
--- /dev/null
+++ t/618cgisecurity.t
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+#
+# Check that you CGI security errors are fixed
+
+use warnings;
+use strict;
+use Test::More;
+use FindBin qw($Bin);
+
+chdir $Bin or die "Cannot chdir";
+
+my $topdir = "$Bin/..";
+my $cgi_dir = "$topdir/cgi";
+
+plan 'no_plan';
+
+my $output = `NAGIOS_CGI_CONFIG=etc/cgi.cfg REQUEST_METHOD=GET QUERY_STRING="layer=' style=xss:expression(alert('XSS')) '" $cgi_dir/statusmap.cgi`;
+unlike( $output, qr/' style=xss:expression\(alert\('XSS'\)\) '/, "XSS injection not passed straight through" );
+like( $output, qr/' style=xss:expression(alert('XSS')) '/, "Expected escaping of quotes" ) || diag $output;
+
+
+$output = `REMOTE_USER=nagiosadmin NAGIOS_CGI_CONFIG=etc/cgi.cfg REQUEST_METHOD=GET QUERY_STRING="type=command&expand=<body onload=alert(666)>" $cgi_dir/config.cgi`;
+unlike( $output, qr/<body onload=alert\(666\)>/, "XSS injection not passed through" ) || diag ($output);