CVE-2020-10745: dns_util/push: forbid names longer than 255 bytes
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 14 May 2020 12:06:08 +0000 (00:06 +1200)
committerKarolin Seeger <kseeger@samba.org>
Thu, 2 Jul 2020 09:01:41 +0000 (09:01 +0000)
As per RFC 1035.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14378

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
librpc/ndr/ndr_dns_utils.c
selftest/knownfail.d/ndr_dns_nbt

index 6931dac422d038f16ebc3b8f1c5f563e547e1a0b..b7f11dbab4e967d892a0ff200dbdd978f1306fb5 100644 (file)
@@ -11,6 +11,8 @@ enum ndr_err_code ndr_push_dns_string_list(struct ndr_push *ndr,
                                           int ndr_flags,
                                           const char *s)
 {
+       const char *start = s;
+
        if (!(ndr_flags & NDR_SCALARS)) {
                return NDR_ERR_SUCCESS;
        }
@@ -84,7 +86,13 @@ enum ndr_err_code ndr_push_dns_string_list(struct ndr_push *ndr,
                talloc_free(compname);
 
                s += complen;
-               if (*s == '.') s++;
+               if (*s == '.') {
+                       s++;
+               }
+               if (s - start > 255) {
+                       return ndr_push_error(ndr, NDR_ERR_STRING,
+                                             "name > 255 character long");
+               }
        }
 
        /* if we reach the end of the string and have pushed the last component
index e11c121b7a7b7238a1a96c591763e975714fc497..603395c8c502bd48f959acd55bd7b0a92c3ff528 100644 (file)
@@ -1,3 +1,2 @@
-librpc.ndr.ndr_dns_nbt.test_ndr_dns_string_half_dots
 librpc.ndr.ndr_dns_nbt.test_ndr_nbt_string_all_dots
 librpc.ndr.ndr_dns_nbt.test_ndr_nbt_string_half_dots