macOS XPC Connecting Process Check
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Quando uma conexão é estabelecida a um serviço XPC, o servidor verificará se a conexão é permitida. Estas são as verificações que geralmente seriam realizadas:
Verifique se o processo de conexão está assinado com um certificado assinado pela Apple (somente fornecido pela Apple).
Se isso não for verificado, um atacante poderia criar um certificado falso para corresponder a qualquer outra verificação.
Verifique se o processo de conexão está assinado com o certificado da organização (verificação do ID da equipe).
Se isso não for verificado, qualquer certificado de desenvolvedor da Apple pode ser usado para assinatura e conectar-se ao serviço.
Verifique se o processo de conexão contém um ID de pacote apropriado.
Se isso não for verificado, qualquer ferramenta assinada pela mesma organização poderia ser usada para interagir com o serviço XPC.
(4 ou 5) Verifique se o processo de conexão tem um número de versão de software apropriado.
Se isso não for verificado, um cliente antigo e inseguro, vulnerável a injeção de processos, poderia ser usado para conectar-se ao serviço XPC, mesmo com as outras verificações em vigor.
(4 ou 5) Verifique se o processo de conexão tem um runtime endurecido sem direitos perigosos (como aqueles que permitem carregar bibliotecas arbitrárias ou usar variáveis de ambiente DYLD).
Se isso não for verificado, o cliente pode ser vulnerável a injeção de código.
Verifique se o processo de conexão tem um direito que permite conectar-se ao serviço. Isso é aplicável para binários da Apple.
A verificação deve ser baseada no token de auditoria do cliente de conexão em vez de seu ID de processo (PID), uma vez que o primeiro previne ataques de reutilização de PID.
Os desenvolvedores raramente usam a chamada de API do token de auditoria uma vez que é privada, então a Apple poderia mudar a qualquer momento. Além disso, o uso de API privada não é permitido em aplicativos da Mac App Store.
Se o método processIdentifier
for usado, ele pode ser vulnerável.
xpc_dictionary_get_audit_token
deve ser usado em vez de xpc_connection_get_audit_token
, pois o último também pode ser vulnerável em certas situações.
Para mais informações sobre o ataque de reutilização de PID, verifique:
macOS PID ReusePara mais informações sobre o ataque xpc_connection_get_audit_token
, verifique:
Trustcache é um método defensivo introduzido em máquinas Apple Silicon que armazena um banco de dados de CDHSAH de binários da Apple, de modo que apenas binários não modificados permitidos possam ser executados. O que previne a execução de versões anteriores.
O servidor implementará esta verificação em uma função chamada shouldAcceptNewConnection
.
O objeto NSXPCConnection tem uma propriedade privada auditToken
(a que deve ser usada, mas pode mudar) e uma propriedade pública processIdentifier
(a que não deve ser usada).
O processo de conexão pode ser verificado com algo como:
Se um desenvolvedor não quiser verificar a versão do cliente, ele poderia verificar se o cliente não é vulnerável a injeção de processo, pelo menos:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)