]> git.kaiwu.me - nginx.git/commitdiff
Fixed buffer over-read while logging invalid request headers.
authorValentin Bartenev <vbart@nginx.com>
Wed, 24 Feb 2016 13:01:23 +0000 (16:01 +0300)
committerValentin Bartenev <vbart@nginx.com>
Wed, 24 Feb 2016 13:01:23 +0000 (16:01 +0300)
Since 667aaf61a778 (1.1.17) the ngx_http_parse_header_line() function can return
NGX_HTTP_PARSE_INVALID_HEADER when a header contains NUL character.  In this
case the r->header_end pointer isn't properly initialized, but the log message
in ngx_http_process_request_headers() hasn't been adjusted.  It used the pointer
in size calculation, which might result in up to 2k buffer over-read.

Found with afl-fuzz.

src/http/ngx_http_request.c

index 99e9325099cd1a969120870018aaa3a948015c0f..5a39c118afd1347488955f80216d11d2c0ac1408 100644 (file)
@@ -1351,12 +1351,11 @@ ngx_http_process_request_headers(ngx_event_t *rev)
             continue;
         }
 
-        /* rc == NGX_HTTP_PARSE_INVALID_HEADER: "\r" is not followed by "\n" */
+        /* rc == NGX_HTTP_PARSE_INVALID_HEADER */
 
         ngx_log_error(NGX_LOG_INFO, c->log, 0,
-                      "client sent invalid header line: \"%*s\\r...\"",
-                      r->header_end - r->header_name_start,
-                      r->header_name_start);
+                      "client sent invalid header line");
+
         ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
         return;
     }