Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package tor: unblock tor/0.2.5.12-1 This version fixes several hidden service related denial of service bugs that have been fixed in stable with DSA 3216-1: - disgleirio discovered that a malicious client could trigger an assertion failure in a Tor instance providing a hidden service, thus rendering the service inaccessible. [CVE-2015-2928] - DonnchaC discovered that Tor clients would crash with an assertion failure upon parsing specially crafted hidden service descriptors. [CVE-2015-2929] - Introduction points would accept multiple INTRODUCE1 cells on one circuit, making it inexpensive for an attacker to overload a hidden service with introductions. Introduction points no longer allow multiple such cells on the same circuit. A complete debdiff of the source package to 0.2.5.11-1, the version currently in jessie, is attached. For your consideration, weasel
diff -Nru tor-0.2.5.11/ChangeLog tor-0.2.5.12/ChangeLog --- tor-0.2.5.11/ChangeLog 2015-03-17 14:39:09.000000000 +0100 +++ tor-0.2.5.12/ChangeLog 2015-04-06 15:57:54.000000000 +0200 @@ -1,3 +1,27 @@ +Changes in version 0.2.5.12 - 2015-04-06 + Tor 0.2.5.12 backports two fixes from 0.2.6.7 for security issues that + could be used by an attacker to crash hidden services, or crash clients + visiting hidden services. Hidden services should upgrade as soon as + possible; clients should upgrade whenever packages become available. + + This release also backports a simple improvement to make hidden + services a bit less vulnerable to denial-of-service attacks. + + o Major bugfixes (security, hidden service): + - Fix an issue that would allow a malicious client to trigger an + assertion failure and halt a hidden service. Fixes bug 15600; + bugfix on 0.2.1.6-alpha. Reported by "disgleirio". + - Fix a bug that could cause a client to crash with an assertion + failure when parsing a malformed hidden service descriptor. Fixes + bug 15601; bugfix on 0.2.1.5-alpha. Found by "DonnchaC". + + o Minor features (DoS-resistance, hidden service): + - Introduction points no longer allow multiple INTRODUCE1 cells to + arrive on the same circuit. This should make it more expensive for + attackers to overwhelm hidden services with introductions. + Resolves ticket 15515. + + Changes in version 0.2.5.11 - 2015-03-17 Tor 0.2.5.11 is the second stable release in the 0.2.5 series. diff -Nru tor-0.2.5.11/ReleaseNotes tor-0.2.5.12/ReleaseNotes --- tor-0.2.5.11/ReleaseNotes 2015-03-17 14:39:31.000000000 +0100 +++ tor-0.2.5.12/ReleaseNotes 2015-04-06 15:57:44.000000000 +0200 @@ -2,6 +2,30 @@ of Tor. If you want to see more detailed descriptions of the changes in each development snapshot, see the ChangeLog file. +Changes in version 0.2.5.12 - 2015-04-06 + Tor 0.2.5.12 backports two fixes from 0.2.6.7 for security issues that + could be used by an attacker to crash hidden services, or crash clients + visiting hidden services. Hidden services should upgrade as soon as + possible; clients should upgrade whenever packages become available. + + This release also backports a simple improvement to make hidden + services a bit less vulnerable to denial-of-service attacks. + + o Major bugfixes (security, hidden service): + - Fix an issue that would allow a malicious client to trigger an + assertion failure and halt a hidden service. Fixes bug 15600; + bugfix on 0.2.1.6-alpha. Reported by "disgleirio". + - Fix a bug that could cause a client to crash with an assertion + failure when parsing a malformed hidden service descriptor. Fixes + bug 15601; bugfix on 0.2.1.5-alpha. Found by "DonnchaC". + + o Minor features (DoS-resistance, hidden service): + - Introduction points no longer allow multiple INTRODUCE1 cells to + arrive on the same circuit. This should make it more expensive for + attackers to overwhelm hidden services with introductions. + Resolves ticket 15515. + + Changes in version 0.2.5.11 - 2015-03-17 Tor 0.2.5.11 is the second stable release in the 0.2.5 series. diff -Nru tor-0.2.5.11/configure tor-0.2.5.12/configure --- tor-0.2.5.11/configure 2015-03-12 17:56:50.000000000 +0100 +++ tor-0.2.5.12/configure 2015-04-06 16:04:40.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for tor 0.2.5.11. +# Generated by GNU Autoconf 2.69 for tor 0.2.5.12. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -577,8 +577,8 @@ # Identity of this package. PACKAGE_NAME='tor' PACKAGE_TARNAME='tor' -PACKAGE_VERSION='0.2.5.11' -PACKAGE_STRING='tor 0.2.5.11' +PACKAGE_VERSION='0.2.5.12' +PACKAGE_STRING='tor 0.2.5.12' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1374,7 +1374,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures tor 0.2.5.11 to adapt to many kinds of systems. +\`configure' configures tor 0.2.5.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1444,7 +1444,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of tor 0.2.5.11:";; + short | recursive ) echo "Configuration of tor 0.2.5.12:";; esac cat <<\_ACEOF @@ -1593,7 +1593,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -tor configure 0.2.5.11 +tor configure 0.2.5.12 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2298,7 +2298,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by tor $as_me 0.2.5.11, which was +It was created by tor $as_me 0.2.5.12, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3163,7 +3163,7 @@ # Define the identity of the package. PACKAGE='tor' - VERSION='0.2.5.11' + VERSION='0.2.5.12' cat >>confdefs.h <<_ACEOF @@ -13220,7 +13220,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by tor $as_me 0.2.5.11, which was +This file was extended by tor $as_me 0.2.5.12, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13286,7 +13286,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -tor config.status 0.2.5.11 +tor config.status 0.2.5.12 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru tor-0.2.5.11/configure.ac tor-0.2.5.12/configure.ac --- tor-0.2.5.11/configure.ac 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/configure.ac 2015-04-06 15:57:08.000000000 +0200 @@ -3,7 +3,7 @@ dnl Copyright (c) 2007-2013, The Tor Project, Inc. dnl See LICENSE for licensing information -AC_INIT([tor],[0.2.5.11]) +AC_INIT([tor],[0.2.5.12]) AC_CONFIG_SRCDIR([src/or/main.c]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE diff -Nru tor-0.2.5.11/contrib/win32build/tor-mingw.nsi.in tor-0.2.5.12/contrib/win32build/tor-mingw.nsi.in --- tor-0.2.5.11/contrib/win32build/tor-mingw.nsi.in 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/contrib/win32build/tor-mingw.nsi.in 2015-04-06 15:57:08.000000000 +0200 @@ -8,7 +8,7 @@ !include "LogicLib.nsh" !include "FileFunc.nsh" !insertmacro GetParameters -!define VERSION "0.2.5.11" +!define VERSION "0.2.5.12" !define INSTALLER "tor-${VERSION}-win32.exe" !define WEBSITE "https://www.torproject.org/" !define LICENSE "LICENSE" diff -Nru tor-0.2.5.11/debian/changelog tor-0.2.5.12/debian/changelog --- tor-0.2.5.11/debian/changelog 2015-04-06 23:10:00.000000000 +0200 +++ tor-0.2.5.12/debian/changelog 2015-04-06 23:10:00.000000000 +0200 @@ -1,3 +1,15 @@ +tor (0.2.5.12-1) unstable; urgency=medium + + * New upstream version, fixing hidden service related Denial of + Service bugs: + - Fix two remotely triggerable assertion failures (upstream bugs + #15600 and #15601). + - Disallow multiple INTRODUCE1 cells on the same circuit at introduction + points, making overwhelming hidden services with introductions more + expensive (upstream bug #15515). + + -- Peter Palfrader <wea...@debian.org> Mon, 06 Apr 2015 17:20:40 +0200 + tor (0.2.5.11-1) unstable; urgency=medium * New upstream version. diff -Nru tor-0.2.5.11/debian/micro-revision.i tor-0.2.5.12/debian/micro-revision.i --- tor-0.2.5.11/debian/micro-revision.i 2015-04-06 23:10:00.000000000 +0200 +++ tor-0.2.5.12/debian/micro-revision.i 2015-04-06 23:10:00.000000000 +0200 @@ -1 +1 @@ -"4c631772c5fcaa0a" +"3731dd5c3071dcba" diff -Nru tor-0.2.5.11/micro-revision.i tor-0.2.5.12/micro-revision.i --- tor-0.2.5.11/micro-revision.i 2015-03-17 14:43:51.000000000 +0100 +++ tor-0.2.5.12/micro-revision.i 2015-04-06 16:04:55.000000000 +0200 @@ -1 +1 @@ -"cfb61f909a53c4eb" +"99d0579ff5e0349f" diff -Nru tor-0.2.5.11/src/or/or.h tor-0.2.5.12/src/or/or.h --- tor-0.2.5.11/src/or/or.h 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/src/or/or.h 2015-04-06 15:31:07.000000000 +0200 @@ -3186,6 +3186,9 @@ * to the specification? */ unsigned int remaining_relay_early_cells : 4; + /* We have already received an INTRODUCE1 cell on this circuit. */ + unsigned int already_received_introduce1 : 1; + /** True iff this circuit was made with a CREATE_FAST cell. */ unsigned int is_first_hop : 1; diff -Nru tor-0.2.5.11/src/or/or_sha1.i tor-0.2.5.12/src/or/or_sha1.i --- tor-0.2.5.11/src/or/or_sha1.i 2015-03-12 18:10:59.000000000 +0100 +++ tor-0.2.5.12/src/or/or_sha1.i 2015-04-06 15:50:18.000000000 +0200 @@ -40,14 +40,14 @@ "d1aaa56a945408cc2cb56b7b85c46797e14ddaa4 src/or/reasons.c\n" "08b50d1f2bba4b9488e5a6fbd00e56cefc7eedeb src/or/relay.c\n" "ca4771974f9cc944af02b158debd0a462c7878e2 src/or/rendclient.c\n" -"d55461d67378f11b97d593a77d22bbfcf63ea7dc src/or/rendcommon.c\n" -"71e6cf8f3cccaa21375fbf53e16f4d4b26a4fb7e src/or/rendmid.c\n" -"28010c1000c9b388785d1b262b104a46e4bdd331 src/or/rendservice.c\n" +"e57f8cbbf60ced0e7b833ced2909d7c0ac78b2c9 src/or/rendcommon.c\n" +"bb6e5d542cb280d313a02a5582a8c89f734d4ef2 src/or/rendmid.c\n" +"35b72cf4f5baada5a682c9cad5dc23a30f69898f src/or/rendservice.c\n" "97cc7596f92bb7087dd0a804808f699cd4ceb1ad src/or/rephist.c\n" "d58afa23a92c38557b8b57084fe70c919869ca89 src/or/replaycache.c\n" "fbf6d291c383f41ba27341ccf7992c9854680ccb src/or/router.c\n" "609c911bf2adfd6882653d22e16a730a09fb57e1 src/or/routerlist.c\n" -"e97c4a144832c6c8fd49c5ee9edaf917c0d671c7 src/or/routerparse.c\n" +"38fae5ab42c96e4e27811f996e372e544700ebf0 src/or/routerparse.c\n" "b054456aec98b6a62530ac89c26d904f130e291a src/or/routerset.c\n" "37f35d692f088efd623d43de7b74fc1bc96ee9ea src/or/statefile.c\n" "1fc9dbc01196714bea89a335040882ffb6874544 src/or/status.c\n" @@ -92,7 +92,7 @@ "33245d34d6bfbc6c8c700264318c5a594716b5d8 src/or/onion_fast.h\n" "e0ccc9ed34e5f206f5ea57847c4e41a19f7ad2b3 src/or/onion_ntor.h\n" "485bf9e2effe89a3f41b28fbd9d80a57ce339cbf src/or/onion_tap.h\n" -"224b41517a7e5115777fbe10e32fbd79e72df2d0 src/or/or.h\n" +"169db0a79fa47f9f5a314a9dfd6aeb91fc06424a src/or/or.h\n" "cb3bef4fc90263eb0e0e15fb3f4bf7c06b49712b src/or/transports.h\n" "1f345df3b6f89db0f35eb85225e496bfbabb4c25 src/or/policies.h\n" "c492ec75acc2dd3365d79b1c72f350aabdc03196 src/or/reasons.h\n" diff -Nru tor-0.2.5.11/src/or/rendcommon.c tor-0.2.5.12/src/or/rendcommon.c --- tor-0.2.5.11/src/or/rendcommon.c 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/src/or/rendcommon.c 2015-04-06 15:31:09.000000000 +0200 @@ -1087,7 +1087,7 @@ goto err; } /* Decode/decrypt introduction points. */ - if (intro_content) { + if (intro_content && intro_size > 0) { int n_intro_points; if (rend_query->auth_type != REND_NO_AUTH && !tor_mem_is_zero(rend_query->descriptor_cookie, diff -Nru tor-0.2.5.11/src/or/rendmid.c tor-0.2.5.12/src/or/rendmid.c --- tor-0.2.5.11/src/or/rendmid.c 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/src/or/rendmid.c 2015-04-06 15:31:07.000000000 +0200 @@ -149,6 +149,20 @@ goto err; } + /* We have already done an introduction on this circuit but we just + received a request for another one. We block it since this might + be an attempt to DoS a hidden service (#15515). */ + if (circ->already_received_introduce1) { + log_fn(LOG_PROTOCOL_WARN, LD_REND, + "Blocking multiple introductions on the same circuit. " + "Someone might be trying to attack a hidden service through " + "this relay."); + circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL); + return -1; + } + + circ->already_received_introduce1 = 1; + /* We could change this to MAX_HEX_NICKNAME_LEN now that 0.0.9.x is * obsolete; however, there isn't much reason to do so, and we're going * to revise this protocol anyway. diff -Nru tor-0.2.5.11/src/or/rendservice.c tor-0.2.5.12/src/or/rendservice.c --- tor-0.2.5.11/src/or/rendservice.c 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/src/or/rendservice.c 2015-04-06 15:31:09.000000000 +0200 @@ -1819,6 +1819,16 @@ goto err; } + if (128 != crypto_pk_keysize(extend_info->onion_key)) { + if (err_msg_out) { + tor_asprintf(err_msg_out, + "invalid onion key size in version %d INTRODUCE%d cell", + intro->version, + (intro->type)); + } + + goto err; + } ver_specific_len = 7+DIGEST_LEN+2+klen; diff -Nru tor-0.2.5.11/src/or/routerparse.c tor-0.2.5.12/src/or/routerparse.c --- tor-0.2.5.11/src/or/routerparse.c 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/src/or/routerparse.c 2015-04-06 15:31:09.000000000 +0200 @@ -4684,7 +4684,7 @@ size_t intro_points_encoded_size) { const char *current_ipo, *end_of_intro_points; - smartlist_t *tokens; + smartlist_t *tokens = NULL; directory_token_t *tok; rend_intro_point_t *intro; extend_info_t *info; @@ -4693,8 +4693,10 @@ tor_assert(parsed); /** Function may only be invoked once. */ tor_assert(!parsed->intro_nodes); - tor_assert(intro_points_encoded); - tor_assert(intro_points_encoded_size > 0); + if (!intro_points_encoded || intro_points_encoded_size == 0) { + log_warn(LD_REND, "Empty or zero size introduction point list"); + goto err; + } /* Consider one intro point after the other. */ current_ipo = intro_points_encoded; end_of_intro_points = intro_points_encoded + intro_points_encoded_size; @@ -4798,8 +4800,10 @@ done: /* Free tokens and clear token list. */ - SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); - smartlist_free(tokens); + if (tokens) { + SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); + smartlist_free(tokens); + } if (area) memarea_drop_all(area); diff -Nru tor-0.2.5.11/src/win32/orconfig.h tor-0.2.5.12/src/win32/orconfig.h --- tor-0.2.5.11/src/win32/orconfig.h 2015-03-12 17:49:50.000000000 +0100 +++ tor-0.2.5.12/src/win32/orconfig.h 2015-04-06 15:57:08.000000000 +0200 @@ -241,7 +241,7 @@ #define USING_TWOS_COMPLEMENT /* Version number of package */ -#define VERSION "0.2.5.11" +#define VERSION "0.2.5.12"