Desenvolvimento

3 ago, 2017

Falha de injeção de código crítico no GNOME Files deixa usuários Linux abertos a hacking

Publicidade

A vulnerabilidade no componente manipulador de miniaturas do GNOME Files pode permitir que hackers executem códigos maliciosos em máquinas Linux.

Falha de Injeção de Código Crítico no GNOME Files
image by The Hacker News

Apelidada Bad Taste, a vulnerabilidade (CVE-2017–11421) foi descoberta pelo pesquisador alemão Nils Dagsson Moskopp, que também lançou o código de prova de conceito em seu blog para demonstrar a vulnerabilidade.

A vulnerabilidade de injeção de código reside no “gnome-exe-thumbnailer” – uma ferramenta para gerar miniaturas de arquivos executáveis do Windows (.exe/.msi/.dll/.lnk) para o GNOME, o que requer que os usuários tenham aplicativos Wine instalados em seus sistemas para abri-los.

Código shell script em /usr/bin/gnome-exe-thumbnailer

# Get the version number:
 if [[ ${INPUTFILE##*.} = 'msi' ]]
 then
 # Look for the ProductVersion property if user has the Microsoft (R) Windows Script Host installed:
 if which wine && grep -v 'Wine placeholder DLL' $HOME/.wine/drive_c/windows/system32/cscript.exe
 then
 # Workaround wine bug #19799: cscript crashes if you call WScript.Arguments(0)
 # http://bugs.winehq.org/show_bug.cgi?id=19799
 <<< " Dim WI, DB, View, Record Set WI = CreateObject(\"WindowsInstaller.Installer\") Set DB = WI.OpenDatabase(\"$INPUTFILE\",0) Set View = DB.OpenView(\"SELECT Value FROM Property WHERE Property = 'ProductVersion'\") View.Execute Wscript.Echo View.Fetch.StringData(1) " iconv -f utf8 -t unicode > $TEMPFILE1.vbs
VERSION=$(
 DISPLAY=NONE wine cscript.exe //E:vbs //NoLogo Z:\\tmp\\${TEMPFILE1##*/}.vbs 2>/dev/null \
 | egrep -o '^[0-9]+\.[0-9]+(\.[0-9][0-9]?)?(beta)?'
 )
else
 # Try to get the version number from extended file properties at least:
 VERSION=$(
 file "$INPUTFILE" \
 | grep -o ', Subject: .*, Author: ' \
 | egrep -o '[0-9]+\.[0-9]+(\.[0-9][0-9]?)?(beta)?' \
 | head -1
 )
 fi

Aqueles que não sabem, o Wine é um software livre e de código aberto que permite aplicações do Windows sejam executadas no sistema operacional Linux.

Moskopp descobriu que ao navegar para um diretório que contém o arquivo .msi, arquivos do GNOME Files leva o nome do arquivo como uma entrada executável e executa o mesmo para criar uma miniatura da imagem.

Para uma exploração bem-sucedida, o invasor pode enviar um arquivo Windows Installer (MSI) com código VBScript malicioso em seu nome de arquivo, que se baixado em um sistema vulnerável pode comprometer a máquina sem nenhuma interação com o usuário.

“Em vez de analisar um arquivo MSI para obter seu número de versão, esse código cria um script que contém o nome de arquivo para o qual uma miniatura deve ser exibida e executada usando o Wine”, explica Moskopp enquanto demonstra seu PoC.

“O script é construído usando um modelo, o que torna possível incorporar o VBScript em um nome de arquivo e acionar sua execução”.

A falha pode ser explorada por hackers em potencial usando outros vetores de ataque, bem como, por exemplo, inserindo diretamente na máquina alvo uma unidade USB com um arquivo malicioso armazenado nele, ou entregando o arquivo malicioso via drive-by-downloads.

Como se proteger do Bad Taste

Moskopp relatou a vulnerabilidade ao Projeto GNOME e ao Projeto Debian. Ambos corrigiram a vulnerabilidade no arquivo gnome-exe-thumbnailer.

A vulnerabilidade afeta o gnome-exe-thumbnailer em versões 0.9.5. Assim, se você executar um sistema com essas versões, verifique se há atualizações imediatamente antes de se tornar vítima dessa vulnerabilidade crítica.

Enquanto isso, Moskopp também aconselhou os usuários a:

  • Excluir todos os arquivos em /usr/share/thumbnailers
  • Não use arquivos GNOME
  • Desinstale qualquer software que facilite automaticamente a execução de nomes de código como código

Moskopp também aconselha os desenvolvedores a não usar “bug-ridden ad-hoc parsers” para analisar arquivos. Para “reconhecer totalmente as entradas antes de processá-las” e usar unparsers, em vez de modelos.