Skip to content

Commit 2ab0f31

Browse files
committed
Mitigate inconsistent test results for ROBOT (3.2)
As reported a longer while back in #2083 there were trailing bytes when receiving a TLS alert by the ROBOT check. This PR corrects and thus normalizes the length of the TLS alert message to the correct value, supposed the length in the TLS alert is two bytes and it is an TLS alert. PR for 3.3dev was #2969 . Also this PR now uses a separate variable for the timeout. Using a separate global variable may offer some possibility for tuning the check when the latency to the target is high. This is still subject of research. The variable is 10 seconds here to be in line with MAX_WAITSOCK which (name) was used previously.
1 parent e456679 commit 2ab0f31

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

testssl.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ MAX_HEADER_FAIL=${MAX_HEADER_FAIL:-2} # If this many failures for HTTP GET are
207207
MAX_WAITSOCK=${MAX_WAITSOCK:-10} # waiting at max 10 seconds for socket reply. There shouldn't be any reason to change this.
208208
CCS_MAX_WAITSOCK=${CCS_MAX_WAITSOCK:-5} # for the two CCS payload (each). There shouldn't be any reason to change this.
209209
HEARTBLEED_MAX_WAITSOCK=${HEARTBLEED_MAX_WAITSOCK:-8} # for the heartbleed payload. There shouldn't be any reason to change this.
210+
ROBOT_TIMEOUT=${ROBOT_TIMEOUT:10} # Initial timeout for ROBOT check
210211
STARTTLS_SLEEP=${STARTTLS_SLEEP:-10} # max time wait on a socket for STARTTLS. MySQL has a fixed value of 1 which can't be overwritten (#914)
211212
FAST_STARTTLS=${FAST_STARTTLS:-true} # at the cost of reliability decrease the handshakes for STARTTLS
212213
USLEEP_SND=${USLEEP_SND:-0.1} # sleep time for general socket send
@@ -20400,7 +20401,7 @@ run_robot() {
2040020401
local -i i subret len iteration testnum pubkeybytes
2040120402
local pubkeybits
2040220403
local vulnerable=false send_ccs_finished=true
20403-
local -i start_time end_time robottimeout=$MAX_WAITSOCK
20404+
local -i start_time end_time robottimeout=$ROBOT_TIMEOUT
2040420405
local cve="CVE-2017-17382 CVE-2017-17427 CVE-2017-17428 CVE-2017-13098 CVE-2017-1000385 CVE-2017-13099 CVE-2016-6883 CVE-2012-5081 CVE-2017-6168"
2040520406
local cwe="CWE-203"
2040620407
local jsonID="ROBOT"
@@ -20571,6 +20572,11 @@ run_robot() {
2057120572
end_time=$(LC_ALL=C date "+%s")
2057220573
resp=$(hexdump -v -e '16/1 "%02x"' "$SOCK_REPLY_FILE")
2057320574
response[testnum]="${resp%%[!0-9A-F]*}"
20575+
# TLS alert length seems to vary sometimes within this loop which leads to
20576+
# wrong test results, see #2083. Thus we cut this here to length 14, if
20577+
# it's a TLS alert with the length of 2
20578+
[[ ${response[testnum]::2} == 15 ]] && [[ ${response[testnum]:10:2} == 02 ]] &&
20579+
response[testnum]=${response[testnum]::14}
2057420580
# The first time a response is received to a client key
2057520581
# exchange message, measure the amount of time it took to
2057620582
# receive a response and set the timeout value for future

0 commit comments

Comments
 (0)