diff options
author | Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> | 2021-10-22 14:57:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-22 14:57:49 +0200 |
commit | 333a6d60e8ab9c9cd5479a058f8b0c482c5cd2d9 (patch) | |
tree | 1aca1f520fde4e928be9b74f6e564f3273534a11 | |
parent | c3d1c69722f31791ad718bfe3a265c0df22b9997 (diff) |
TLS: fix a heap-buffer-overflow (#1356)
Revert of c3d1c697
Error reproducible with the attached pcap and valgrind
-rw-r--r-- | src/lib/protocols/tls.c | 4 | ||||
-rw-r--r-- | tests/pcap/tls_cipher_lens.pcap | bin | 0 -> 1520 bytes | |||
-rw-r--r-- | tests/result/tls_cipher_lens.pcap.out | 16 |
3 files changed, 18 insertions, 2 deletions
diff --git a/src/lib/protocols/tls.c b/src/lib/protocols/tls.c index bfff42033..d5fa5db1b 100644 --- a/src/lib/protocols/tls.c +++ b/src/lib/protocols/tls.c @@ -1533,10 +1533,10 @@ int processClientServerHello(struct ndpi_detection_module_struct *ndpi_struct, printf("Client TLS [client cipher_len: %u][tls_version: 0x%04X]\n", cipher_len, tls_version); #endif - if((cipher_offset+cipher_len) <= total_len) { + if((cipher_offset+cipher_len) <= total_len - 1) { /* -1 because variable "id" is a u_int16_t */ u_int8_t safari_ciphers = 0, chrome_ciphers = 0, this_is_not_safari = 0, looks_like_safari_on_big_sur = 0; - for(i=0; i<cipher_len-1;) { + for(i=0; i<cipher_len;) { u_int16_t *id = (u_int16_t*)&packet->payload[cipher_offset+i]; u_int16_t cipher_id = ntohs(*id); diff --git a/tests/pcap/tls_cipher_lens.pcap b/tests/pcap/tls_cipher_lens.pcap Binary files differnew file mode 100644 index 000000000..493c2b06d --- /dev/null +++ b/tests/pcap/tls_cipher_lens.pcap diff --git a/tests/result/tls_cipher_lens.pcap.out b/tests/result/tls_cipher_lens.pcap.out new file mode 100644 index 000000000..49999c699 --- /dev/null +++ b/tests/result/tls_cipher_lens.pcap.out @@ -0,0 +1,16 @@ +Guessed flow protos: 5 + +DPI Packets (TCP): 5 (1.00 pkts/flow) + +Google 5 1165 5 + +JA3 Host Stats: + IP Address # JA3C + 1 192.168.11.11 2 + + + 1 TCP 192.168.11.11:51587 -> 173.194.35.191:443 [proto: 91.126/TLS.Google][Encrypted][cat: Web/5][1 pkts/233 bytes -> 0 pkts/0 bytes][Goodput ratio: 76/0][< 1 sec][Risk: ** Obsolete TLS version (older than 1.2) **][Risk Score: 100][TLSv1][Client: www.google.it][JA3C: 755cdaa3496eb8728247a639dee17aad][PLAIN TEXT (www.google.it)][Plen Bins: 0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + 2 TCP 192.168.11.11:51588 -> 173.194.35.191:443 [proto: 91.126/TLS.Google][Encrypted][cat: Web/5][1 pkts/233 bytes -> 0 pkts/0 bytes][Goodput ratio: 76/0][< 1 sec][Risk: ** Obsolete TLS version (older than 1.2) **][Risk Score: 100][TLSv1][JA3C: 05adadac4943351d1423c19e65c288d0][PLAIN TEXT (www.google.it)][Plen Bins: 0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + 3 TCP 192.168.11.11:51589 -> 173.194.35.191:443 [proto: 91.126/TLS.Google][Encrypted][cat: Web/5][1 pkts/233 bytes -> 0 pkts/0 bytes][Goodput ratio: 76/0][< 1 sec][Risk: ** Obsolete TLS version (older than 1.2) **][Risk Score: 100][TLSv1][PLAIN TEXT (www.google.it)][Plen Bins: 0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + 4 TCP 192.168.11.11:51590 -> 173.194.35.191:443 [proto: 91.126/TLS.Google][Encrypted][cat: Web/5][1 pkts/233 bytes -> 0 pkts/0 bytes][Goodput ratio: 76/0][< 1 sec][Risk: ** Obsolete TLS version (older than 1.2) **][Risk Score: 100][TLSv1][PLAIN TEXT (www.google.it)][Plen Bins: 0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + 5 TCP 192.168.11.11:51591 -> 173.194.35.191:443 [proto: 91.126/TLS.Google][Encrypted][cat: Web/5][1 pkts/233 bytes -> 0 pkts/0 bytes][Goodput ratio: 76/0][< 1 sec][Risk: ** Obsolete TLS version (older than 1.2) **][Risk Score: 100][TLSv1][PLAIN TEXT (www.google.it)][Plen Bins: 0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] |