Os links simbólicos nos modelos são um problema de segurança e, se sim, por quê?

35

O Magento recomenda não usar modelos via links simbólicos:

Advanced > Developer > Template Settings > Allow Symlinks

Atenção! A ativação desse recurso não é recomendada em ambientes de produção, pois representa um risco potencial à segurança.

Até hoje não vejo riscos aqui.

  • Qual é o risco?
Fabian Blechschmidt
fonte
8
Só posso imaginar que isso seja um risco em hosts compartilhados, que não devem ser usados ​​para comércio eletrônico em primeiro lugar.
benmarks 9/09/14
3
@benmarks. Por que você não coloca isso como resposta?
Marius
2
Muito boa pergunta @Fabi!
user487772
3
Eu sabia que outros ofereceriam respostas mais completas. Eu estava
certo
3
@benmarks O site precisa de uma resposta maior taxa por questão de qualquer maneira ;-)
user487772

Respostas:

40

Os links simbólicos não são necessariamente ruins.

Primeiro de tudo: se você tentar abrir um destino de link simbólico, as permissões de arquivo do destino estarão em vigor. Se você não tem permissão para ler / gravar / executar o destino do link simbólico, nada acontece.

Mas: você pode executar arquivos fora da raiz do documento (às vezes é isso que você quer fazer com eles, certo?). O problema pode ocorrer se seu está não em um ambiente suEXEC e ter uma apacheou www-datausuário em uma hospedagem compartilhada, que é encarregado de servir arquivos a partir de diferentes contas. O usuário do sistema não tem permissão para acessar arquivos de outro cliente, mas o apache/www-datausuário terá direitos de leitura em todas as contas compartilhadas. Pode ser um cenário em que um usuário possa acessar arquivos de outro usuário em um host compartilhado. Não com seu próprio usuário, mas acessando o arquivo via navegador com o apache/www-datausuário. Para resumir: Nesse cenário, você poderá acessar os arquivos de outros usuários => incorretos.

O próximo ponto ruim é que um invasor pode criar links simbólicos, também para arquivos como / etc / passwd, ..., baixar esses dados e prosseguir com essas informações. Isso não depende apenas do link simbólico, mas também de uma configuração incorreta do servidor (onde o acesso a esses arquivos é estritamente limitado). Portanto, o não uso de links simbólicos impede mais ataques possíveis.

Não se trata apenas do link simbólico ser um risco à segurança, mas um problema de configuração do servidor.

Anna Völkl
fonte
5
Grande explicação - esta é a resposta correta, essencialmente, "use a seu próprio risco"
philwinkle
2
Provavelmente vale a pena mencionar (embora sempre haja um equilíbrio com os bugs relacionados à segurança em um ambiente de 'ódio para atualizar') - o Magento desencorajava fortemente os links simbólicos estavam relacionados a uma exploração em que arquivos de modelo e layout fora da app/designpasta, quando combinados com outras explorações menores, pode ser usado por um usuário administrador para escalação de privilégios e outras explorações de servidor.
Alan Storm
11
No httpd do Apache, se você deseja oferecer suporte a links simbólicos, considere essa SymLinksIfOwnerMatchopção em vez de FollowSymlinks.
hakre
15

sim, é por isso que os servidores da web geralmente também têm uma configuração "não siga os links simbólicos" ou pelo menos uma "apenas seguem os links simbólicos do destino com o mesmo usuário". Isso porque o servidor da web / php geralmente é executado com mais direitos do que você deve ter acesso.

E como os servidores da web geralmente tentam evitar coisas como visible / etc / shadow, isso é ainda mais perigoso para os modelos magento, pois os modelos são analisados ​​por meio de include () para que você tenha possíveis vazamentos de segurança muito fortes se não tiver controle total sobre seus arquivos.

Você pode argumentar que existem outros problemas, mas quem realmente conhece todos os cenários de ataque em potencial e, na maioria das vezes, é a combinação de diferentes brechas de segurança menos problemáticas, que levam a grandes falhas.

Além disso, houve algum tempo atrás, uma correção de segurança em relação ao diretório de mídia e links simbólicos, portanto, você deve procurar por possíveis cenários de ataque.

Flyingmana
fonte
11
Se alguém puder criar links simbólicos no seu servidor, você já está com problemas maiores. Quero dizer - veja o comentário de Ben abaixo. Quem hospedaria um Magento em uma hospedagem compartilhada? Quem poderia anfitrião qualquer coisa em uma hospedagem compartilhada hoje em dia e por isso :)?
Sven
3
simplesmente porque existem pessoas que fazem isso. Você não pode esperar que outras pessoas ajam de maneira razoável. Sempre haverá pessoas que fazem isso e sempre haverá pessoas que cometerão erros em relação à configuração geral do servidor.
Flyingmana 10/09
14

Só posso imaginar que isso seja um risco em hosts compartilhados, que não devem ser usados ​​para comércio eletrônico em primeiro lugar.

benmarks
fonte
11
Infelizmente, é usado bastante.
Piotr Kaminski
2
De acordo com os padrões do PCI Security Council tecnicamente, a nuvem pública é multilocatária e, mesmo assim, é considerada um "risco".
philwinkle
4

O patch Magento SUPEE-9767 inclui APPSEC-1281: Execução remota de código por meio de links simbólicos , portanto, sim, os links simbólicos nos modelos são um problema de segurança.

Tipo:
Execução Remota de Código (RCE)

Gravidade CVSSv3:
8,8 (Alta)

Ataques conhecidos:
Sim. Os invasores estão desativando uma proteção de configuração depois de obter acesso de administrador e fazendo upload de código malicioso.

Descrição: o
uso da opção AllowSymlinks nas definições de configuração pode permitir o upload de uma imagem que contém código malicioso. Embora essa opção esteja desabilitada por padrão, um invasor com acesso às configurações da loja pode habilitá-lo e executar o código remotamente.

Produto (s) afetado (s):
Magento CE anterior a 1.9.3.3 e Magento EE anterior a 1.14.3.3

Corrigido em:
CE 1.9.3.3, EE 1.14.3.3, SUPEE-9767

Repórter:
Wilko Nienhaus

ehannes
fonte
0

Não recomendo permitir. Eu estava enfrentando erros de carregamento de js enquanto os links simbólicos estavam ativados.
Vários;

TypeError: $ .widget não é uma função

Eu tenho que tentar 4-5 atualização para páginas carregadas com sucesso.
Após fechá-lo, os recursos não podem ser implementados carregam lentamente pela primeira vez, mas os erros js desapareceram.

PS: Após desativar o link simbólico, você deve excluir a cópia dos arquivos implantada após cada alteração no static.php para copiá-la novamente.

rbostan
fonte
11
Desculpe, eu não entendo - você tem que fazer 4-5 atualizações, antes que funcione? O que isso tem a ver com links simbólicos?
Fabian Blechschmidt
Antes de desativar os links simbólicos :) Desculpe pelo meu inglês.
Rbostan #
Estamos falando de magento2? Então eu entendo, que eu não entendo - nenhuma pista sobre 2 ainda.
Fabian Blechschmidt 10/10