TCP/HTTP proxy and load balancer for high availability environments
CentOS Sources
2019-02-05 e85275f8cb6f60b7eed232f77731dd7891f9068c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
From 9c2cb57513ac8cc826e9b849fb506587309e12b1 Mon Sep 17 00:00:00 2001
From: Willy Tarreau <w@1wt.eu>
Date: Mon, 31 Dec 2018 07:41:24 +0100
Subject: [PATCH] BUG/CRITICAL: mux-h2: re-check the frame length when PRIORITY
 is used
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
 
Tim Düsterhus reported a possible crash in the H2 HEADERS frame decoder
when the PRIORITY flag is present. A check is missing to ensure the 5
extra bytes needed with this flag are actually part of the frame. As per
RFC7540#4.2, let's return a connection error with code FRAME_SIZE_ERROR.
 
Many thanks to Tim for responsibly reporting this issue with a working
config and reproducer. This issue was assigned CVE-2018-20615.
 
This fix must be backported to 1.9 and 1.8.
 
(cherry picked from commit a01f45e3ced23c799f6e78b5efdbd32198a75354)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit ce376ea771ad5484cf0c7559c59e7ea807733df6)
Signed-off-by: Willy Tarreau <w@1wt.eu>
---
 src/mux_h2.c | 5 +++++
 1 file changed, 5 insertions(+)
 
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 7bb51ea4..8fe56233 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -2643,6 +2643,11 @@ static int h2_frt_decode_headers(struct h2s *h2s, struct buffer *buf, int count)
             return 0;//goto fail_stream;
         }
 
+        if (flen < 5) {
+            h2c_error(h2c, H2_ERR_FRAME_SIZE_ERROR);
+            goto fail;
+        }
+
         hdrs += 5; // stream dep = 4, weight = 1
         flen -= 5;
     }
-- 
2.19.1