From e4815a0bd2bcb00abea63f651284100028e3436c Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Wed, 2 Nov 2016 09:41:37 +0000 Subject: [PATCH] Add a test for unrecognised record types We should fail if we receive an unrecognised record type Reviewed-by: Tim Hudson (cherry picked from commit 1f3e70a450364e3152973380ea4d3bb6694f3980) --- test/recipes/70-test_sslrecords.t | 48 ++++++++++++++++++++++++++++++- util/TLSProxy/Record.pm | 6 ++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/test/recipes/70-test_sslrecords.t b/test/recipes/70-test_sslrecords.t index d1c8d3ad2a..d3702f259a 100644 --- a/test/recipes/70-test_sslrecords.t +++ b/test/recipes/70-test_sslrecords.t @@ -38,7 +38,11 @@ my $proxy = TLSProxy::Proxy->new( my $content_type = TLSProxy::Record::RT_APPLICATION_DATA; my $inject_recs_num = 1; $proxy->start() or plan skip_all => "Unable to start up Proxy for tests"; -plan tests => 9; +my $num_tests = 10; +if (!disabled("tls1_1")) { + $num_tests++; +} +plan tests => $num_tests; ok(TLSProxy::Message->fail(), "Out of context empty records test"); #Test 2: Injecting in context empty records should succeed @@ -107,6 +111,23 @@ $sslv2testtype = ALERT_BEFORE_SSLV2; $proxy->clear(); $proxy->start(); ok(TLSProxy::Message->fail(), "Alert before SSLv2 ClientHello test"); + +#Unregcognised record type tests + +#Test 10: Sending an unrecognised record type in TLS1.2 should fail +$proxy->clear(); +$proxy->filter(\&add_unknown_record_type); +$proxy->start(); +ok(TLSProxy::Message->fail(), "Unrecognised record type in TLS1.2"); + +#Test 11: Sending an unrecognised record type in TLS1.1 should fail +if (!disabled("tls1_1")) { + $proxy->clear(); + $proxy->clientflags("-tls1_1"); + $proxy->start(); + ok(TLSProxy::Message->fail(), "Unrecognised record type in TLS1.1"); +} + sub add_empty_recs_filter { my $proxy = shift; @@ -333,3 +354,28 @@ sub add_sslv2_filter } } + +sub add_unknown_record_type +{ + my $proxy = shift; + + # We'll change a record after the initial version neg has taken place + if ($proxy->flight != 2) { + return; + } + + my $lastrec = ${$proxy->record_list}[-1]; + my $record = TLSProxy::Record->new( + 2, + TLSProxy::Record::RT_UNKNOWN, + $lastrec->version(), + 1, + 0, + 1, + 1, + "X", + "X" + ); + + unshift @{$proxy->record_list}, $record; +} diff --git a/util/TLSProxy/Record.pm b/util/TLSProxy/Record.pm index 423bad3bf1..a75d8cdfbd 100644 --- a/util/TLSProxy/Record.pm +++ b/util/TLSProxy/Record.pm @@ -22,14 +22,16 @@ use constant { RT_APPLICATION_DATA => 23, RT_HANDSHAKE => 22, RT_ALERT => 21, - RT_CCS => 20 + RT_CCS => 20, + RT_UNKNOWN => 100 }; my %record_type = ( RT_APPLICATION_DATA, "APPLICATION DATA", RT_HANDSHAKE, "HANDSHAKE", RT_ALERT, "ALERT", - RT_CCS, "CCS" + RT_CCS, "CCS", + RT_UNKNOWN, "UNKNOWN" ); use constant { -- 2.25.1