O que é o jQuery?
É uma framework de Javascript, sendo que possui uma funcionalidade de upload, e que é um pacote open-source desenvolvido pelos software developers; com esta funcionalidade, muitas aplicações web permitem que o utilizador consiga selecionar vários ficheiros, arrastá-los, validar e prever imagens e vídeo, entre outras funcionalidades. É uma framework que trabalha com qualquer tipo de plataforma server-side que suporte formulários HTML padrão, como PHP, Python, Ruby on Rails, Java e mesmo Node.js.
O investigador subjacente a esta descoberta estudou dois ficheiros de PHP que estavam contidos no pacote -
Upload.php and UploadHandler.php - dentro da diretoria server/php
Como é que estes ficheiros funcionam?
O ficheiro Upload.php vai chamar o ficheiro principal, o UploadHandler.php, que é onde o código de upload de ficheiros reside. E o investigador verificou que os ficheiros eram todos mandados para a diretoria files/ no diretorio-raíz do servidor web.
Onde estava o problema?
Ora, após um comando rápido de teste com o curl e um ficheiro com shell de PHP foi confirmada a possibilidade de se criar uma shell na web e correr comandos no servidor. Ou seja, o problema não era só o facto de os ficheiros serem mandados para o diretório do servidor web, mas sim o facto de o atacante não precisar de nenhuma forma de autenticação para fazer upload dos ficheiros.
Ao não serem examinados os ficheiros que se mandavam para o servidor, só aí o atacante podia decidir quais os ficheiros a serem lá executados, e consequentemente podia correr comandos com privilégio do servidor web, que costuma ser "www-data".
Vulnerabilidade usada para outras situações mais graves
Em muitos casos, o que se faz é fazer upload de uma shell em PHP, para conseguir acesso ao sistema, e a partir daí incorre-se numa outra série de ações, como fazer upload de malware, extrair dados do website, usar a shell como meio para chegar a outras partes da rede (pivoting, em termos de segurança), alterar o site, usá-lo como command and control de uma botnet, entre muitas outras ações.
Foi atribuída a esta falha o CVE-2018-9206, introduzido aquando da desabilitação, por parte do Apache, do controlo de segurança que o widget usava para o controlo do acesso de ficheiro para a sua diretoria raíz. O que aconteceu foi que o suporte por defeito dos ficheiros .htaccess foi eliminado desde o Apache 2.3.9, e daí deixou o código desprotegido, não colocando restrições de acesso às pastas, incluindo esta falha.
Este problema foi corrigido na versão mais recente permitindo apenas upload de ficheiros de imagens por defeito, como por exemplo GIF, JPG, JPEG and PNG.
Podes obter mais informações sobre esta funcionalidade aqui: https://blueimp.github.io/jQuery-File-Upload/