curl: Security Advisory - curl - CVE-2014-3620

libcurl wrongly allows cookies to be set for Top Level Domains (TLDs), thus
making them apply broader than cookies are allowed. This can allow arbitrary
sites to set cookies that then would get sent to a different and unrelated site
or domain.

(From OE-Core rev: ddbaade8afbc9767583728bfdc220639203d6853)

(From OE-Core rev: 13bb2ee98cfd159455e459501dda280a78cb5a3b)

Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Chong Lu
2014-11-04 09:35:18 +08:00
committed by Richard Purdie
parent 6c9eb8a67a
commit 51a5a5df84
2 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
From fd7ae600adf23a9a1ed619165c5058bdec216e9c Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Tue, 19 Aug 2014 21:11:20 +0200
Subject: [PATCH] cookies: reject incoming cookies set for TLDs
Test 61 was modified to verify this.
CVE-2014-3620
Reported-by: Tim Ruehsen
URL: http://curl.haxx.se/docs/adv_20140910B.html
Upstream-Status: Backport
Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
---
lib/cookie.c | 6 ++++++
tests/data/test61 | 1 +
2 files changed, 7 insertions(+)
diff --git a/lib/cookie.c b/lib/cookie.c
index 46904ac..375485f 100644
--- a/lib/cookie.c
+++ b/lib/cookie.c
@@ -461,19 +461,25 @@ Curl_cookie_add(struct SessionHandle *data,
break;
}
}
else if(Curl_raw_equal("domain", name)) {
bool is_ip;
+ const char *dotp;
/* Now, we make sure that our host is within the given domain,
or the given domain is not valid and thus cannot be set. */
if('.' == whatptr[0])
whatptr++; /* ignore preceding dot */
is_ip = isip(domain ? domain : whatptr);
+ /* check for more dots */
+ dotp = strchr(whatptr, '.');
+ if(!dotp)
+ domain=":";
+
if(!domain
|| (is_ip && !strcmp(whatptr, domain))
|| (!is_ip && tailmatch(whatptr, domain))) {
strstore(&co->domain, whatptr);
if(!co->domain) {
diff --git a/tests/data/test61 b/tests/data/test61
index d2de279..e6dbbb9 100644
--- a/tests/data/test61
+++ b/tests/data/test61
@@ -21,10 +21,11 @@ Set-Cookie: test=yes; httponly; domain=foo.com; expires=Fri Feb 2 11:56:27 GMT 2
SET-COOKIE: test2=yes; domain=host.foo.com; expires=Fri Feb 2 11:56:27 GMT 2035
Set-Cookie: test3=maybe; domain=foo.com; path=/moo; secure
Set-Cookie: test4=no; domain=nope.foo.com; path=/moo; secure
Set-Cookie: test5=name; domain=anything.com; path=/ ; secure
Set-Cookie: fake=fooledyou; domain=..com; path=/;
+Set-Cookie: supercookie=fooledyou; domain=.com; path=/;^M
Content-Length: 4
boo
</data>
</reply>
--
2.1.0

View File

@@ -14,6 +14,7 @@ SRC_URI = "http://curl.haxx.se/download/curl-${PV}.tar.bz2 \
file://generate_code_for_disable_manual.patch \
file://remove_inappropriate_file_from_rel.patch \
file://CVE-2014-3613.patch \
file://CVE-2014-3620.patch \
"
# curl likes to set -g0 in CFLAGS, so we stop it