header-logo
Suggest Exploit
vendor:
MacOS
by:
Project Zero
7,5
CVSS
HIGH
Out-of-bounds Read
125
CWE
Product Name: MacOS
Affected Version From: N/A
Affected Version To: N/A
Patch Exists: YES
Related CWE: N/A
CPE: N/A
Metasploit: N/A
Other Scripts: N/A
Tags: N/A
CVSS Metrics: N/A
Nuclei References: N/A
Nuclei Metadata: N/A
Platforms Tested: MacOS 10.12.3 (16D32)
2017

NSUnarchiver Read NSBuiltinCharacterSet with Controlled Serialized State

Via NSUnarchiver, an attacker can read NSBuiltinCharacterSet with a controlled serialized state. It reads a controlled int using decodeValueOfObjCType:'i' then either passes it to CFCharacterSetGetPredefined or uses it directly to manipulate __NSBuiltinSetTable. Neither path has any bounds checking and the index is used to maniupulate c arrays of pointers.

Mitigation:

Ensure that bounds checking is performed on user-supplied input.
Source

Exploit-DB raw data:

Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1170

Via NSUnarchiver we can read NSBuiltinCharacterSet with a controlled serialized state.
It reads a controlled int using decodeValueOfObjCType:"i" then either passes it to
CFCharacterSetGetPredefined or uses it directly to manipulate __NSBuiltinSetTable.
Neither path has any bounds checking and the index is used to maniupulate c arrays of pointers.

Attached python script will generate a serialized NSBuiltinCharacterSet with a value of 42
for the character set identifier.

tested on MacOS 10.12.3 (16D32)


Proof of Concept:
https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/42050.zip