[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#894713: stretch-pu: apache2/2.4.25-3+deb9u5



Hi,

On Tuesday, 3 April 2018 14:07:33 CEST Stefan Fritsch wrote:
> I would like to do an upgrade of apache2 in stretch that upgrades the
> complete mod_http2 and mod_proxy_http2 modules from the versions from
> 2.4.25 to the versions from 2.4.33.
> 
> The reason is that the fix for CVE-2018-1302 [1] is difficult to
> backport because it concerns a complex life-time issue of data
> structures, the relevant code has changed greatly between 2.4.25 and
> 2.4.33, and I am not familiar with the internals of mod_http2.  There
> are other random segfaults [2] and other bugs [3] in stretch's mod_http2
> that are reportedly fixed by newer mod_http2. Therefore, upgrading the
> whole thing seems like the best solution to me. Do you agree with this
> approach?

I have now prepared updated packages. The changelog diff is:

apache2 (2.4.25-3+deb9u5) stretch; urgency=medium

  * Upgrade mod_http and mod_proxy_http2 to the versions from 2.4.33. This
    fixes
    - CVE-2018-1302: mod_http2: Potential crash w/ mod_http2
    - Segfaults in mod_http2 (Closes: #873945)
    - mod_http2 issue with option "Indexes" and directive "HeaderName"
      (Closes: #850947)
  * mod_http2: Avoid high memory usage with large files, causing crashes on
    32bit archs. Closes: #897218
  * Make the apache-htcacheclean init script actually look into
    /etc/default/apache-htcacheclean for its config. Closes: #898563

 -- Stefan Fritsch <sf@debian.org>  Sun, 13 May 2018 17:43:20 +0200

A partial debdiff without the mod_http2-upgrade-to-2.4.33.diff file is 
attached. The full debdiff is available at [1] (probably too large for mailing 
lists). The diffstat of the  mod_http2-upgrade-to-2.4.33.diff file is included 
below [2].

Cheers,
Stefan

[1] https://www.sfritsch.de/~stf/apache2_2.4.25-3+deb9u5~test1/
apache2_2.4.25-3+deb9u5.debdiff 

[2]
 configure                        |    2 
 modules/http2/NWGNUmod_http2     |    2 
 modules/http2/config2.m4         |   23 
 modules/http2/h2.h               |   46 -
 modules/http2/h2_alt_svc.c       |   13 
 modules/http2/h2_alt_svc.h       |   13 
 modules/http2/h2_bucket_beam.c   |  892 ++++++++++++----------
 modules/http2/h2_bucket_beam.h   |  147 ++-
 modules/http2/h2_bucket_eoc.c    |  110 --
 modules/http2/h2_bucket_eoc.h    |   32 
 modules/http2/h2_bucket_eos.c    |   18 
 modules/http2/h2_bucket_eos.h    |   13 
 modules/http2/h2_config.c        |   38 
 modules/http2/h2_config.h        |   15 
 modules/http2/h2_conn.c          |  156 ++-
 modules/http2/h2_conn.h          |   16 
 modules/http2/h2_conn_io.c       |  138 +--
 modules/http2/h2_conn_io.h       |   27 
 modules/http2/h2_ctx.c           |   15 
 modules/http2/h2_ctx.h           |   13 
 modules/http2/h2_filter.c        |  165 ++--
 modules/http2/h2_filter.h        |   26 
 modules/http2/h2_from_h1.c       |   54 -
 modules/http2/h2_from_h1.h       |   13 
 modules/http2/h2_h2.c            |   25 
 modules/http2/h2_h2.h            |   13 
 modules/http2/h2_headers.c       |   31 
 modules/http2/h2_headers.h       |   19 
 modules/http2/h2_mplx.c          | 1551 ++++++++++++++++
+----------------------
 modules/http2/h2_mplx.h          |   84 --
 modules/http2/h2_ngn_shed.c      |   30 
 modules/http2/h2_ngn_shed.h      |   13 
 modules/http2/h2_private.h       |   13 
 modules/http2/h2_proxy_session.c |   94 +-
 modules/http2/h2_proxy_session.h |   23 
 modules/http2/h2_proxy_util.c    |  296 +++++++
 modules/http2/h2_proxy_util.h    |   64 +
 modules/http2/h2_push.c          |   20 
 modules/http2/h2_push.h          |   14 
 modules/http2/h2_request.c       |   34 
 modules/http2/h2_request.h       |   13 
 modules/http2/h2_session.c       | 1432 +++++++++++++++++-------------------
 modules/http2/h2_session.h       |   76 -
 modules/http2/h2_stream.c        | 1208 ++++++++++++++++++------------
 modules/http2/h2_stream.h        |  179 ++--
 modules/http2/h2_switch.c        |   29 
 modules/http2/h2_switch.h        |   13 
 modules/http2/h2_task.c          |  250 +++---
 modules/http2/h2_task.h          |   26 
 modules/http2/h2_util.c          | 1017 ++++++++++++++++++++-----
 modules/http2/h2_util.h          |  188 ++++
 modules/http2/h2_version.h       |   33 
 modules/http2/h2_worker.c        |  103 --
 modules/http2/h2_worker.h        |  135 ---
 modules/http2/h2_workers.c       |  587 ++++++--------
 modules/http2/h2_workers.h       |   82 --
 modules/http2/mod_http2.c        |   37 
 modules/http2/mod_http2.dep      |  118 --
 modules/http2/mod_http2.dsp      |    8 
 modules/http2/mod_http2.h        |   13 
 modules/http2/mod_http2.mak      |   18 
 modules/http2/mod_proxy_http2.c  |  208 ++---
 modules/http2/mod_proxy_http2.h  |   13 
 63 files changed, 5534 insertions(+), 4563 deletions(-)


diff -Nru apache2-2.4.25/debian/apache2.apache-htcacheclean.init apache2-2.4.25/debian/apache2.apache-htcacheclean.init
--- apache2-2.4.25/debian/apache2.apache-htcacheclean.init	2018-03-31 10:45:18.000000000 +0200
+++ apache2-2.4.25/debian/apache2.apache-htcacheclean.init	2018-05-13 17:43:20.000000000 +0200
@@ -30,6 +30,13 @@
 HTCACHECLEAN_PATH="${HTCACHECLEAN_PATH:=/var/cache/apache2$DIR_SUFFIX/mod_cache_disk}"
 HTCACHECLEAN_OPTIONS="${HTCACHECLEAN_OPTIONS:=-n}"
 
+# Read configuration variable file if it is present
+if [ -f /etc/default/apache-htcacheclean$DIR_SUFFIX ] ; then
+       . /etc/default/apache-htcacheclean$DIR_SUFFIX
+elif [ -f /etc/default/apache-htcacheclean ] ; then
+       . /etc/default/apache-htcacheclean
+fi
+
 PIDDIR="/var/run/apache2/$RUN_USER"
 PIDFILE="$PIDDIR/$NAME.pid"
 DAEMON_ARGS="$HTCACHECLEAN_OPTIONS \
diff -Nru apache2-2.4.25/debian/changelog apache2-2.4.25/debian/changelog
--- apache2-2.4.25/debian/changelog	2018-03-31 10:47:16.000000000 +0200
+++ apache2-2.4.25/debian/changelog	2018-05-13 17:43:20.000000000 +0200
@@ -1,3 +1,18 @@
+apache2 (2.4.25-3+deb9u5) stretch; urgency=medium
+
+  * Upgrade mod_http and mod_proxy_http2 to the versions from 2.4.33. This
+    fixes
+    - CVE-2018-1302: mod_http2: Potential crash w/ mod_http2
+    - Segfaults in mod_http2 (Closes: #873945)
+    - mod_http2 issue with option "Indexes" and directive "HeaderName"
+      (Closes: #850947)
+  * mod_http2: Avoid high memory usage with large files, causing crashes on
+    32bit archs. Closes: #897218
+  * Make the apache-htcacheclean init script actually look into
+    /etc/default/apache-htcacheclean for its config. Closes: #898563
+
+ -- Stefan Fritsch <sf@debian.org>  Sun, 13 May 2018 17:43:20 +0200
+
 apache2 (2.4.25-3+deb9u4) stretch-security; urgency=medium
 
   * CVE-2017-15710: mod_authnz_ldap: Out of bound write in mod_authnz_ldap
diff -Nru apache2-2.4.25/debian/patches/CVE-2017-7659.diff apache2-2.4.25/debian/patches/CVE-2017-7659.diff
--- apache2-2.4.25/debian/patches/CVE-2017-7659.diff	2018-03-31 10:45:18.000000000 +0200
+++ apache2-2.4.25/debian/patches/CVE-2017-7659.diff	1970-01-01 01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-#commit 672187c168b94b562d8065e08e2cad5b00cdd0e3
-#Author: Stefan Eissing <icing@apache.org>
-#Date:   Wed Feb 1 20:40:38 2017 +0000
-#
-#    On the trunk:
-#    
-#    mod_http2: fix for crash when running out of memory. Initial patch by Robert Swiecki <robert@swiecki.net>
-#    
-#    
-#    
-#    git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1781304 13f79535-47bb-0310-9956-ffa450edef68
-#
---- apache2.orig/modules/http2/h2_stream.c
-+++ apache2/modules/http2/h2_stream.c
-@@ -286,11 +286,13 @@ apr_status_t h2_stream_set_request_rec(h
-         return APR_ECONNRESET;
-     }
-     status = h2_request_rcreate(&req, stream->pool, r);
--    ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, APLOGNO(03058)
--                  "h2_request(%d): set_request_rec %s host=%s://%s%s",
--                  stream->id, req->method, req->scheme, req->authority, 
--                  req->path);
--    stream->rtmp = req;
-+    if (status == APR_SUCCESS) {
-+        ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, APLOGNO(03058)
-+                      "h2_request(%d): set_request_rec %s host=%s://%s%s",
-+                      stream->id, req->method, req->scheme, req->authority, 
-+                      req->path);
-+        stream->rtmp = req;
-+    }
-     return status;
- }
- 
diff -Nru apache2-2.4.25/debian/patches/mod_http2_mem_usage_32bit.diff apache2-2.4.25/debian/patches/mod_http2_mem_usage_32bit.diff
--- apache2-2.4.25/debian/patches/mod_http2_mem_usage_32bit.diff	1970-01-01 01:00:00.000000000 +0100
+++ apache2-2.4.25/debian/patches/mod_http2_mem_usage_32bit.diff	2018-05-13 17:43:20.000000000 +0200
@@ -0,0 +1,12 @@
+# https://svn.apache.org/r1830419
+# http://bugs.debian.org/897218
+--- apache2.orig/modules/http2/h2_bucket_beam.c
++++ apache2/modules/http2/h2_bucket_beam.c
+@@ -924,6 +924,7 @@ apr_status_t h2_beam_send(h2_bucket_beam
+             while (!APR_BRIGADE_EMPTY(sender_bb) && APR_SUCCESS == rv) {
+                 if (space_left <= 0) {
+                     report_prod_io(beam, force_report, &bl);
++                    r_purge_sent(beam);
+                     rv = wait_not_full(beam, block, &space_left, &bl);
+                     if (APR_SUCCESS != rv) {
+                         break;
diff -Nru apache2-2.4.25/debian/patches/mod_http2-revert-new-proxy-features.diff apache2-2.4.25/debian/patches/mod_http2-revert-new-proxy-features.diff
--- apache2-2.4.25/debian/patches/mod_http2-revert-new-proxy-features.diff	1970-01-01 01:00:00.000000000 +0100
+++ apache2-2.4.25/debian/patches/mod_http2-revert-new-proxy-features.diff	2018-05-13 17:29:38.000000000 +0200
@@ -0,0 +1,34 @@
+# Revert part of r1824187 which requires a newer mod_proxy
+--- apache2.orig/modules/http2/h2_h2.c
++++ apache2/modules/http2/h2_h2.c
+@@ -60,6 +60,7 @@ const char *H2_MAGIC_TOKEN = "PRI * HTTP
+ /*******************************************************************************
+  * The optional mod_ssl functions we need. 
+  */
++static APR_OPTIONAL_FN_TYPE(ssl_engine_disable) *opt_ssl_engine_disable;
+ static APR_OPTIONAL_FN_TYPE(ssl_is_https) *opt_ssl_is_https;
+ static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *opt_ssl_var_lookup;
+ 
+@@ -445,6 +446,7 @@ apr_status_t h2_h2_init(apr_pool_t *pool
+ {
+     (void)pool;
+     ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, "h2_h2, child_init");
++    opt_ssl_engine_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable);
+     opt_ssl_is_https = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https);
+     opt_ssl_var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
+     
+--- apache2.orig/modules/http2/mod_proxy_http2.c
++++ apache2/modules/http2/mod_proxy_http2.c
+@@ -580,9 +580,9 @@ run_connect:
+     
+     /* Step Three: Create conn_rec for the socket we have open now. */
+     if (!ctx->p_conn->connection) {
+-        status = ap_proxy_connection_create_ex(ctx->proxy_func,
+-                                               ctx->p_conn, ctx->rbase);
+-        if (status != OK) {
++        if ((status = ap_proxy_connection_create(ctx->proxy_func, ctx->p_conn,
++                                                 ctx->owner, 
++                                                 ctx->server)) != OK) {
+             ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, ctx->owner, APLOGNO(03353)
+                           "setup new connection: is_ssl=%d %s %s %s", 
+                           ctx->p_conn->is_ssl, ctx->p_conn->ssl_hostname, 
diff -Nru apache2-2.4.25/debian/patches/mod_http2-upgrade-to-2.4.33.diff apache2-2.4.25/debian/patches/mod_http2-upgrade-to-2.4.33.diff
--- apache2-2.4.25/debian/patches/mod_http2-upgrade-to-2.4.33.diff	1970-01-01 01:00:00.000000000 +0100
+++ apache2-2.4.25/debian/patches/mod_http2-upgrade-to-2.4.33.diff	2018-05-13 17:43:20.000000000 +0200
[ snip ]
diff -Nru apache2-2.4.25/debian/patches/series apache2-2.4.25/debian/patches/series
--- apache2-2.4.25/debian/patches/series	2018-03-31 10:45:18.000000000 +0200
+++ apache2-2.4.25/debian/patches/series	2018-05-13 17:43:20.000000000 +0200
@@ -13,7 +13,6 @@
 
 CVE-2017-3167.diff
 CVE-2017-3169.diff
-CVE-2017-7659.diff
 CVE-2017-7668.diff
 CVE-2017-7679.diff
 CVE-2017-9788-mod_auth_digest.diff
@@ -25,3 +24,6 @@
 CVE-2018-1301-HTTP-request-read-out-of-bounds.diff
 CVE-2018-1303-mod_cache_socache-oob.diff
 CVE-2018-1312-mod_auth_digest-nonce.diff
+mod_http2-upgrade-to-2.4.33.diff
+mod_http2-revert-new-proxy-features.diff
+mod_http2_mem_usage_32bit.diff

Reply to: