Title: [258891] trunk
Revision
258891
Author
[email protected]
Date
2020-03-23 17:15:23 -0700 (Mon, 23 Mar 2020)

Log Message

[Cocoa] Deny access to database mapping service
https://bugs.webkit.org/show_bug.cgi?id=209339
Source/WebKit:

<rdar://problem/56966010>

Reviewed by Brent Fulgham.

In order for the WebContent process to not have permantent access to the database mapping service,
this patch creates an extension for the service in the UI process, sends it to the WebContent
process, where it is consumed. Then, an API call is made which will map the database, and next the
WebContent process will revoke the extension. The WebContent process has then mapped the database,
and access to the database mapping service is no longer needed.

Tested by: fast/sandbox/ios/sandbox-mach-lookup.html

* Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h:
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitializeWebProcess):
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformInitializeWebProcess):
* WebProcess/com.apple.WebProcess.sb.in:

Source/WTF:

<rdar://problem/56966010>

Reviewed by Brent Fulgham.

Disable the use of UTTypeRecord swizzling, since this is not needed with the new approach
of denying the database mapping service in this patch.

* wtf/PlatformUse.h:

LayoutTests:

Reviewed by Brent Fulgham.

* fast/sandbox/ios/sandbox-mach-lookup-expected.txt:
* fast/sandbox/ios/sandbox-mach-lookup.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (258890 => 258891)


--- trunk/LayoutTests/ChangeLog	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/LayoutTests/ChangeLog	2020-03-24 00:15:23 UTC (rev 258891)
@@ -1,3 +1,13 @@
+2020-03-23  Per Arne Vollan  <[email protected]>
+
+        [Cocoa] Deny access to database mapping service
+        https://bugs.webkit.org/show_bug.cgi?id=209339
+
+        Reviewed by Brent Fulgham.
+
+        * fast/sandbox/ios/sandbox-mach-lookup-expected.txt:
+        * fast/sandbox/ios/sandbox-mach-lookup.html:
+
 2020-03-23  Jason Lawrence  <[email protected]>
 
         [ iOS wk2 Debug ] fast/text/control-characters/visible-control-characters-1.html is flaky crashing.

Modified: trunk/LayoutTests/fast/sandbox/ios/sandbox-mach-lookup-expected.txt (258890 => 258891)


--- trunk/LayoutTests/fast/sandbox/ios/sandbox-mach-lookup-expected.txt	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/LayoutTests/fast/sandbox/ios/sandbox-mach-lookup-expected.txt	2020-03-24 00:15:23 UTC (rev 258891)
@@ -25,3 +25,4 @@
 PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.mobileassetd") is false
 PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.mobileassetd.v2") is false
 PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.iconservices") is false
+PASS internals.hasSandboxMachLookupAccessToGlobalName("com.apple.WebKit.WebContent", "com.apple.lsd.mapdb") is false

Modified: trunk/LayoutTests/fast/sandbox/ios/sandbox-mach-lookup.html (258890 => 258891)


--- trunk/LayoutTests/fast/sandbox/ios/sandbox-mach-lookup.html	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/LayoutTests/fast/sandbox/ios/sandbox-mach-lookup.html	2020-03-24 00:15:23 UTC (rev 258891)
@@ -28,6 +28,7 @@
     shouldBeFalse("internals.hasSandboxMachLookupAccessToGlobalName(\"com.apple.WebKit.WebContent\", \"com.apple.mobileassetd\")");
     shouldBeFalse("internals.hasSandboxMachLookupAccessToGlobalName(\"com.apple.WebKit.WebContent\", \"com.apple.mobileassetd.v2\")");
     shouldBeFalse("internals.hasSandboxMachLookupAccessToGlobalName(\"com.apple.WebKit.WebContent\", \"com.apple.iconservices\")");
+    shouldBeFalse("internals.hasSandboxMachLookupAccessToGlobalName(\"com.apple.WebKit.WebContent\", \"com.apple.lsd.mapdb\")");
 }
 </script>
 </head>

Modified: trunk/Source/WTF/ChangeLog (258890 => 258891)


--- trunk/Source/WTF/ChangeLog	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WTF/ChangeLog	2020-03-24 00:15:23 UTC (rev 258891)
@@ -1,3 +1,16 @@
+2020-03-23  Per Arne Vollan  <[email protected]>
+
+        [Cocoa] Deny access to database mapping service
+        https://bugs.webkit.org/show_bug.cgi?id=209339
+        <rdar://problem/56966010>
+
+        Reviewed by Brent Fulgham.
+
+        Disable the use of UTTypeRecord swizzling, since this is not needed with the new approach
+        of denying the database mapping service in this patch.
+
+        * wtf/PlatformUse.h:
+
 2020-03-23  John Wilander  <[email protected]>
 
         Add the capability to change all of a website's cookies to SameSite=Strict

Modified: trunk/Source/WTF/wtf/PlatformUse.h (258890 => 258891)


--- trunk/Source/WTF/wtf/PlatformUse.h	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WTF/wtf/PlatformUse.h	2020-03-24 00:15:23 UTC (rev 258891)
@@ -321,6 +321,4 @@
 #define USE_CTFONTTRANSFORMGLYPHSWITHLANGUAGE 1
 #endif
 
-#if PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 140000
-#define USE_UTTYPE_SWIZZLER 1
-#endif
+#define USE_UTTYPE_SWIZZLER 0

Modified: trunk/Source/WebKit/ChangeLog (258890 => 258891)


--- trunk/Source/WebKit/ChangeLog	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WebKit/ChangeLog	2020-03-24 00:15:23 UTC (rev 258891)
@@ -1,3 +1,30 @@
+2020-03-23  Per Arne Vollan  <[email protected]>
+
+        [Cocoa] Deny access to database mapping service
+        https://bugs.webkit.org/show_bug.cgi?id=209339
+        <rdar://problem/56966010>
+
+        Reviewed by Brent Fulgham.
+
+        In order for the WebContent process to not have permantent access to the database mapping service,
+        this patch creates an extension for the service in the UI process, sends it to the WebContent
+        process, where it is consumed. Then, an API call is made which will map the database, and next the
+        WebContent process will revoke the extension. The WebContent process has then mapped the database,
+        and access to the database mapping service is no longer needed.
+
+        Tested by: fast/sandbox/ios/sandbox-mach-lookup.html
+
+        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode const):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::platformInitializeWebProcess):
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformInitializeWebProcess):
+        * WebProcess/com.apple.WebProcess.sb.in:
+
 2020-03-23  Megan Gardner  <[email protected]>
 
         Removed FIXME comment for work that had already been done.

Modified: trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb (258890 => 258891)


--- trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WebKit/Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb	2020-03-24 00:15:23 UTC (rev 258891)
@@ -537,13 +537,13 @@
     (global-name "com.apple.cfprefsd.daemon")
 )
 
-(deny mach-lookup (with telemetry)
+(deny mach-lookup (with telemetry-backtrace)
     (global-name "com.apple.distributed_notifications@1v3"))
 
 (allow ipc-posix-shm-read*
        (ipc-posix-name-prefix "apple.cfprefs."))
  
-(allow mach-lookup (with telemetry-backtrace)
+(deny mach-lookup (with telemetry-backtrace)
     (global-name "com.apple.lsd.mapdb"))
 
 ;; <rdar://problem/12413942>

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp (258890 => 258891)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-03-24 00:15:23 UTC (rev 258891)
@@ -169,6 +169,7 @@
 #if PLATFORM(COCOA)
     encoder << neHelperExtensionHandle;
     encoder << neSessionManagerExtensionHandle;
+    encoder << mapDBExtensionHandle;
     encoder << systemHasBattery;
     encoder << mimeTypesMap;
     encoder << mapUTIFromMIMEType;
@@ -456,6 +457,12 @@
         return false;
     parameters.neSessionManagerExtensionHandle = WTFMove(*neSessionManagerExtensionHandle);
 
+    Optional<Optional<SandboxExtension::Handle>> mapDBExtensionHandle;
+    decoder >> mapDBExtensionHandle;
+    if (!mapDBExtensionHandle)
+        return false;
+    parameters.mapDBExtensionHandle = WTFMove(*mapDBExtensionHandle);
+
     Optional<bool> systemHasBattery;
     decoder >> systemHasBattery;
     if (!systemHasBattery)

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.h (258890 => 258891)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-03-24 00:15:23 UTC (rev 258891)
@@ -213,6 +213,7 @@
 #if PLATFORM(COCOA)
     Optional<SandboxExtension::Handle> neHelperExtensionHandle;
     Optional<SandboxExtension::Handle> neSessionManagerExtensionHandle;
+    Optional<SandboxExtension::Handle> mapDBExtensionHandle;
     bool systemHasBattery { false };
     Optional<HashMap<String, Vector<String>, ASCIICaseInsensitiveHash>> mimeTypesMap;
     HashMap<String, String> mapUTIFromMIMEType;

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (258890 => 258891)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-03-24 00:15:23 UTC (rev 258891)
@@ -380,7 +380,6 @@
     if (!WebCore::IOSApplication::isMobileSafari() || _AXSApplicationAccessibilityEnabled()) {
         static const char* services[] = {
             "com.apple.lsd.open",
-            "com.apple.lsd.mapdb",
             "com.apple.mobileassetd",
             "com.apple.iconservices",
             "com.apple.PowerManagement.control",
@@ -415,6 +414,10 @@
     parameters.systemHasBattery = systemHasBattery();
     parameters.mimeTypesMap = commonMimeTypesMap();
     parameters.mapUTIFromMIMEType = createUTIFromMIMETypeMap();
+
+    SandboxExtension::Handle mapDBHandle;
+    SandboxExtension::createHandleForMachLookup("com.apple.lsd.mapdb", WTF::nullopt, mapDBHandle, SandboxExtension::Flags::NoReport);
+    parameters.mapDBExtensionHandle = WTFMove(mapDBHandle);
 #endif
     
 #if PLATFORM(IOS)

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (258890 => 258891)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-03-24 00:15:23 UTC (rev 258891)
@@ -104,6 +104,7 @@
 #import "RunningBoardServicesSPI.h"
 #import "UserInterfaceIdiom.h"
 #import "WKAccessibilityWebPageObjectIOS.h"
+#import <MobileCoreServices/MobileCoreServices.h>
 #import <UIKit/UIAccessibility.h>
 #import <WebCore/UTTypeRecordSwizzler.h>
 #import <pal/spi/ios/GraphicsServicesSPI.h>
@@ -274,6 +275,18 @@
     if (parameters.neSessionManagerExtensionHandle)
         SandboxExtension::consumePermanently(*parameters.neSessionManagerExtensionHandle);
     NetworkExtensionContentFilter::setHasConsumedSandboxExtensions(parameters.neHelperExtensionHandle.hasValue() && parameters.neSessionManagerExtensionHandle.hasValue());
+
+    if (parameters.mapDBExtensionHandle) {
+        auto extension = SandboxExtension::create(WTFMove(*parameters.mapDBExtensionHandle));
+        bool ok = extension->consume();
+        ASSERT_UNUSED(ok, ok);
+        // Perform API calls which will communicate with the database mapping service, and map the database.
+        auto uti = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, CFSTR("text/html"), 0));
+        auto mimeType = adoptCF(UTTypeCopyPreferredTagWithClass(CFSTR("public.png"), kUTTagClassMIMEType));
+        ok = extension->revoke();
+        ASSERT_UNUSED(ok, ok);
+    }
+
     setSystemHasBattery(parameters.systemHasBattery);
 
     if (parameters.mimeTypesMap)

Modified: trunk/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in (258890 => 258891)


--- trunk/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in	2020-03-24 00:06:29 UTC (rev 258890)
+++ trunk/Source/WebKit/WebProcess/com.apple.WebProcess.sb.in	2020-03-24 00:15:23 UTC (rev 258891)
@@ -679,7 +679,6 @@
     (global-name "com.apple.PowerManagement.control")
     (global-name "com.apple.cfprefsd.daemon")
     (global-name "com.apple.coreservices.launchservicesd")
-    (global-name "com.apple.lsd.mapdb")
     (global-name "com.apple.trustd.agent")
 )
 
@@ -887,6 +886,7 @@
             "com.apple.webinspector"
             "com.apple.cfprefsd.daemon"
             "com.apple.tccd"
+            "com.apple.lsd.mapdb"
 
             ;;; FIXME(207716): The following should be removed when the GPU process is complete
             "com.apple.audio.AudioComponentRegistrar" "com.apple.coremedia.endpoint.xpc" "com.apple.coremedia.endpointstream.xpc"
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to