svn commit: r1936260 - in httpd/httpd/trunk: changes-entries modules/metadata
[email protected] Fri, 17 Jul 2026 12:12:23 -0000
| Newsgroups | gmane.comp.apache.cvs |
|---|---|
| Message-ID | <178429034387.3837674.18008970886328116038@svn03-he-fi> |
Author: jorton Date: Fri Jul 17 12:12:23 2026 New Revision: 1936260 Log: mod_cern_meta: reject HTTP framing headers in metadata files * modules/metadata/mod_cern_meta.c (scan_meta_file): Return a 500 error if a framing header is found in a .meta file rather than merging it into the response headers. Assisted-by: Claude Sonnet 4.6 <[email protected]> GitHub: PR #685 Added: httpd/httpd/trunk/changes-entries/cern-meta-header-injection.txt Modified: httpd/httpd/trunk/modules/metadata/mod_cern_meta.c Added: httpd/httpd/trunk/changes-entries/cern-meta-header-injection.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ httpd/httpd/trunk/changes-entries/cern-meta-header-injection.txt Fri Jul 17 12:12:23 2026 (r1936260) @@ -0,0 +1,2 @@ + *) mod_cern_meta: Reject HTTP framing headers in metadata files to prevent + response splitting. [Joe Orton] Modified: httpd/httpd/trunk/modules/metadata/mod_cern_meta.c ============================================================================== --- httpd/httpd/trunk/modules/metadata/mod_cern_meta.c Fri Jul 17 12:12:12 2026 (r1936259) +++ httpd/httpd/trunk/modules/metadata/mod_cern_meta.c Fri Jul 17 12:12:23 2026 (r1936260) @@ -256,6 +256,18 @@ static int scan_meta_file(request_rec *r sscanf(l, "%d", &r->status); r->status_line = apr_pstrdup(r->pool, l); } + else if (!ap_cstr_casecmp(w, "Transfer-Encoding") + || !ap_cstr_casecmp(w, "Content-Length") + || !ap_cstr_casecmp(w, "Connection") + || !ap_cstr_casecmp(w, "Trailer") + || !ap_cstr_casecmp(w, "Upgrade") + || !ap_cstr_casecmp(w, "Keep-Alive") + || !ap_cstr_casecmp(w, "TE")) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10596) + "forbidden HTTP framing header '%s' in meta file: %s", + w, r->filename); + return HTTP_INTERNAL_SERVER_ERROR; + } else { apr_table_set(tmp_headers, w, l); }