On 01/06/2008 07:13 PM, Sander Temme wrote:
> 
> On Jan 4, 2008, at 12:00 PM, Jim Jagielski wrote:
> 
>> The latest versions of all 3 variants of Apache HTTP Server (1.3.40,
>> 2.0.62 and 2.2.7) have been tagged.
> 
> 
> While it seems to me that we're looking at a re-roll with several
> patches, please find my test results from the past couple of days. 
> Perhaps this experience finally motivates me to script this exercise
> since it gets extremely tedious and repetitive, and hence error prone.
> 
> Compiled with a bunch of modules (see config.nice and config.status at
> the end) as well as php-5.2.5.
> 
> Mac OS X 10.5 (Leopard) on PowerPC:
> 
> [-1] 1.3.40 (CVE-2007-6388 not fixed)

There is a patch available from Mark J Cox for 1.3 which I attach.

Regards

RĂ¼diger

Index: src/CHANGES
===================================================================
--- src/CHANGES (revision 606689)
+++ src/CHANGES (working copy)
@@ -1,5 +1,10 @@
 Changes with Apache 1.3.40
 
+  *) SECURITY: CVE-2007-6388 (cve.mitre.org)
+     mod_status: Ensure refresh parameter is numeric to prevent
+     a possible XSS attack caused by redirecting to other URLs.
+     Reported by SecurityReason.  [Mark Cox]
+
   *) SECURITY: CVE-2007-5000 (cve.mitre.org)
      mod_imap: Fix cross-site scripting issue.  Reported by JPCERT.
      [Joe Orton]
Index: src/modules/standard/mod_status.c
===================================================================
--- src/modules/standard/mod_status.c	(revision 604646)
+++ src/modules/standard/mod_status.c	(working copy)
@@ -232,17 +232,15 @@
 	while (status_options[i].id != STAT_OPT_END) {
 	    if ((loc = strstr(r->args, status_options[i].form_data_str)) != NULL) {
 		switch (status_options[i].id) {
-		case STAT_OPT_REFRESH:
-		    if (*(loc + strlen(status_options[i].form_data_str)) == '='
-                        && atol(loc + strlen(status_options[i].form_data_str) 
-                                    + 1) > 0)
-			ap_table_set(r->headers_out,
-			      status_options[i].hdr_out_str,
-			      loc + strlen(status_options[i].hdr_out_str) + 1);
-		    else
-			ap_table_set(r->headers_out,
-			      status_options[i].hdr_out_str, "1");
-		    break;
+                case STAT_OPT_REFRESH: {
+                    long refreshtime = 0;
+                    if (*(loc + strlen(status_options[i].form_data_str)) == '=')
+                        refreshtime = atol(loc + strlen(status_options[i].form_data_str)+1);
+                    ap_table_set(r->headers_out,
+                                 status_options[i].hdr_out_str,
+                                 ap_psprintf(r->pool,"%ld",(refreshtime<1)?1:refreshtime));
+                    break;
+                }
 		case STAT_OPT_NOTABLE:
 		    no_table_report = 1;
 		    break;

Reply via email to