[curl] Restrict allowed protocols
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 5 Jun 2013 21:30:37 +0000 (21:30 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 5 Jun 2013 21:30:37 +0000 (21:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=117257

Patch by Peter Gal <galpeter@inf.u-szeged.hu> on 2013-06-05
Reviewed by Brent Fulgham.

curl supports various protocols (like: HTTP,...,POP3,IMAP...) and by
default all of the are enabled for a single curl handle. Furthermore
all of the protocols are allowed during Location header follow.
This could pose a security risk for example: a malicious server responds
with a crafted Location header pointing to an imap/../(etc) url and the
curl backend will follow it and will give the result for the WebCore.

This patch will restrict the allowed protocols to: HTTP(S), FTP(S), FILE

* platform/network/curl/ResourceHandleManager.cpp:
(WebCore::ResourceHandleManager::initializeHandle):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@151238 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/network/curl/ResourceHandleManager.cpp

index 91757ac..bfcb380 100644 (file)
@@ -1,3 +1,22 @@
+2013-06-05  Peter Gal  <galpeter@inf.u-szeged.hu>
+
+        [curl] Restrict allowed protocols
+        https://bugs.webkit.org/show_bug.cgi?id=117257
+
+        Reviewed by Brent Fulgham.
+
+        curl supports various protocols (like: HTTP,...,POP3,IMAP...) and by
+        default all of the are enabled for a single curl handle. Furthermore
+        all of the protocols are allowed during Location header follow.
+        This could pose a security risk for example: a malicious server responds
+        with a crafted Location header pointing to an imap/../(etc) url and the
+        curl backend will follow it and will give the result for the WebCore.
+
+        This patch will restrict the allowed protocols to: HTTP(S), FTP(S), FILE
+
+        * platform/network/curl/ResourceHandleManager.cpp:
+        (WebCore::ResourceHandleManager::initializeHandle):
+
 2013-06-05  Bear Travis  <betravis@adobe.com>
 
         [css exclusions] Clean up ExclusionShapeInsideInfo dynamic removal code
index 257b570..43c5992 100644 (file)
@@ -657,6 +657,7 @@ void ResourceHandleManager::startJob(ResourceHandle* job)
 
 void ResourceHandleManager::initializeHandle(ResourceHandle* job)
 {
+    static const int allowedProtocols = CURLPROTO_FILE | CURLPROTO_FTP | CURLPROTO_FTPS | CURLPROTO_HTTP | CURLPROTO_HTTPS;
     KURL kurl = job->firstRequest().url();
 
     // Remove any fragment part, otherwise curl will send it as part of the request.
@@ -700,6 +701,8 @@ void ResourceHandleManager::initializeHandle(ResourceHandle* job)
     curl_easy_setopt(d->m_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
     curl_easy_setopt(d->m_handle, CURLOPT_SHARE, m_curlShareHandle);
     curl_easy_setopt(d->m_handle, CURLOPT_DNS_CACHE_TIMEOUT, 60 * 5); // 5 minutes
+    curl_easy_setopt(d->m_handle, CURLOPT_PROTOCOLS, allowedProtocols);
+    curl_easy_setopt(d->m_handle, CURLOPT_REDIR_PROTOCOLS, allowedProtocols);
     // FIXME: Enable SSL verification when we have a way of shipping certs
     // and/or reporting SSL errors to the user.
     if (ignoreSSLErrors)