From debbugs-submit-bounces@debbugs.gnu.org Thu Jan 11 18:21:22 2018
Received: (at submit) by debbugs.gnu.org; 11 Jan 2018 23:21:22 +0000
Received: from localhost ([127.0.0.1]:52677 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from )
id 1eZm9r-0000XB-G1
for submit@debbugs.gnu.org; Thu, 11 Jan 2018 18:21:22 -0500
Received: from eggs.gnu.org ([208.118.235.92]:45918)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from ) id 1eZm9n-0000Ww-8l
for submit@debbugs.gnu.org; Thu, 11 Jan 2018 18:21:14 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from ) id 1eZm9f-00051O-SB
for submit@debbugs.gnu.org; Thu, 11 Jan 2018 18:21:06 -0500
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level:
X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,T_DKIM_INVALID
autolearn=disabled version=3.3.2
Received: from lists.gnu.org ([2001:4830:134:3::11]:49932)
by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
(Exim 4.71) (envelope-from ) id 1eZm9f-00051C-OM
for submit@debbugs.gnu.org; Thu, 11 Jan 2018 18:21:03 -0500
Received: from eggs.gnu.org ([2001:4830:134:3::10]:36829)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from ) id 1eZm9c-00010N-IP
for guix-patches@gnu.org; Thu, 11 Jan 2018 18:21:03 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from ) id 1eZm9X-0004vG-La
for guix-patches@gnu.org; Thu, 11 Jan 2018 18:21:00 -0500
Received: from out3-smtp.messagingengine.com ([66.111.4.27]:50105)
by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
(Exim 4.71) (envelope-from ) id 1eZm9X-0004ua-AS
for guix-patches@gnu.org; Thu, 11 Jan 2018 18:20:55 -0500
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
by mailout.nyi.internal (Postfix) with ESMTP id D7ADA20BF3;
Thu, 11 Jan 2018 18:20:54 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
by compute4.internal (MEProxy); Thu, 11 Jan 2018 18:20:54 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=famulari.name;
h=date:from:message-id:subject:to:x-me-sender:x-me-sender
:x-sasl-enc; s=mesmtp; bh=cSDTQRxkY9rU2p1b8CcJlGNKAZkGHic++FKHnF
n/Xr8=; b=ek2MWLIFSxaJkKDA3+tocKtDFKBUdI7FWrLfIQaVShYg4yQ3Ys3Oka
Dx+aq7m3hslJuiruqNy9SFmD99rBC2+ZQ9Ju4v5gPTTzqkC62PlHyVL3PoER/TVD
DKgBsmDbwv9/1PDkssoos5sJ12zTlEqk63f5qZ1BWYclncoFC3uAY=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
messagingengine.com; h=date:from:message-id:subject:to
:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=cSDTQRxkY9rU2p1b8
CcJlGNKAZkGHic++FKHnFn/Xr8=; b=OGCtKKv+8ZfnDEB0w4CD7d+w7ZeiPe+FR
f4rSFzMyGJCEpw3tOU5LCY196ukGtxCeR4mjfZQV8j7i0sfQttf85ubQt3B6Gmap
tStCahl1kM2QT4Q32VVK9r0DqgEfV4XGkcEroCbBvuajFutA1zSjKR/EMSEiphrb
u3AcevduzCee2/X5/iAPo5QdSivi5GVnI/ow7L6G/e+0N+E4Rmj0imgOW4L1jt1E
UuERm8+j4B0lhpw+75a6iilrTFE4H/zAMkZZUt75AtHK6+d/dDigXBaWhejDqB9Q
7UlYfRZf5Codtdl5OclbsQl56ZDJb5yw38uii88o3KItJFHualirw==
X-ME-Sender:
Received: from jasmine.lan (unknown [162.208.95.194])
by mail.messagingengine.com (Postfix) with ESMTPA id 600892473E
for ; Thu, 11 Jan 2018 18:20:54 -0500 (EST)
From: Leo Famulari
To: guix-patches@gnu.org
Subject: [PATCH] gnu: transmission: Fix a DNS rebinding vulnerability that
allows RCE.
Date: Thu, 11 Jan 2018 15:20:48 -0800
Message-Id: <139e227515c0e99297951c92d498e3c01f34ccf4.1515712746.git.leo@famulari.name>
X-Mailer: git-send-email 2.15.1
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]
[fuzzy]
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x
X-Received-From: 2001:4830:134:3::11
X-Spam-Score: -4.1 (----)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit@debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: debbugs-submit-bounces@debbugs.gnu.org
Sender: "Debbugs-submit"
X-Spam-Score: -4.1 (----)
As the patch commentary says, I adapted this patch to apply to the
latest Transmission release. However, there is a new test failure with
these changes, so I'm waiting for advice:
https://github.com/transmission/transmission/pull/468#issuecomment-357091126
* gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/bittorrent.scm (transmission)[source]: Use it.
---
gnu/local.mk | 1 +
gnu/packages/bittorrent.scm | 1 +
.../transmission-fix-dns-rebinding-vuln.patch | 302 +++++++++++++++++++++
3 files changed, 304 insertions(+)
create mode 100644 gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index eec46af0d..c77c446ee 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1107,6 +1107,7 @@ dist_patch_DATA = \
%D%/packages/patches/tipp10-fix-compiling.patch \
%D%/packages/patches/tipp10-remove-license-code.patch \
%D%/packages/patches/tk-find-library.patch \
+ %D%/packages/patches/transmission-fix-dns-rebinding-vuln.patch \
%D%/packages/patches/ttf2eot-cstddef.patch \
%D%/packages/patches/ttfautohint-source-date-epoch.patch \
%D%/packages/patches/tophat-build-with-later-seqan.patch \
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index eca064620..800a42eea 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -66,6 +66,7 @@
(uri (string-append
"https://transmission.cachefly.net/transmission-"
version ".tar.xz"))
+ (patches (search-patches "transmission-fix-dns-rebinding-vuln.patch"))
(sha256
(base32
"0pykmhi7pdmzq47glbj8i2im6iarp4wnj4l1pyvsrnba61f0939s"))))
diff --git a/gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch b/gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch
new file mode 100644
index 000000000..5c3b6d165
--- /dev/null
+++ b/gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch
@@ -0,0 +1,302 @@
+Fix a weakness that allows remote code execution via the Transmission
+RPC server using DNS rebinding:
+
+https://bugs.chromium.org/p/project-zero/issues/detail?id=1447
+
+Patch adapted from Tavis Ormandy's patch on the Transmission master
+branch to the Transmission 2.92 release by Leo Famulari
+:
+
+https://github.com/transmission/transmission/pull/468/commits
+
+From fe2d3c6e75088f3d9b6040ce06da3d530358bc2f Mon Sep 17 00:00:00 2001
+From: Tavis Ormandy
+Date: Thu, 11 Jan 2018 10:00:41 -0800
+Subject: [PATCH] mitigate dns rebinding attacks against daemon
+
+---
+ libtransmission/quark.c | 2 +
+ libtransmission/quark.h | 2 +
+ libtransmission/rpc-server.c | 116 +++++++++++++++++++++++++++++++++++++----
+ libtransmission/rpc-server.h | 4 ++
+ libtransmission/session.c | 2 +
+ libtransmission/transmission.h | 1 +
+ libtransmission/web.c | 3 ++
+ 7 files changed, 121 insertions(+), 9 deletions(-)
+
+diff --git a/libtransmission/quark.c b/libtransmission/quark.c
+index 30cc2bca4..6de4bc221 100644
+--- a/libtransmission/quark.c
++++ b/libtransmission/quark.c
+@@ -297,6 +297,8 @@ static const struct tr_key_struct my_static[] =
+ { "rpc-version-minimum", 19 },
+ { "rpc-whitelist", 13 },
+ { "rpc-whitelist-enabled", 21 },
++ { "rpc-host-whitelist", 18 },
++ { "rpc-host-whitelist-enabled", 26 },
+ { "scrape", 6 },
+ { "scrape-paused-torrents-enabled", 30 },
+ { "scrapeState", 11 },
+diff --git a/libtransmission/quark.h b/libtransmission/quark.h
+index 7f5212733..21723dea9 100644
+--- a/libtransmission/quark.h
++++ b/libtransmission/quark.h
+@@ -299,6 +299,8 @@ enum
+ TR_KEY_rpc_version_minimum,
+ TR_KEY_rpc_whitelist,
+ TR_KEY_rpc_whitelist_enabled,
++ TR_KEY_rpc_host_whitelist,
++ TR_KEY_rpc_host_whitelist_enabled,
+ TR_KEY_scrape,
+ TR_KEY_scrape_paused_torrents_enabled,
+ TR_KEY_scrapeState,
+diff --git a/libtransmission/rpc-server.c b/libtransmission/rpc-server.c
+index a3485f3fa..a048dc8aa 100644
+--- a/libtransmission/rpc-server.c
++++ b/libtransmission/rpc-server.c
+@@ -52,6 +52,7 @@ struct tr_rpc_server
+ bool isEnabled;
+ bool isPasswordEnabled;
+ bool isWhitelistEnabled;
++ bool isHostWhitelistEnabled;
+ tr_port port;
+ char * url;
+ struct in_addr bindAddress;
+@@ -63,6 +64,7 @@ struct tr_rpc_server
+ char * password;
+ char * whitelistStr;
+ tr_list * whitelist;
++ tr_list * hostWhitelist;
+
+ char * sessionId;
+ time_t sessionIdExpiresAt;
+@@ -588,6 +590,49 @@ isAddressAllowed (const tr_rpc_server * server, const char * address)
+ return false;
+ }
+
++static bool isHostnameAllowed(tr_rpc_server const* server, struct evhttp_request* req)
++{
++ /* If password auth is enabled, any hostname is permitted. */
++ if (server->isPasswordEnabled)
++ {
++ return true;
++ }
++
++ char const* const host = evhttp_find_header(req->input_headers, "Host");
++
++ /* No host header, invalid request. */
++ if (host == NULL)
++ {
++ return false;
++ }
++
++ /* Host header might include the port. */
++ char* const hostname = tr_strndup(host, strcspn(host, ":"));
++
++ /* localhost or ipaddress is always acceptable. */
++ if (strcmp(hostname, "localhost") == 0 || strcmp(hostname, "localhost.") == 0 || tr_addressIsIP(hostname))
++ {
++ tr_free(hostname);
++ return true;
++ }
++
++ /* Otherwise, hostname must be whitelisted. */
++ if (server->isHostWhitelistEnabled)
++ {
++ for (tr_list* l = server->hostWhitelist; l != NULL; l = l->next)
++ {
++ if (tr_wildmat(hostname, l->data))
++ {
++ tr_free(hostname);
++ return true;
++ }
++ }
++ }
++
++ tr_free(hostname);
++ return false;
++}
++
+ static bool
+ test_session_id (struct tr_rpc_server * server, struct evhttp_request * req)
+ {
+@@ -663,6 +708,23 @@ handle_request (struct evhttp_request * req, void * arg)
+ handle_upload (req, server);
+ }
+ #ifdef REQUIRE_SESSION_ID
++ else if (!isHostnameAllowed(server, req))
++ {
++ char* tmp = tr_strdup_printf(
++ "Transmission received your request, but the hostname was unrecognized.
"
++ "To fix this, choose one of the following options:"
++ "
"
++ "- Enable password authentication, then any hostname is allowed.
"
++ "- Add the hostname you want to use to the whitelist in settings.
"
++ "
"
++ "If you're editing settings.json, see the 'rpc-host-whitelist' and 'rpc-host-whitelist-enabled' entries.
"
++ "This requirement has been added to help prevent "
++ "DNS Rebinding "
++ "attacks.
");
++ send_simple_response(req, 421, tmp);
++ tr_free(tmp);
++ }
++
+ else if (!test_session_id (server, req))
+ {
+ const char * sessionId = get_current_session_id (server);
+@@ -674,7 +736,7 @@ handle_request (struct evhttp_request * req, void * arg)
+ " When you get this 409 error message, resend your request with the updated header"
+ ""
+ "This requirement has been added to help prevent "
+- "CSRF "
++ "CSRF "
+ "attacks.
"
+ "%s: %s
",
+ TR_RPC_SESSION_ID_HEADER, sessionId);
+@@ -875,19 +937,14 @@ tr_rpcGetUrl (const tr_rpc_server * server)
+ return server->url ? server->url : "";
+ }
+
+-void
+-tr_rpcSetWhitelist (tr_rpc_server * server, const char * whitelistStr)
++static void
++tr_rpcSetList (char const* whitelistStr, tr_list** list)
+ {
+ void * tmp;
+ const char * walk;
+
+- /* keep the string */
+- tmp = server->whitelistStr;
+- server->whitelistStr = tr_strdup (whitelistStr);
+- tr_free (tmp);
+-
+ /* clear out the old whitelist entries */
+- while ((tmp = tr_list_pop_front (&server->whitelist)))
++ while ((tmp = tr_list_pop_front (list)) != NULL)
+ tr_free (tmp);
+
+ /* build the new whitelist entries */
+@@ -896,7 +953,7 @@ tr_rpcSetWhitelist (tr_rpc_server * server, const char * whitelistStr)
+ const char * delimiters = " ,;";
+ const size_t len = strcspn (walk, delimiters);
+ char * token = tr_strndup (walk, len);
+- tr_list_append (&server->whitelist, token);
++ tr_list_append (list, token);
+ if (strcspn (token, "+-") < len)
+ tr_logAddNamedInfo (MY_NAME, "Adding address to whitelist: %s (And it has a '+' or '-'! Are you using an old ACL by mistake?)", token);
+ else
+@@ -909,6 +966,21 @@ tr_rpcSetWhitelist (tr_rpc_server * server, const char * whitelistStr)
+ }
+ }
+
++void tr_rpcSetHostWhitelist(tr_rpc_server* server, char const* whitelistStr)
++{
++ tr_rpcSetList(whitelistStr, &server->hostWhitelist);
++}
++
++void tr_rpcSetWhitelist(tr_rpc_server* server, char const* whitelistStr)
++{
++ /* keep the string */
++ char* const tmp = server->whitelistStr;
++ server->whitelistStr = tr_strdup(whitelistStr);
++ tr_free(tmp);
++
++ tr_rpcSetList(whitelistStr, &server->whitelist);
++}
++
+ const char*
+ tr_rpcGetWhitelist (const tr_rpc_server * server)
+ {
+@@ -930,6 +1002,11 @@ tr_rpcGetWhitelistEnabled (const tr_rpc_server * server)
+ return server->isWhitelistEnabled;
+ }
+
++void tr_rpcSetHostWhitelistEnabled(tr_rpc_server* server, bool isEnabled)
++{
++ server->isHostWhitelistEnabled = isEnabled;
++}
++
+ /****
+ ***** PASSWORD
+ ****/
+@@ -1063,6 +1140,28 @@ tr_rpcInit (tr_session * session, tr_variant * settings)
+ else
+ tr_rpcSetWhitelistEnabled (s, boolVal);
+
++ key = TR_KEY_rpc_host_whitelist_enabled;
++
++ if (!tr_variantDictFindBool(settings, key, &boolVal))
++ {
++ missing_settings_key(key);
++ }
++ else
++ {
++ tr_rpcSetHostWhitelistEnabled(s, boolVal);
++ }
++
++ key = TR_KEY_rpc_host_whitelist;
++
++ if (!tr_variantDictFindStr(settings, key, &str, NULL) && str != NULL)
++ {
++ missing_settings_key(key);
++ }
++ else
++ {
++ tr_rpcSetHostWhitelist(s, str);
++ }
++
+ key = TR_KEY_rpc_authentication_required;
+ if (!tr_variantDictFindBool (settings, key, &boolVal))
+ missing_settings_key (key);
+diff --git a/libtransmission/rpc-server.h b/libtransmission/rpc-server.h
+index e0302c5ea..8c9e6b24e 100644
+--- a/libtransmission/rpc-server.h
++++ b/libtransmission/rpc-server.h
+@@ -49,6 +49,10 @@ void tr_rpcSetWhitelist (tr_rpc_server * server,
+
+ const char* tr_rpcGetWhitelist (const tr_rpc_server * server);
+
++void tr_rpcSetHostWhitelistEnabled(tr_rpc_server* server, bool isEnabled);
++
++void tr_rpcSetHostWhitelist(tr_rpc_server* server, char const* whitelist);
++
+ void tr_rpcSetPassword (tr_rpc_server * server,
+ const char * password);
+
+diff --git a/libtransmission/session.c b/libtransmission/session.c
+index 844cadba8..58b717913 100644
+--- a/libtransmission/session.c
++++ b/libtransmission/session.c
+@@ -359,6 +359,8 @@ tr_sessionGetDefaultSettings (tr_variant * d)
+ tr_variantDictAddStr (d, TR_KEY_rpc_username, "");
+ tr_variantDictAddStr (d, TR_KEY_rpc_whitelist, TR_DEFAULT_RPC_WHITELIST);
+ tr_variantDictAddBool (d, TR_KEY_rpc_whitelist_enabled, true);
++ tr_variantDictAddStr(d, TR_KEY_rpc_host_whitelist, TR_DEFAULT_RPC_HOST_WHITELIST);
++ tr_variantDictAddBool(d, TR_KEY_rpc_host_whitelist_enabled, true);
+ tr_variantDictAddInt (d, TR_KEY_rpc_port, atoi (TR_DEFAULT_RPC_PORT_STR));
+ tr_variantDictAddStr (d, TR_KEY_rpc_url, TR_DEFAULT_RPC_URL_STR);
+ tr_variantDictAddBool (d, TR_KEY_scrape_paused_torrents_enabled, true);
+diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h
+index 4f76adfd6..e213a8f4e 100644
+--- a/libtransmission/transmission.h
++++ b/libtransmission/transmission.h
+@@ -123,6 +123,7 @@ const char* tr_getDefaultDownloadDir (void);
+ #define TR_DEFAULT_BIND_ADDRESS_IPV4 "0.0.0.0"
+ #define TR_DEFAULT_BIND_ADDRESS_IPV6 "::"
+ #define TR_DEFAULT_RPC_WHITELIST "127.0.0.1"
++#define TR_DEFAULT_RPC_HOST_WHITELIST ""
+ #define TR_DEFAULT_RPC_PORT_STR "9091"
+ #define TR_DEFAULT_RPC_URL_STR "/transmission/"
+ #define TR_DEFAULT_PEER_PORT_STR "51413"
+diff --git a/libtransmission/web.c b/libtransmission/web.c
+index ee495e9fc..c7f062730 100644
+--- a/libtransmission/web.c
++++ b/libtransmission/web.c
+@@ -594,6 +594,7 @@ tr_webGetResponseStr (long code)
+ case 415: return "Unsupported Media Type";
+ case 416: return "Requested Range Not Satisfiable";
+ case 417: return "Expectation Failed";
++ case 421: return "Misdirected Request";
+ case 500: return "Internal Server Error";
+ case 501: return "Not Implemented";
+ case 502: return "Bad Gateway";
--
2.15.1
From debbugs-submit-bounces@debbugs.gnu.org Thu Jan 11 18:39:31 2018
Received: (at 30082) by debbugs.gnu.org; 11 Jan 2018 23:39:31 +0000
Received: from localhost ([127.0.0.1]:52690 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from )
id 1eZmRW-0000wu-FX
for submit@debbugs.gnu.org; Thu, 11 Jan 2018 18:39:31 -0500
Received: from out3-smtp.messagingengine.com ([66.111.4.27]:42589)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from ) id 1eZmRQ-0000wh-Lt
for 30082@debbugs.gnu.org; Thu, 11 Jan 2018 18:39:29 -0500
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
by mailout.nyi.internal (Postfix) with ESMTP id 6103720B95;
Thu, 11 Jan 2018 18:39:24 -0500 (EST)
Received: from frontend2 ([10.202.2.161])
by compute4.internal (MEProxy); Thu, 11 Jan 2018 18:39:24 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=famulari.name;
h=date:from:message-id:subject:to:x-me-sender:x-me-sender
:x-sasl-enc; s=mesmtp; bh=6gVgrbzjPVio6tnoWJ6TUIe8QKpVrQ6RLgVj6x
fsFLM=; b=TU7EYMB2WL5jFSuk3JGBcdHrM3mGnZ5O5q3BQV458szgl+PztE2aZm
Q72kTgXKfKZBTJGmbuO8D+fzgvqHwdouPxHVDBN1BcpldEQ2/YK12xl5Q5fLgEFY
Nq5JrQjzGZas3aD4AYP0frJsJYGAkWG9DX8S2Au9p4VbNJBub1xLU=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
messagingengine.com; h=date:from:message-id:subject:to
:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=6gVgrbzjPVio6tnoW
J6TUIe8QKpVrQ6RLgVj6xfsFLM=; b=UCGed+WMFREtyCdkFLBcg+CAm6+PGqHYW
rXD0+H1baGPUDmUfV5GjyTJIgnDMgkaSZXU7DsuUGJoOKd9hidE06p/3oAgUEEtc
6SMg7DXgrGpTyPTgG7rImC2YTheAeokGgFWA2Ijj/647hVV9phrwOus4LZDZ6g9I
2tpdQAwhdCSpuoT5GheNDVdrkY1W4YpJrQBEl8gTg4wTMIvnTBciYOiKPllp+mgk
IZRu//gqmlDpbesYtvNG20kaFIynYmwpzdqhGbqQ6pMznVRHcbQmvO1o6VlhFtC3
BQlBy444d4HFwqeGitAUPMuez4sQQEYO99RuSiznm5RQd1tbPm1LA==
X-ME-Sender:
Received: from jasmine.lan (unknown [162.208.95.194])
by mail.messagingengine.com (Postfix) with ESMTPA id DC764246CC
for <30082@debbugs.gnu.org>; Thu, 11 Jan 2018 18:39:23 -0500 (EST)
From: Leo Famulari
To: 30082@debbugs.gnu.org
Subject: [v2] gnu: transmission: Fix a DNS rebinding vulnerability that allows
RCE.
Date: Thu, 11 Jan 2018 15:39:17 -0800
Message-Id: <723dcdea4d11c70e1f7731b3abfdca424a930743.1515713957.git.leo@famulari.name>
X-Mailer: git-send-email 2.15.1
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 30082
X-BeenThere: debbugs-submit@debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: debbugs-submit-bounces@debbugs.gnu.org
Sender: "Debbugs-submit"
X-Spam-Score: -0.7 (/)
* gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/bittorrent.scm (transmission)[source]: Use it.
---
gnu/local.mk | 1 +
gnu/packages/bittorrent.scm | 1 +
.../transmission-fix-dns-rebinding-vuln.patch | 302 +++++++++++++++++++++
3 files changed, 304 insertions(+)
create mode 100644 gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index eec46af0d..c77c446ee 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1107,6 +1107,7 @@ dist_patch_DATA = \
%D%/packages/patches/tipp10-fix-compiling.patch \
%D%/packages/patches/tipp10-remove-license-code.patch \
%D%/packages/patches/tk-find-library.patch \
+ %D%/packages/patches/transmission-fix-dns-rebinding-vuln.patch \
%D%/packages/patches/ttf2eot-cstddef.patch \
%D%/packages/patches/ttfautohint-source-date-epoch.patch \
%D%/packages/patches/tophat-build-with-later-seqan.patch \
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index eca064620..800a42eea 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -66,6 +66,7 @@
(uri (string-append
"https://transmission.cachefly.net/transmission-"
version ".tar.xz"))
+ (patches (search-patches "transmission-fix-dns-rebinding-vuln.patch"))
(sha256
(base32
"0pykmhi7pdmzq47glbj8i2im6iarp4wnj4l1pyvsrnba61f0939s"))))
diff --git a/gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch b/gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch
new file mode 100644
index 000000000..a3a0cf160
--- /dev/null
+++ b/gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch
@@ -0,0 +1,302 @@
+Fix a weakness that allows remote code execution via the Transmission
+RPC server using DNS rebinding:
+
+https://bugs.chromium.org/p/project-zero/issues/detail?id=1447
+
+Patch adapted from Tavis Ormandy's patch on the Transmission master
+branch to the Transmission 2.92 release by Leo Famulari
+:
+
+https://github.com/transmission/transmission/pull/468/commits
+
+From fe2d3c6e75088f3d9b6040ce06da3d530358bc2f Mon Sep 17 00:00:00 2001
+From: Tavis Ormandy
+Date: Thu, 11 Jan 2018 10:00:41 -0800
+Subject: [PATCH] mitigate dns rebinding attacks against daemon
+
+---
+ libtransmission/quark.c | 2 +
+ libtransmission/quark.h | 2 +
+ libtransmission/rpc-server.c | 116 +++++++++++++++++++++++++++++++++++++----
+ libtransmission/rpc-server.h | 4 ++
+ libtransmission/session.c | 2 +
+ libtransmission/transmission.h | 1 +
+ libtransmission/web.c | 3 ++
+ 7 files changed, 121 insertions(+), 9 deletions(-)
+
+diff --git a/libtransmission/quark.c b/libtransmission/quark.c
+index 30cc2bca4..b4fd7aabd 100644
+--- a/libtransmission/quark.c
++++ b/libtransmission/quark.c
+@@ -289,6 +289,8 @@ static const struct tr_key_struct my_static[] =
+ { "rpc-authentication-required", 27 },
+ { "rpc-bind-address", 16 },
+ { "rpc-enabled", 11 },
++ { "rpc-host-whitelist", 18 },
++ { "rpc-host-whitelist-enabled", 26 },
+ { "rpc-password", 12 },
+ { "rpc-port", 8 },
+ { "rpc-url", 7 },
+diff --git a/libtransmission/quark.h b/libtransmission/quark.h
+index 7f5212733..17464be8f 100644
+--- a/libtransmission/quark.h
++++ b/libtransmission/quark.h
+@@ -291,6 +291,8 @@ enum
+ TR_KEY_rpc_authentication_required,
+ TR_KEY_rpc_bind_address,
+ TR_KEY_rpc_enabled,
++ TR_KEY_rpc_host_whitelist,
++ TR_KEY_rpc_host_whitelist_enabled,
+ TR_KEY_rpc_password,
+ TR_KEY_rpc_port,
+ TR_KEY_rpc_url,
+diff --git a/libtransmission/rpc-server.c b/libtransmission/rpc-server.c
+index a3485f3fa..292cd5fce 100644
+--- a/libtransmission/rpc-server.c
++++ b/libtransmission/rpc-server.c
+@@ -52,6 +52,7 @@ struct tr_rpc_server
+ bool isEnabled;
+ bool isPasswordEnabled;
+ bool isWhitelistEnabled;
++ bool isHostWhitelistEnabled;
+ tr_port port;
+ char * url;
+ struct in_addr bindAddress;
+@@ -63,6 +64,7 @@ struct tr_rpc_server
+ char * password;
+ char * whitelistStr;
+ tr_list * whitelist;
++ tr_list * hostWhitelist;
+
+ char * sessionId;
+ time_t sessionIdExpiresAt;
+@@ -588,6 +590,49 @@ isAddressAllowed (const tr_rpc_server * server, const char * address)
+ return false;
+ }
+
++static bool isHostnameAllowed(tr_rpc_server const* server, struct evhttp_request* req)
++{
++ /* If password auth is enabled, any hostname is permitted. */
++ if (server->isPasswordEnabled)
++ {
++ return true;
++ }
++
++ char const* const host = evhttp_find_header(req->input_headers, "Host");
++
++ // If whitelist is disabled, no restrictions.
++ if (!server->isHostWhitelistEnabled)
++ return true;
++
++ /* No host header, invalid request. */
++ if (host == NULL)
++ {
++ return false;
++ }
++
++ /* Host header might include the port. */
++ char* const hostname = tr_strndup(host, strcspn(host, ":"));
++
++ /* localhost or ipaddress is always acceptable. */
++ if (strcmp(hostname, "localhost") == 0 || strcmp(hostname, "localhost.") == 0 || tr_addressIsIP(hostname))
++ {
++ tr_free(hostname);
++ return true;
++ }
++
++ /* Otherwise, hostname must be whitelisted. */
++ for (tr_list* l = server->hostWhitelist; l != NULL; l = l->next) {
++ if (tr_wildmat(hostname, l->data))
++ {
++ tr_free(hostname);
++ return true;
++ }
++ }
++
++ tr_free(hostname);
++ return false;
++}
++
+ static bool
+ test_session_id (struct tr_rpc_server * server, struct evhttp_request * req)
+ {
+@@ -663,6 +708,23 @@ handle_request (struct evhttp_request * req, void * arg)
+ handle_upload (req, server);
+ }
+ #ifdef REQUIRE_SESSION_ID
++ else if (!isHostnameAllowed(server, req))
++ {
++ char* tmp = tr_strdup_printf(
++ "Transmission received your request, but the hostname was unrecognized.
"
++ "To fix this, choose one of the following options:"
++ "
"
++ "- Enable password authentication, then any hostname is allowed.
"
++ "- Add the hostname you want to use to the whitelist in settings.
"
++ "
"
++ "If you're editing settings.json, see the 'rpc-host-whitelist' and 'rpc-host-whitelist-enabled' entries.
"
++ "This requirement has been added to help prevent "
++ "DNS Rebinding "
++ "attacks.
");
++ send_simple_response(req, 421, tmp);
++ tr_free(tmp);
++ }
++
+ else if (!test_session_id (server, req))
+ {
+ const char * sessionId = get_current_session_id (server);
+@@ -674,7 +736,7 @@ handle_request (struct evhttp_request * req, void * arg)
+ " When you get this 409 error message, resend your request with the updated header"
+ ""
+ "This requirement has been added to help prevent "
+- "CSRF "
++ "CSRF "
+ "attacks.
"
+ "%s: %s
",
+ TR_RPC_SESSION_ID_HEADER, sessionId);
+@@ -875,19 +937,14 @@ tr_rpcGetUrl (const tr_rpc_server * server)
+ return server->url ? server->url : "";
+ }
+
+-void
+-tr_rpcSetWhitelist (tr_rpc_server * server, const char * whitelistStr)
++static void
++tr_rpcSetList (char const* whitelistStr, tr_list** list)
+ {
+ void * tmp;
+ const char * walk;
+
+- /* keep the string */
+- tmp = server->whitelistStr;
+- server->whitelistStr = tr_strdup (whitelistStr);
+- tr_free (tmp);
+-
+ /* clear out the old whitelist entries */
+- while ((tmp = tr_list_pop_front (&server->whitelist)))
++ while ((tmp = tr_list_pop_front (list)) != NULL)
+ tr_free (tmp);
+
+ /* build the new whitelist entries */
+@@ -896,7 +953,7 @@ tr_rpcSetWhitelist (tr_rpc_server * server, const char * whitelistStr)
+ const char * delimiters = " ,;";
+ const size_t len = strcspn (walk, delimiters);
+ char * token = tr_strndup (walk, len);
+- tr_list_append (&server->whitelist, token);
++ tr_list_append (list, token);
+ if (strcspn (token, "+-") < len)
+ tr_logAddNamedInfo (MY_NAME, "Adding address to whitelist: %s (And it has a '+' or '-'! Are you using an old ACL by mistake?)", token);
+ else
+@@ -909,6 +966,21 @@ tr_rpcSetWhitelist (tr_rpc_server * server, const char * whitelistStr)
+ }
+ }
+
++void tr_rpcSetHostWhitelist(tr_rpc_server* server, char const* whitelistStr)
++{
++ tr_rpcSetList(whitelistStr, &server->hostWhitelist);
++}
++
++void tr_rpcSetWhitelist(tr_rpc_server* server, char const* whitelistStr)
++{
++ /* keep the string */
++ char* const tmp = server->whitelistStr;
++ server->whitelistStr = tr_strdup(whitelistStr);
++ tr_free(tmp);
++
++ tr_rpcSetList(whitelistStr, &server->whitelist);
++}
++
+ const char*
+ tr_rpcGetWhitelist (const tr_rpc_server * server)
+ {
+@@ -930,6 +1002,11 @@ tr_rpcGetWhitelistEnabled (const tr_rpc_server * server)
+ return server->isWhitelistEnabled;
+ }
+
++void tr_rpcSetHostWhitelistEnabled(tr_rpc_server* server, bool isEnabled)
++{
++ server->isHostWhitelistEnabled = isEnabled;
++}
++
+ /****
+ ***** PASSWORD
+ ****/
+@@ -1063,6 +1140,28 @@ tr_rpcInit (tr_session * session, tr_variant * settings)
+ else
+ tr_rpcSetWhitelistEnabled (s, boolVal);
+
++ key = TR_KEY_rpc_host_whitelist_enabled;
++
++ if (!tr_variantDictFindBool(settings, key, &boolVal))
++ {
++ missing_settings_key(key);
++ }
++ else
++ {
++ tr_rpcSetHostWhitelistEnabled(s, boolVal);
++ }
++
++ key = TR_KEY_rpc_host_whitelist;
++
++ if (!tr_variantDictFindStr(settings, key, &str, NULL) && str != NULL)
++ {
++ missing_settings_key(key);
++ }
++ else
++ {
++ tr_rpcSetHostWhitelist(s, str);
++ }
++
+ key = TR_KEY_rpc_authentication_required;
+ if (!tr_variantDictFindBool (settings, key, &boolVal))
+ missing_settings_key (key);
+diff --git a/libtransmission/rpc-server.h b/libtransmission/rpc-server.h
+index e0302c5ea..8c9e6b24e 100644
+--- a/libtransmission/rpc-server.h
++++ b/libtransmission/rpc-server.h
+@@ -49,6 +49,10 @@ void tr_rpcSetWhitelist (tr_rpc_server * server,
+
+ const char* tr_rpcGetWhitelist (const tr_rpc_server * server);
+
++void tr_rpcSetHostWhitelistEnabled(tr_rpc_server* server, bool isEnabled);
++
++void tr_rpcSetHostWhitelist(tr_rpc_server* server, char const* whitelist);
++
+ void tr_rpcSetPassword (tr_rpc_server * server,
+ const char * password);
+
+diff --git a/libtransmission/session.c b/libtransmission/session.c
+index 844cadba8..58b717913 100644
+--- a/libtransmission/session.c
++++ b/libtransmission/session.c
+@@ -359,6 +359,8 @@ tr_sessionGetDefaultSettings (tr_variant * d)
+ tr_variantDictAddStr (d, TR_KEY_rpc_username, "");
+ tr_variantDictAddStr (d, TR_KEY_rpc_whitelist, TR_DEFAULT_RPC_WHITELIST);
+ tr_variantDictAddBool (d, TR_KEY_rpc_whitelist_enabled, true);
++ tr_variantDictAddStr(d, TR_KEY_rpc_host_whitelist, TR_DEFAULT_RPC_HOST_WHITELIST);
++ tr_variantDictAddBool(d, TR_KEY_rpc_host_whitelist_enabled, true);
+ tr_variantDictAddInt (d, TR_KEY_rpc_port, atoi (TR_DEFAULT_RPC_PORT_STR));
+ tr_variantDictAddStr (d, TR_KEY_rpc_url, TR_DEFAULT_RPC_URL_STR);
+ tr_variantDictAddBool (d, TR_KEY_scrape_paused_torrents_enabled, true);
+diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h
+index 4f76adfd6..e213a8f4e 100644
+--- a/libtransmission/transmission.h
++++ b/libtransmission/transmission.h
+@@ -123,6 +123,7 @@ const char* tr_getDefaultDownloadDir (void);
+ #define TR_DEFAULT_BIND_ADDRESS_IPV4 "0.0.0.0"
+ #define TR_DEFAULT_BIND_ADDRESS_IPV6 "::"
+ #define TR_DEFAULT_RPC_WHITELIST "127.0.0.1"
++#define TR_DEFAULT_RPC_HOST_WHITELIST ""
+ #define TR_DEFAULT_RPC_PORT_STR "9091"
+ #define TR_DEFAULT_RPC_URL_STR "/transmission/"
+ #define TR_DEFAULT_PEER_PORT_STR "51413"
+diff --git a/libtransmission/web.c b/libtransmission/web.c
+index ee495e9fc..c7f062730 100644
+--- a/libtransmission/web.c
++++ b/libtransmission/web.c
+@@ -594,6 +594,7 @@ tr_webGetResponseStr (long code)
+ case 415: return "Unsupported Media Type";
+ case 416: return "Requested Range Not Satisfiable";
+ case 417: return "Expectation Failed";
++ case 421: return "Misdirected Request";
+ case 500: return "Internal Server Error";
+ case 501: return "Not Implemented";
+ case 502: return "Bad Gateway";
--
2.15.1
From debbugs-submit-bounces@debbugs.gnu.org Thu Jan 11 18:54:47 2018
Received: (at 30082) by debbugs.gnu.org; 11 Jan 2018 23:54:47 +0000
Received: from localhost ([127.0.0.1]:52701 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from )
id 1eZmgJ-0001Kp-EM
for submit@debbugs.gnu.org; Thu, 11 Jan 2018 18:54:47 -0500
Received: from out3-smtp.messagingengine.com ([66.111.4.27]:35261)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from ) id 1eZmgF-0001Ke-4k
for 30082@debbugs.gnu.org; Thu, 11 Jan 2018 18:54:45 -0500
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45])
by mailout.nyi.internal (Postfix) with ESMTP id BB2A520BCF;
Thu, 11 Jan 2018 18:54:42 -0500 (EST)
Received: from frontend1 ([10.202.2.160])
by compute5.internal (MEProxy); Thu, 11 Jan 2018 18:54:42 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.com; h=
content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=
fm1; bh=UjW8Wuq99QJvytN+C4Bdoy1bKDpGNWsGte/vIREKci0=; b=wTVVJ/nd
Ch4p8n/V/njAwiNPJETUQq09Cy5ye9Ymzrbd4I/xV5yfx6AEyYIXBo2tzywPx/Lz
r/yML+QLseXduKnL86u0gVITBV6q0dPEGfea9FaQFj3MFlDaUcF2Yn+gBL2W6pen
GMLvGkpdqx6DatmQyLjozKT2wdGC7YySs9EJxa801vjlN27/g20pl6c4Qq+KXlkJ
8if4xvv+v+NmdLEeq78NXwlOeLmHlFFYD/nUl1syUti4AdyasxmT/KpV9cs70pFX
pLF6LF1wJPzFhhrTPdqwoIiEJ+EQ064pY8yYDL/WbFqtuifSEGcO+VLQ1EWCQfik
2qRqoIUfMVqA9A==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
messagingengine.com; h=content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to:x-me-sender
:x-me-sender:x-sasl-enc; s=fm1; bh=UjW8Wuq99QJvytN+C4Bdoy1bKDpGN
WsGte/vIREKci0=; b=XS+AQgtAM4i0G+kXU5fIM4lt8gtQM8F7zPX9JW/L0p+Xo
4ALoimLSaZEo+LICb0iHc1GsMjyWZW3ACdq4wDubSi0oZjncjYx/6/YFgun5yd4k
mJ4ZjqmhwM9KyfLnW22fZOUw59WTgRdfsp97J6rcIFHrIjFCNmLW96Ir3hAxQKJz
gl0fxP5gEqR/SOehzM7NAVznl/BxCc0xKrpG3Dhe59pE6CY+LZv75rovJJT9lS2+
RmM8Vn5nSLNtyl1bwZuQQyFikFi7ja74PwXe/PieiFE7yXDD7rr3/k1HHZdEWEXc
7PFoqMbk/w4G8gr741zwZaAOKvi+OhLCIzI57Y6tw==
X-ME-Sender:
Received: from localhost (cm-84.214.173.174.getinternet.no [84.214.173.174])
by mail.messagingengine.com (Postfix) with ESMTPA id 40D0E7E3D7;
Thu, 11 Jan 2018 18:54:42 -0500 (EST)
From: Marius Bakke
To: Leo Famulari , 30082@debbugs.gnu.org
Subject: Re: [bug#30082] [v2] gnu: transmission: Fix a DNS rebinding
vulnerability that allows RCE.
In-Reply-To: <723dcdea4d11c70e1f7731b3abfdca424a930743.1515713957.git.leo@famulari.name>
References: <139e227515c0e99297951c92d498e3c01f34ccf4.1515712746.git.leo@famulari.name>
<723dcdea4d11c70e1f7731b3abfdca424a930743.1515713957.git.leo@famulari.name>
User-Agent: Notmuch/0.26 (https://notmuchmail.org) Emacs/25.3.1
(x86_64-pc-linux-gnu)
Date: Fri, 12 Jan 2018 00:54:31 +0100
Message-ID: <87a7xkeytk.fsf@fastmail.com>
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
micalg=pgp-sha512; protocol="application/pgp-signature"
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 30082
X-BeenThere: debbugs-submit@debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: debbugs-submit-bounces@debbugs.gnu.org
Sender: "Debbugs-submit"
X-Spam-Score: -0.7 (/)
--=-=-=
Content-Type: text/plain
Leo Famulari writes:
> * gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Add it.
> * gnu/packages/bittorrent.scm (transmission)[source]: Use it.
Holy! LGTM, and thanks a lot for this extremely quick fix.
--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAlpX+TcACgkQoqBt8qM6
VPpEkgf/Y6PSMEGm15HDAVe/DZtlw+s9umaxUzD7mJRd4nZiCU1bYM8/B4x/kAY9
s21S3TRc3JaYHUiGARwnl2MR3e4dhD1R/Sor49Wea3dDuTXVh6wkX8TQ0C1nEbRB
Do1yMyZWYE5XQyLURyLjR2iRihZ8riTi9ZaDe/t0ZxACibjJUaf2kxWjgqP9U+FM
Om5wiIar1TyLF+LYzDwT2IjHe7VcujcbG/NqyeKZqf4UK7n9n/jbbWtY0HHn5Ba8
jAgn8GOe+ZkVnZQGgutNP+SZGfUZXamUOUPE4IXmKiTkibLTtwmZKxIx5yVUlv1T
1pbFy7WZU7GjoPYBgtbjAxmXLf7diQ==
=Dey8
-----END PGP SIGNATURE-----
--=-=-=--
From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 12 13:15:04 2018
Received: (at 30082-done) by debbugs.gnu.org; 12 Jan 2018 18:15:05 +0000
Received: from localhost ([127.0.0.1]:54094 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from )
id 1ea3r6-0004tA-Kc
for submit@debbugs.gnu.org; Fri, 12 Jan 2018 13:15:04 -0500
Received: from out3-smtp.messagingengine.com ([66.111.4.27]:55493)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from ) id 1ea3r1-0004qN-Cc
for 30082-done@debbugs.gnu.org; Fri, 12 Jan 2018 13:15:01 -0500
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
by mailout.nyi.internal (Postfix) with ESMTP id 902D220E4D;
Fri, 12 Jan 2018 13:14:58 -0500 (EST)
Received: from frontend1 ([10.202.2.160])
by compute4.internal (MEProxy); Fri, 12 Jan 2018 13:14:58 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=famulari.name;
h=cc:content-type:date:from:in-reply-to:message-id:mime-version
:references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=
mesmtp; bh=+KHF4m5xjOacp6TkRa72uv5uwe4nf1lkMvMUGgStNXo=; b=OJvBd
B+bVjV2oTW7xrDX4+RunK3fc2o47TuqOyRpvd8VU7049Ol5j6l5WvdSFndlQYLax
Wv+tL59Ao5BPSH9HA/bFMtN9uN+QKvA126vlspbKtiQKNkxXfxwlEil84BdhFFHZ
BlMh1Z/4McjJeZJ8CrZyuNpuhjZBptxe+SHC8E=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
messagingengine.com; h=cc:content-type:date:from:in-reply-to
:message-id:mime-version:references:subject:to:x-me-sender
:x-me-sender:x-sasl-enc; s=fm1; bh=+KHF4m5xjOacp6TkRa72uv5uwe4nf
1lkMvMUGgStNXo=; b=J/4dIH//12askUoKbMt4u57qCychT75JvqW5h9peDu2cH
DFY0l96g1ErtvQE/1prVgGXrPryNo6pWtogp7aHFg1LJoXuCCPw8+CAbooIJtrcU
fTv/dQpB+6VGtuN9GuZH4GzWxJTTslQHMABGWQonYXN7+zBHYksW7CYUV/9qbPK5
VVPyZk/C/aZCvWYnvZjc+wtTi7ao1oswMb6tmaJib6GzXH0pKeXhbk/Qt36o/8Ib
7xJbhf10zVLsN/38gm8wZNQ2djz2DgsgNTnohY73AYuXbzFuZ83HixM3MNgjfGpO
rttcVQxd7hHUtjUafGdmtmwqt80fB8P9dqyZXg3yQ==
X-ME-Sender:
Received: from localhost (unknown [162.208.95.194])
by mail.messagingengine.com (Postfix) with ESMTPA id 34A037E3E1;
Fri, 12 Jan 2018 13:14:58 -0500 (EST)
Date: Fri, 12 Jan 2018 10:14:56 -0800
From: Leo Famulari
To: Marius Bakke
Subject: Re: [bug#30082] [v2] gnu: transmission: Fix a DNS rebinding
vulnerability that allows RCE.
Message-ID: <20180112181456.GA1311@jasmine.lan>
References: <139e227515c0e99297951c92d498e3c01f34ccf4.1515712746.git.leo@famulari.name>
<723dcdea4d11c70e1f7731b3abfdca424a930743.1515713957.git.leo@famulari.name>
<87a7xkeytk.fsf@fastmail.com>
MIME-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature"; boundary="EeQfGwPcQSOJBaQU"
Content-Disposition: inline
In-Reply-To: <87a7xkeytk.fsf@fastmail.com>
User-Agent: Mutt/1.9.2 (2017-12-15)
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 30082-done
Cc: 30082-done@debbugs.gnu.org
X-BeenThere: debbugs-submit@debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: debbugs-submit-bounces@debbugs.gnu.org
Sender: "Debbugs-submit"
X-Spam-Score: -0.7 (/)
--EeQfGwPcQSOJBaQU
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Fri, Jan 12, 2018 at 12:54:31AM +0100, Marius Bakke wrote:
> Leo Famulari writes:
>=20
> > * gnu/packages/patches/transmission-fix-dns-rebinding-vuln.patch: New f=
ile.
> > * gnu/local.mk (dist_patch_DATA): Add it.
> > * gnu/packages/bittorrent.scm (transmission)[source]: Use it.
>=20
> Holy! LGTM, and thanks a lot for this extremely quick fix.
Pushed as 6b433caed2c86bf41acfa65dd507292e8a0ab2ac
--EeQfGwPcQSOJBaQU
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEsFFZSPHn08G5gDigJkb6MLrKfwgFAlpY+yAACgkQJkb6MLrK
fwgTJxAA2UHw7MEc9YMGGztpHs1kikIbTYqvjKrsvfJDzqQyBesJydHdvTLI0azS
6vdUOjAOJ6ze11kREUS1NwA6vV3ptNPShG+sNnRrb0YShfW/Quv0qig7Jl+I11cc
ydjU+l6IIJG/5ngqNZqS1UL9Qhd4zfRaMthRmToSNx8wt+Jc+7YKVDCltehpacbR
eJGZDMrB4bQAq2v1i6mmpX0p22fQ8RemF6FAGkVU87o7iIyVxyLg/UlCdO7ioKwI
JSMPCGcwDLYKEtK/8kfVjqujQdwL/SmN7qKYHe66bOAD8aVWpdeeC5MmKCK7DWM3
YkghBBQjRqXlN+FxNNJilBLd7rQ3di7VeCL4g38Xem3lFQJGkUZEg+Ac000qd1Ot
Mg2H5WoFhf7CmALJuJ83cFkPSTCIsJPY632Tf4sLE8sEmNYqZ4w55LJcnYFYDjb4
spLk7GdboM3sqH4+r9+WDIrB39WQBgfoxH95aKD1CkIQpOfbkkPrOy0Rs6210wVq
p8yRftTfMfSh3ipKRcPIpDgoRxhzKFF8biJELawUOFZ70ByLcCbFC0eZ3b64exY1
m17nL5XX3HYY30c/KYXsk+EwjgA/37cHYO8t4P8vS7ZB4w89U9mWlFjtCIP/PW6K
1BtJf2zeKgQUzJ2HaFs4p3nGjrwMV6eFs0yyhquMyuhuMsqybZ0=
=XWXz
-----END PGP SIGNATURE-----
--EeQfGwPcQSOJBaQU--
From unknown Tue Jun 17 22:29:47 2025
Received: (at fakecontrol) by fakecontrolmessage;
To: internal_control@debbugs.gnu.org
From: Debbugs Internal Request
Subject: Internal Control
Message-Id: bug archived.
Date: Sat, 10 Feb 2018 12:24:04 +0000
User-Agent: Fakemail v42.6.9
# This is a fake control message.
#
# The action:
# bug archived.
thanks
# This fakemail brought to you by your local debbugs
# administrator