
NSKeyedUnarchiver डिसीरियलाइज़ेशन के प्रति संवेदनशील सिम्युलेटेड macOS/iOS XPC सेवा, साथ ही एक्सप्लॉइट प्रदर्शन और असुरक्षित डिसीरियलाइज़ेशन के माध्यम से RCE हेतु तैयार plist पेलोड।
#!/usr/bin/env python3
# vulnerable_xpc_service.py - Simulated XPC service using unsafe plist deserialization
import plistlib, subprocess, socketserver, struct
# Mach message simulation: we just accept a binary plist over TCP.
class XPCHandler(socketserver.BaseRequestHandler):
def handle(self):
raw = self.request.recv(4096)
# Insecure: using plistlib.loads on untrusted data without sanitization
plist_data = plistlib.loads(raw) # In real macOS, NSKeyedUnarchiver can execute code
# Simulate a command being embedded in the plist
command = plist_data.get("runCommand")
if command:
subprocess.Popen(command, shell=True)
self.request.sendall(b"Success")
server = socketserver.TCPServer(('localhost', 8888), XPCHandler)
print("Vulnerable XPC service on :8888")
server.serve_forever()
macOS/iOS पर एक XPC सेवा NSKeyedUnarchiver का उपयोग करके सुरक्षित कोडिंग अनुमति‑सूची (allow‑list) के बिना आने वाले Mach संदेशों को deserialize करती है। एक हमलावर एक serialized ऑब्जेक्ट ग्राफ बना सकता है जो deserialization पर मनमाना कोड निष्पादित करता है।
NSKeyedUnarchiver का उपयोग अविश्वसनीय डेटा और किसी क्लास व्हाइटलिस्ट के बिना किया जाता है, जिससे ऐसी वस्तुओं का instantiation हो सकता है जो कोड निष्पादन को ट्रिगर करती हैं (जैसे NSInvocation)।python vulnerable_xpc_service.py
python exploit_xpc.py