Por que "AcceptEnv *" é considerado inseguro?

12

Em /etc/ssh/sshd_config, existe uma opção chamada AcceptEnvque permite que o cliente ssh envie variáveis ​​de ambiente. Eu preciso ser capaz de enviar um grande número de variáveis ​​de ambiente. Isso muda em todas as conexões do cliente, portanto, colocá-los em um script de login no servidor seria mais difícil.

Eu li que "AcceptEnv *"é inseguro. Gostaria de entender por que, antes de tentar obter uma lista de todas as variáveis ​​de ambiente que tentamos definir para colocar lá.

Por que é considerado inseguro? Posso obter um exemplo?

TheDauthi
fonte

Respostas:

11

A ativação do processamento do ambiente pode permitir que os usuários ignorem as restrições de acesso em algumas configurações usando mecanismos como LD_PRELOAD.

Nem todas as versões das páginas de manual do sshd_config mencionam isso. Se suas variáveis ​​de ambiente forem alteradas previamente e determinados processos privilegiados forem executados com novas bibliotecas especificadas por isso, poderão ocorrer problemas.

Dê uma olhada em http://www.dankalia.com/tutor/01005/0100501004.htm e procure por "LD_PRELOAD Exploit". Desculpe, a página não possui links âncora.

Consulte também esta pergunta StackOverflow, " O que é o truque LD_PRELOAD? "

A definição de variáveis ​​de ambiente após a conexão é boa, mas quando essas variáveis ​​são interpretadas pelo daemon ssh conforme definido por AcceptEnv, podem ocorrer coisas ruins.

Jeff Ferland
fonte
1
Qual é a diferença de quando elas definem as variáveis ​​manualmente após o login?
Joseph Garvin
1
@ Joseph Garvin, alguns sistemas têm shells restritos ou permitem apenas um único comando específico, de forma que "eles" não possam . A preocupação, então, é fornecer um meio pelo qual essas medidas de segurança possam ser contornadas.
Charles Duffy
0

Não aceite variáveis ​​de ambiente:

Veja a exploração do Shellshock lançada recentemente. Se você aceita variáveis ​​de ambiente, está abrindo uma exploração realmente desagradável.

John Hunt
fonte
1
Você está espalhando medo IMO. Se você está preocupado, por que eles têm acesso SSH? E você não pode impedi-los de definir variáveis ​​de ambiente uma vez que estejam no shell ou até mesmo em funções. Essa exploração é sobre acesso não autorizado ao shell através de coisas como nginx, não ao acesso autorizado ao shell.
Jordon Bedwell
De qualquer forma, você aceita pelo menos um env. variável denominada TERM. Não pode haver necessidades válidas para aceitar outras variáveis como IMPRESSORA, EDITOR, pager, ...
ibre5041
@JordonBedwell, nem toda conexão SSH está autorizada para acesso ao shell. Eu tenho vários sistemas nos quais existem contas nas quais a única autenticação é com uma chave SSH que permite executar apenas um único comando específico (com a identidade do proprietário dessa chave e outros detalhes, inseridos).
Charles Duffy
... dito isso, concordo que, a partir de 2017, o ShellShock está exagerando aqui. Nas implementações atuais, a geração de uma função exportada requer controle não apenas do valor de uma variável de ambiente , mas também de seu nome (e o processo de avaliação de funções exportadas durante a inicialização do shell não é mais propenso a ataques de injeção).
Charles Duffy