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?

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.