]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: http: Properly reject non-HTTP/1.x protocols
authorTim Duesterhus <tim@bastelstu.be>
Mon, 9 Mar 2020 23:55:40 +0000 (00:55 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 24 May 2022 13:38:05 +0000 (15:38 +0200)
This patch hardens the verification of the HTTP/1.x version line
(i.e. the first line within an HTTP/1.x request) to verify that
the protocol name within the version actually reads "HTTP".

Previously protocols that superficially resembled the wire-format
of HTTP/1.x and having a 4-letter acronym as the protocol name, such
as RTSP would pass this check.

This patch fixes GitHub issue #540, it must be backported to all
supported versions. The legacy, non-HTX parser is affected as well,
a fix must be created for it as well.

Note that such protocols can still be used when option
accept-invalid-http-request is set.

src/h1_htx.c

index 61a60eeb50c1c5f5dbc348f860774b6fcdc8dbd7..a4048c0fbb278609b3ab6ea5d1cb3ea6d7defff6 100644 (file)
@@ -57,7 +57,7 @@ static int h1_process_req_vsn(struct h1m *h1m, union h1_sl *sl)
                if (sl->rq.v.len != 8)
                        return 0;
 
-               if (*(sl->rq.v.ptr + 4) != '/' ||
+               if (!istnmatch(sl->rq.v, ist("HTTP/"), 5) ||
                    !isdigit((unsigned char)*(sl->rq.v.ptr + 5)) ||
                    *(sl->rq.v.ptr + 6) != '.' ||
                    !isdigit((unsigned char)*(sl->rq.v.ptr + 7)))