From 8a82960e768528068893d3b4a9c4fbe665501694 Mon Sep 17 00:00:00 2001 From: David Drysdale Date: Mon, 22 May 2017 10:54:10 +0100 Subject: [PATCH] deps: cherry-pick 9478908a49 from cares upstream Original commit message: ares_parse_naptr_reply: check sufficient data Check that there is enough data for the required elements of an NAPTR record (2 int16, 3 bytes for string lengths) before processing a record. This patch fixes CVE-2017-1000381 The c-ares function ares_parse_naptr_reply(), which is used for parsing NAPTR responses, could be triggered to read memory outside of the given input buffer if the passed in DNS response packet was crafted in a particular way. Refs: https://c-ares.haxx.se/adv_20170620.html Refs: https://c-ares.haxx.se/CVE-2017-1000381.patch PR-URL: https://github.com/nodejs/node-private/pull/88 Reviewed-By: Ben Noordhuis Reviewed-By: Matteo Collina --- deps/cares/src/ares_parse_naptr_reply.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/deps/cares/src/ares_parse_naptr_reply.c b/deps/cares/src/ares_parse_naptr_reply.c index 11634df9847cc9..717d355778117f 100644 --- a/deps/cares/src/ares_parse_naptr_reply.c +++ b/deps/cares/src/ares_parse_naptr_reply.c @@ -110,6 +110,12 @@ ares_parse_naptr_reply (const unsigned char *abuf, int alen, status = ARES_EBADRESP; break; } + /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */ + if (rr_len < 7) + { + status = ARES_EBADRESP; + break; + } /* Check if we are really looking at a NAPTR record */ if (rr_class == C_IN && rr_type == T_NAPTR) @@ -185,4 +191,3 @@ ares_parse_naptr_reply (const unsigned char *abuf, int alen, return ARES_SUCCESS; } -