Suponha que no FreeBSD (ou talvez no Linux) exista um usuário normal sem privilégios (não superusuário). E há um telnet autônomo (eu sei que o telnet geralmente é executado no inetd) rodando (de propriedade) deste usuário. (Suponha que não houvesse nenhum telnet original de propriedade do root em execução.) Este servidor telnet é programado para não verificar as variáveis de ambiente ld_* antes de passá-las para /bin/login de propriedade do root que tem setuid configurado.
A questão seria: 1. Este telnet funcionará? 2. Se funcionar, será possível passar variáveis de ambiente para/bin/login?
Responder1
Suponha que no FreeBSD (ou talvez no Linux) exista um superusuário sem privilégios.
“Superusuário não privilegiado” é uma contradição em termos; a própria palavra "superusuário" significa um usuário com todos os privilégios.
Este servidor telnet está programado para não verificar variáveis de ambiente ld_*
Não tenho certeza se isso é relevante. O servidor telnet não possui privilégios especiais, portanto, remover LD_*
variáveis não é muito útil...
- Este telnet funcionará? 2. Se funcionar, será possível passar variáveis de ambiente para/bin/login?
Funcionará parcialmente, mas provavelmente não será possível vincular-se à porta Telnet padrão devido à falta do privilégio CAP_NET_BIND_SERVICE.
Sim, será capaz de passar variáveis de ambiente para login
, assim como qualquer outro processo. Entretanto, pelo menos no Linux, o carregador (ld-linux.so) descarta todas LD_*
as variáveis antes de executar um programa setuid, então um setuid- login
não seria afetado por elas.