Non TLS-compliant behviour
GnuTLS shows non TLS-Standard compliant behavior in two ways:
-
INTERNAL_ERROR
alerts are sent as part of TLS-Protocol related errors. This is a similar issue to the one reported here - After receiving an
ILLEGAL_PARAMTER
alert from a peer during handshake, GnuTLS replied with anINTERNAL_ERROR
alert of its own instead of immediately closing the connection as required by the TLS standard (section Error Alerts).
This problem has been observed as part of a failed ECDHEKeyExchange.
Additional Remarks
INTERNAL_ERRORS
should never be sent in recation to TLS-Protocol related
errors.
When omitting the configuration settings (supplied to TLS-Attacker through the
CLI option -config
) GnuTLS responds with an UNEXPECTED_MESSAGE
alert, which
it must not do after receiving a fatal alert from its peer.
Steps to reproduce
- Get TLS-Attacker
git clone https://github.com/RUB-NDS/TLS-Attacker.git
-
Build TLS-Attacker (Maven required) cd TLS-Attacker mvn clean install
-
Download this workflow trace 90a6d4a43ee68c7f_0.861710.wt.xml and this configuration file 90a6d4a43ee68c7f_0.861710.cfg.xml to the TLS-Attacker directory.
-
Start TLS-Attacker
export tid=90a6d4a43ee68c7f_0.861710 && apps/TLS-Server.jar -port 42247 -workflow_input no_supported_ecc_curves/$tid.wt.xml -config no_supported_ecc_curves/$tid.cfg.xml
- Run GnuTLS against TLS-Attacker
src/gnutls-cli --no-ca-verification -p 42247 localhost
Plattform information
GnuTLS:
echo -e "GITREV: $(git describe --tags) ($(git rev-parse HEAD))"
GITREV: gnutls_3_6_4 (1c0b4baa6a88bfb79a30eb6fb7c579688d40034e)
Environment and toolchain info
========================================================
TLS Fuzzing on Scale - System Report 2018-12-24 23:30:08
========================================================
Client ID: 90a6d4a43ee68c7f
Hostname: ubuntu
NetAddr: 192.168.129.162:39083
=========
Plattform
=========
CPU: QEMU Virtual CPU version 2.5+ 4x2393.998MHz
Main Memory: 3.85 GiB
Distribution: Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
OS/Arch: Linux 4.15.0-39-generic x86_64 GNU/Linux
============================
Compiler/Runtime/Interpreter
============================
C/C++
-----
afl-clang: clang version 4.0.1-10 (tags/RELEASE_401/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
afl-gcc: gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
clang: clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
GCC: gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
xlC: [Missing/Unknown]
Java
----
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
Perl
----
This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-gnu-thread-multi
(with 67 registered patches, see perl -V for more detail)
Copyright 1987-2017, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
Python
------
Python 2: Python 2.7.15rc1
Python 3: Python 3.6.7
==============
GNU tool chain
==============
autoconf: autoconf (GNU Autoconf) 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by David J. MacKenzie and Akim Demaille.
automake: automake (GNU automake) 1.15.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Tom Tromey <tromey@redhat.com>
and Alexandre Duret-Lutz <adl@gnu.org>.
ar: GNU ar (GNU Binutils for Ubuntu) 2.30
Copyright (C) 2018 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) any later version.
This program has absolutely no warranty.
gold: GNU gold (GNU Binutils for Ubuntu 2.30) 1.15
Copyright (C) 2018 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
ld: GNU ld (GNU Binutils for Ubuntu) 2.30
Copyright (C) 2018 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
make: GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Code locations triggering the observed error message
0 errors.c <global> 372 GNUTLS_E_ECC_NO_SUPPORTED_CURVES),
1 gnutls.h <global> 3163 #define GNUTLS_E_ECC_NO_SUPPORTED_CURVES -321
2 gnutls.h <global> 2804 #define GNUTLS_E_ECC_NO_SUPPORTED_CURVES -321
3 ecdhe.c _gnutls_proc_ecdh_common_client_kx 149 return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES);
4 ecdhe.c _gnutls_proc_ecdh_common_client_kx 153 return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES);
5 ecdhe.c _gnutls_gen_ecdh_common_client_kx_int 248 return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES);
6 ecdhe.c _gnutls_gen_ecdh_common_client_kx_int 252 return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES);
7 ecdhe.c _gnutls_proc_ecdh_common_server_kx 346 return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES);
8 ecdhe.c _gnutls_ecdh_common_print_server_kx 419 return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES);
9 ecdhe.c _gnutls_ecdh_common_print_server_kx 473 return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES);
Edited by Matthias Gierlings