Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8da8cdb10ac1e7f81579589d658e8359a236d427
      
https://github.com/WebKit/WebKit/commit/8da8cdb10ac1e7f81579589d658e8359a236d427
  Author: Alex Christensen <[email protected]>
  Date:   2024-05-27 (Mon, 27 May 2024)

  Changed paths:
    M Source/WebKit/NetworkProcess/mac/SecItemShim.cpp
    M Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.h
    M Source/WebKit/Shared/Cocoa/CoreIPCCFType.h
    M Source/WebKit/Shared/Cocoa/CoreIPCCFType.mm
    M Source/WebKit/Shared/Cocoa/CoreIPCCFType.serialization.in
    M Source/WebKit/Shared/mac/SecItemResponseData.h
    M Source/WebKit/Shared/mac/SecItemResponseData.serialization.in
    M Source/WebKit/UIProcess/mac/SecItemShimProxy.cpp

  Log Message:
  -----------
  Remove SecKeychainItemRef from CFTypeRef serialization
https://bugs.webkit.org/show_bug.cgi?id=274670
rdar://126271015

Reviewed by Brady Eidson.

SecKeychainItemRef is one of several types that can be returned from a call to 
SecItemCopyMatching.
Because we have SecItemShim and SecItemShimProxy which proxy calls to the UI 
process from the network
process, SecKeychainItemRef needs to be serialized across IPC.  Historically, 
the only way to express
that multiple types can be sent across IPC at one endpoint was to send a 
RetainPtr<CFTypeRef>, which
required adding SecKeychainItemRef to the list of CFTypeRefs that can be 
serialized.  The problem with
that is that everywhere we send or receive a CFDictionaryRef or a CFArrayRef we 
also use a
RetainPtr<CFTypeRef> to serialize their contents, which can be of many types.  
We don't need all the
dictionaries and arrays to be able to serialize a SecKeychainItemRef, and we 
have historically prevented
this from being the cause of IPC-reachable exploits by adding this release 
assertion:
RELEASE_ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessCredentials));
This worked well, but that assertion is often hit by IPC fuzzers.  To properly 
solve this, in this PR
I remove SecKeychainItemRef from the list of things that can be contained by 
CFDictionaryRef and
CFArrayRef and add a new variant of types that allows it only where needed: in 
SecItemResponseData.

* Source/WebKit/NetworkProcess/mac/SecItemShim.cpp:
(WebKit::webSecItemCopyMatching):
* Source/WebKit/Shared/Cocoa/ArgumentCodersCocoa.h:
* Source/WebKit/Shared/Cocoa/CoreIPCCFType.h:
* Source/WebKit/Shared/Cocoa/CoreIPCCFType.mm:
(WebKit::variantFromCFType):
(WebKit::CoreIPCCFType::toCFType const):
(IPC::typeFromCFTypeRef):
* Source/WebKit/Shared/Cocoa/CoreIPCCFType.serialization.in:
* Source/WebKit/Shared/mac/SecItemResponseData.h:
(WebKit::SecItemResponseData::SecItemResponseData):
(WebKit::SecItemResponseData::resultObject):
(WebKit::SecItemResponseData::resultObject const):
* Source/WebKit/Shared/mac/SecItemResponseData.serialization.in:
* Source/WebKit/UIProcess/mac/SecItemShimProxy.cpp:
(WebKit::SecItemShimProxy::secItemRequest):

Canonical link: https://commits.webkit.org/279354@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to