Os hackers descobriram que podem enganar as aplicações Java e Python para executar comandos FTP desonestos que abrem portas em Firewalls. Os tempos de execução do Java e do Python não conseguem validar corretamente as URLs de FTP, que podem potencialmente permitir que os invasores criem buracos através de Firewalls para acessar redes locais.
No sábado, o pesquisador de segurança Alexander Klink revelou um ataque interessante quando realizava a exploração de uma vulnerabilidade XXE (XML External Entity) em um aplicativo Java que pode ser usada para enviar e-mails. As vulnerabilidades XXE podem ser exploradas enganando aplicativos para analisar arquivos XML especificamente criados que forçariam o analisador XML a divulgar informações confidenciais, como arquivos, listas de diretórios ou até mesmo informações sobre processos em execução no servidor.
Klink mostrou que o mesmo tipo de vulnerabilidade pode ser usado para enganar o tempo de execução do Java para iniciar conexões FTP com servidores remotos, alimentando-as com URLs FTP na forma de ftp://user:password@host:port/file.ext.
No entanto, verifica-se que a implementação incorporada do cliente de FTP em Java não filtra os caracteres especiais “carriage return” (procedimento de retorno) e line feed (alimentação de linha) dos URLs e realmente interpretá-los.
Ao inserir esses caracteres nos campos de usuário ou senha de um URL FTP, o cliente Java FTP pode ser enganado para executar comandos desonestos e pode até ser enganado para expor o SMTP (Simple Mail Transfer Protocol) porque a sintaxe para SMTP e FTP é semelhante.
Klink ainda mostrou que, explorando uma vulnerabilidade XXE em particular na implementação do cliente FTP do Java, um invasor poderia forçar um aplicativo Java a enviar e-mails para um servidor SMTP.
Klink disse em uma postagem no seu blog:
“Este ataque é particularmente interessante em um cenário onde você pode chegar a um servidor de correio interno a partir da máquina fazendo a análise XML sem restrições, talvez nem ser reconhecido como spam ou Malware na filtragem.”
Depois de analisar a exploração de Klink, Timothy Morgan, um pesquisador focado em análise de pontos cegos em segurança, decidiu revelar um ataque semelhante que funciona contra as implementações de Java e FTP no Python. Mas seu ataque é mais sério porque pode ser usado para criar buracos através das barreiras de Firewalls.
Morgan chama o ataque de “injeção de fluxo de protocolo FTP via URLs maliciosas” que também envolve injetar comandos FTP desonestos explorando a ausência de filtragem de pacotes de requisição de mensagens.
No entanto, em vez de injetar comandos SMTP, Morgan usa o comando FTP PORT para enganar o cliente e abrir um canal de dados para um servidor FTP remoto em uma porta TCP específica.
Como o pesquisador aponta, muitos Firewalls de pacotes com estado de inspeção (SPI) com base em Linux, incluindo os comerciais, suportam o modo clássico de tradução de FTP e abrirão automaticamente uma porta TCP e a encaminharão para uma LAN do cliente de FTP se detectarem uma porta no tráfego de FTP originário desse cliente.
Este tipo de ataque tem sido conhecido há muitos anos, razão pela qual os desenvolvedores do conntrack, um conjunto de ferramentas no Linux que a maioria dos Firewalls usam, implementaram uma verificação adicional. Uma porta só será aberta se o comando PORT aparecer no início de um pacote TCP, para garantir que o cliente realmente enviou o comando.
O ataque representa um invasor potencial com dois problemas: primeiro, descobre o endereço IP interno do cliente para poder enganar com um comando PORT e, em seguida, alinha os pacotes TCP entre o cliente e o servidor para que o comando PORT não caia no início de um pacote.
Morgan encontrou uma maneira de fazer essas duas coisas através de um ataque de injeção de fluxo de protocolo FTP e alega ter desenvolvido uma prova de conceito de exploração que ele não planeja lançar publicamente até que a Oracle e o Python corrijam seu código de cliente de FTP. Disse ele em uma postagem no blog na segunda-feira:
“O ataque inteiro (incluindo o pedido usado para determinar o IP interno da vítima) normalmente é realizado com apenas três ataques SSRF (Server Side Request Falsification) para abrir uma porta TCP. Cada ataque SSRF adicional poderia abrir uma porta TCP adicional.”
Há várias maneiras de explorar esse problema, incluindo usá-lo contra usuários com Java instalado em seus computadores. Os usuários nem precisam executar um applet Java malicioso, porque pode ser entregue por meio de um aplicativo Java Web Start. E ele complementa:
“Se um usuário de desktop puder ser convencido a visitar um site malicioso enquanto o Java estiver instalado, mesmo que os applets Java estejam desabilitados, eles ainda podem acionar o Java Web Start para analisar um arquivo JNLP (extensão java web). Esses arquivos podem conter URLs de FTP maliciosos que acionam esse bug.”
Os causadores do ataque também poderiam segmentar servidores onde os aplicativos Java são executados abusando de uma posição man-in-the-middle, uma forma de ataque em que os dados trocados entre duas partes, são de alguma forma interceptados, registrados e possivelmente alterados na rede ou explorando vulnerabilidades SSRF ou XXE nessas aplicações.
Morgan disse que testou esse ataque contra um firewall Linux personalizado, executando um kernel recente, bem como contra Firewalls da Palo Alto Networks e Cisco Systems que provaram ser vulneráveis ??sob configurações padrão.
“Embora o teste em Firewalls comerciais tenha sido muito limitado neste momento, parece provável que uma porcentagem significativa de Firewalls de produção no mundo são sujeitos a ataques através de injeções de fluxo de protocolo FTP.”
Os desenvolvedores do Java e Python foram notificados desse problema, mas até que corrijam suas implementações de cliente FTP, o pesquisador aconselha os fornecedores de firewall a desabilitar a tradução FTP do modo clássico por padrão.
Os usuários devem desinstalar o Java de seus sistemas ou, pelo menos, desativar o plug-in do navegador e desassociar a extensão de arquivo .jnlp do binário Java Web Start. Enquanto isso, as aplicações Java e Python devem ser auditadas para falhas SSRF e XXE. No entanto, a análise XML em Java é atualmente vulnerável por padrão, tornando as vulnerabilidades XXE muito comuns nessa plataforma, disse Morgan.