Escalamiento Local de Privilegios en macOS Archify <= 1.3.1

Jan 22, 2025

CVE Number

CVE-2024-9062

Credits

Carlos Garrido of Pentraze Cybersecurity

Resumen

La aplicación Archify sufre una vulnerabilidad de escalamiento local de privilegios, que permite a un atacante realizar múltiples operaciones como el usuario root.

Detalles

La aplicación Archify sigue el modelo de “aplicaciones factorizadas”, lo que significa que su funcionalidad está dividida en componentes separados. En este contexto, Archify incluye una herramienta auxiliar llamada com.oct4pie.archifyhelper que delega tareas específicas que requieren privilegios elevados, como la eliminación arbitraria de archivos y la modificación de permisos de archivos. Además, esta herramienta auxiliar privilegiada se comunica a través de XPC.

Es fundamental que un servicio XPC verifique la firma de código de cualquier proceso que intente establecer una conexión. Existen dos métodos para realizar esta validación: la propiedad pública processIdentifier y la propiedad privada auditToken. Sin embargo, confiar en processIdentifier es inseguro. Lamentablemente, com.oct4pie.archifyhelper no verifica el code requirement, los entitlements ni los flags del cliente que intenta establecer una conexión XPC.

Validación de la autenticidad del cliente

Este método gestiona las conexiones entrantes de clientes XPC. Cuando se recibe una nueva conexión, registra el evento, configura la interfaz exportada (HelperToolProtocol) y el objeto que el servicio expone al cliente, reanuda la conexión y la acepta de manera incondicional sin realizar ningún tipo de validación del cliente.

1
2
3
4
5
6
7
    func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool {
        NSLog("New connection accepted.")
        newConnection.exportedInterface = NSXPCInterface(with: HelperToolProtocol.self)
        newConnection.exportedObject = self
        newConnection.resume()
        return true
    }

Remediación

Para mitigar esta vulnerabilidad, el servicio debe basarse en la validación de firma de código en lugar de identificadores de proceso al evaluar conexiones entrantes.

En primer lugar, asegúrese de contar con un certificado válido de Apple Developer ID. Este certificado puede solicitarse directamente a Apple sin necesidad de aprobación especial. Hay más detalles disponibles en la documentación oficial de Apple.

Una vez que el Developer ID esté configurado, utilice las APIs modernas de XPC que aplican requisitos de firma de código antes de aceptar una conexión:

  • [NSXPCConnection setCodeSigningRequirement:] (disponible desde macOS 13.0)

  • xpc_connection_set_peer_code_signing_requirement (disponible desde macOS 12.0)

Estas APIs permiten al servicio verificar la identidad de firma de código del cliente en el momento de la conexión, previniendo de manera efectiva ataques basados en la reutilización de PID.

¿Ver el sitio en español?