aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorToni <matzeton@googlemail.com>2023-07-07 18:52:06 +0200
committerGitHub <noreply@github.com>2023-07-07 18:52:06 +0200
commit859d9ea3c33c3ed54c159658a94381fdd4e7eccb (patch)
tree188afcb733e2e3f5168306e5556f183d81855070 /src
parent72814bed338f762dc29b94064c1ecffd2cb3f228 (diff)
Fixed heap-overflow if compiled with `--enable-tls-sigs`. (#2038)
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'src')
-rw-r--r--src/lib/protocols/tls.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/lib/protocols/tls.c b/src/lib/protocols/tls.c
index e2c20ee03..709a77a96 100644
--- a/src/lib/protocols/tls.c
+++ b/src/lib/protocols/tls.c
@@ -2250,10 +2250,13 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct,
tot_signature_algorithms_len = ndpi_min((sizeof(ja3.client.signature_algorithms) / 2) - 1, tot_signature_algorithms_len);
#ifdef TLS_HANDLE_SIGNATURE_ALGORITMS
- flow->protos.tls_quic.num_tls_signature_algorithms = ndpi_min(tot_signature_algorithms_len / 2, MAX_NUM_TLS_SIGNATURE_ALGORITHMS);
+ size_t size = ndpi_min(tot_signature_algorithms_len / 2, MAX_NUM_TLS_SIGNATURE_ALGORITHMS);
- memcpy(flow->protos.tls_quic.client_signature_algorithms,
- &packet->payload[s_offset], 2 /* 16 bit */*flow->protos.tls_quic.num_tls_signature_algorithms);
+ if (s_offset + 2 * size <= packet->payload_packet_len) {
+ flow->protos.tls_quic.num_tls_signature_algorithms = size;
+ memcpy(flow->protos.tls_quic.client_signature_algorithms,
+ &packet->payload[s_offset], 2 /* 16 bit */ * size);
+ }
#endif
for(i=0; i<tot_signature_algorithms_len && s_offset+i<total_len; i++) {