From b659c76c320de2d66c369f88d400a98aeb56d2d7 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Wed, 8 Feb 2017 00:48:28 +0100 Subject: TLS13: fix length of Finished message Select the full message instead of just the first 12 bytes (as was the case in previous TLS versions. No check is added since it is too much work for little gain (it would require looking up the hash length for the cipher suite). Change-Id: Iea13d5abe6a7e55b04fabacfa8919a02acd8517d Reviewed-on: https://code.wireshark.org/review/20011 Petri-Dish: Peter Wu Tested-by: Petri Dish Buildbot Reviewed-by: Peter Wu --- epan/dissectors/packet-dtls.c | 2 +- epan/dissectors/packet-ssl-utils.c | 10 ++++++++-- epan/dissectors/packet-ssl-utils.h | 2 +- epan/dissectors/packet-ssl.c | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) (limited to 'epan') diff --git a/epan/dissectors/packet-dtls.c b/epan/dissectors/packet-dtls.c index ea4e0eea69..871ae1e01e 100644 --- a/epan/dissectors/packet-dtls.c +++ b/epan/dissectors/packet-dtls.c @@ -1328,7 +1328,7 @@ dissect_dtls_handshake(tvbuff_t *tvb, packet_info *pinfo, case SSL_HND_FINISHED: ssl_dissect_hnd_finished(&dissect_dtls_hf, sub_tvb, ssl_hand_tree, - 0, session, NULL); + 0, length, session, NULL); break; case SSL_HND_CERT_URL: diff --git a/epan/dissectors/packet-ssl-utils.c b/epan/dissectors/packet-ssl-utils.c index 86d23ca9e9..94cd19f53f 100644 --- a/epan/dissectors/packet-ssl-utils.c +++ b/epan/dissectors/packet-ssl-utils.c @@ -7340,7 +7340,7 @@ ssl_dissect_hnd_cli_cert_verify(ssl_common_dissect_t *hf, tvbuff_t *tvb, /* Finished dissection. {{{ */ void ssl_dissect_hnd_finished(ssl_common_dissect_t *hf, tvbuff_t *tvb, - proto_tree *tree, guint32 offset, + proto_tree *tree, guint32 offset, guint32 offset_end, const SslSession *session, ssl_hfs_t *ssl_hfs) { /* For SSLv3: @@ -7353,6 +7353,11 @@ ssl_dissect_hnd_finished(ssl_common_dissect_t *hf, tvbuff_t *tvb, * struct { * opaque verify_data[12]; * } Finished; + * + * For TLS 1.3: + * struct { + * opaque verify_data[Hash.length]; + * } */ if (!tree) return; @@ -7365,8 +7370,9 @@ ssl_dissect_hnd_finished(ssl_common_dissect_t *hf, tvbuff_t *tvb, tvb, offset + 16, 20, ENC_NA); } } else { + /* Length should be 12 for TLS before 1.3, assume this is the case. */ proto_tree_add_item(tree, hf->hf.hs_finished, - tvb, offset, 12, ENC_NA); + tvb, offset, offset_end - offset, ENC_NA); } } /* }}} */ diff --git a/epan/dissectors/packet-ssl-utils.h b/epan/dissectors/packet-ssl-utils.h index fb51455d8f..61a5790b65 100644 --- a/epan/dissectors/packet-ssl-utils.h +++ b/epan/dissectors/packet-ssl-utils.h @@ -933,7 +933,7 @@ ssl_dissect_hnd_cli_cert_verify(ssl_common_dissect_t *hf, tvbuff_t *tvb, extern void ssl_dissect_hnd_finished(ssl_common_dissect_t *hf, tvbuff_t *tvb, - proto_tree *tree, guint32 offset, + proto_tree *tree, guint32 offset, guint32 offset_end, const SslSession *session, ssl_hfs_t *ssl_hfs); extern void diff --git a/epan/dissectors/packet-ssl.c b/epan/dissectors/packet-ssl.c index 96d6dec2f1..e9eaba3fe2 100644 --- a/epan/dissectors/packet-ssl.c +++ b/epan/dissectors/packet-ssl.c @@ -2169,7 +2169,7 @@ dissect_ssl3_handshake(tvbuff_t *tvb, packet_info *pinfo, case SSL_HND_FINISHED: ssl_dissect_hnd_finished(&dissect_ssl3_hf, tvb, ssl_hand_tree, - offset, session, &ssl_hfs); + offset, offset + length, session, &ssl_hfs); if (ssl) { ssl_load_keyfile(ssl_options.keylog_filename, &ssl_keylog_file, &ssl_master_key_map); tls13_change_key(ssl, &ssl_master_key_map, is_from_server, TLS_SECRET_APP); -- cgit v1.2.1