Conhecemos ld.so
pesquisas por bibliotecas em diretórios especificados pela variável de ambiente $LD_LIBRARY_PATH
, mas usuários comuns podem executar:
export LD_LIBRARY_PATH=dir1:dir2...
Eles podem salvar a biblioteca infectada em um caminho com prioridade mais alta que a original, para ld.so
encontrar essa em vez da biblioteca confiável na ld.so.cache
.
Isso é um risco?
Como podemos desativar a gravação nessa variável de ambiente para usuários comuns?
Respostas:
Isso não representa um risco à segurança, porque você sempre pode definir apenas variáveis de ambiente para seu ambiente atual (por exemplo, sessão atual do Bash) e, usando o
export
comando, seus ambientes filhos (scripts iniciados, subshells, etc.). É impossível escalar uma variável de ambiente criada ou modificada no ambiente pai. Isso inclui que é impossível para usuários regulares fazer alterações em todo o sistema, é claro.Portanto, o único ambiente que seria afetado se você executar
export LD_LIBRARY_PATH=...
é o seu shell atual e quaisquer subconjuntos dele que você possa gerar mais tarde. Digamos que você altere o caminho de pesquisa para incluir bibliotecas infectadas no início, ou seja, com a maior prioridade. Em seguida, você executa um executável que carrega uma das bibliotecas infectadas sem nem mesmo saber. O que acontece agora?Você tem código malicioso (da biblioteca infectada) sendo executado em sua própria conta de usuário com privilégios regulares de não administrador. Isso pode parecer ruim, mas na verdade ... e daí? É executado com privilégios regulares de usuário, o que novamente significa que não pode afetar o sistema inteiro. A propósito, executar diretamente um executável com o mesmo código malicioso teria sido muito mais fácil do que modificar o caminho de pesquisa da biblioteca e aguardar que um executável normal o carregasse.
Conclusão: Um usuário comum pode modificar apenas seu próprio caminho de pesquisa de biblioteca, o que significa que ele também pode carregar apenas essas bibliotecas em sua conta de usuário comum com privilégios regulares que não são do sistema. Dito isso, não faz diferença se eles forçam o carregamento de uma biblioteca infectada ou executam diretamente um executável infectado. Você não ganha absolutamente nada se essa variável de ambiente não puder ser substituída pelos usuários.
PS: Também existem executáveis com o sinalizador setuid ou setgid definido, o que significa que eles não serão executados como o usuário / grupo de quem os executa, mas de quem os possui . Por exemplo, o
sudo
executável pertence à raiz e tem o sinalizador setuid definido, o que significa que sempre é executado como raiz quando executado. Por motivos de segurança, a$LD_LIBRARY_PATH
variável é ignorada pelos executáveis com um dos sinalizadores setuid / setgid definido para garantir que o usuário comum não possa executar um executável executando com privilégios de root para carregar bibliotecas arbitrárias.(Obrigado a @Rinzwind por apontar isso!)
fonte
LD_LIBRARY_PATH
é claro que é um problema de segurança quando você carrega uma biblioteca maliciosa e muda o comportamento de um binário.