Nginx暴露危漏洞CVE-2021-23017

发表于:2021-5-27 09:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:虫虫安全    来源:今日头条

  日前著名Web服务器和反向代理服务器Nginx暴严重漏洞NS解析器Off-by-One堆写入漏洞,该漏洞存在于Nginx的DNS解析模块ngx_resolver_copy()。攻击者可以利用该漏洞进行远程DDos攻击,甚至远程执行。
  概述
  ngx_resolver_copy()在处理DNS响应时出现一个off-by-one错误,利用该漏洞网络攻击者可以在堆分配的缓冲区中写一个点字符(.’, 0x2E)导致超出范围。 所有配置解析器语法的(resolver xxxx)Nginx实例可以通过DNS响应(响应来自Nginx的DNS请求)来触发该漏洞。 特制数据包允许使用0x2E覆盖下一个堆块元数据的最低有效字节,利用该漏洞攻击者,可以实现Ddos拒绝服务,甚至可能实现远程代码执行。
  由于Nginx中缺乏DNS欺骗缓解措施,并且在检查DNS事务ID之前调用了易受攻击的功能,因此远程攻击者可能能够通向中毒服务器注入受毒的DNS响应来利用此漏洞。
  漏洞影响
  严重等级: 高
  漏洞向量: 远程/DNS
  确认的受影响版本: 0.6.18-1.20.0
  确认的修补版本: 1.21.0,1.20.1
  供应商: F5,Inc.
  状态: 公开
  CVE: CVE-2021-23017
  CWE: 193
  CVSS得分: 8.1
  CVSS向量:CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C
  漏洞分析
  当Nginx配置中设置resolver时,Nginx DNS解析器(core/ngx_resolver.c)用于通过DNS解析多个模块的主机名。
  Nginx中通过ngx_resolver_copy()调用来验证和解压缩DNS响应中包含的每个DNS域名,接收网络数据包作为输入和指向正在处理的名称的指针,并在成功后返回指向包含未压缩名称的新分配缓冲区的指针。调用整体上分两步完成的,
  计算未压缩的域名大小的长度len并验证输入包的合法性,丢弃包含大于128个指针或包含超出输入缓冲区边界的域名。
  分配输出缓冲区,并将未压缩的域名复制到其中。
  第1部分中的大小计算与第2部分中的未压缩的域名之间的不匹配,导致一个len的一个off-by-one错误,导致允许以一个字节为单位写一个点字符超出name->data的边界。
  当压缩名称的最后一部分包含一个指向NUL字节的指针时,就会发生计算错误。 尽管计算步骤仅考虑标签之间的点,但每次处理标签并且接着的字符为非NUL时,解压缩步骤都会写入一个点字符。当标签后跟指向NUL字节的指针时,解压缩过程将:
  // 1) copy the label to the output buffer, 
  ngx_strlow(dst, src, n); 
  dst += n; 
  src += n; 
  // 2) read next character, 
  n = *src++; 
  // 3) as its a pointer, its not NUL, 
  if (n != 0) { 
  // 4) so a dot character that was not accounted for is written out of bounds 
  *dst++ = '.'; 
  } 
  // 5) Afterwards, the pointer is followed, 
  if (n & 0xc0) { 
  n = ((n & 0x3f) << 8) + *src; 
  src = &buf[n]; 
  n = *src++; 
  } 
  // 6) and a NULL byte is found, signaling the end of the function 
  if (n == 0) { 
  name->len = dst - name->data; 
  return NGX_OK; 
  } 
  如果计算的大小恰好与堆块大小对齐,则超出范围的点字符将覆盖下一个堆块长度的元数据中的最低有效字节。这可能会直接导致下一个堆块的大小写入,但还会覆盖3个标志,从而导致 PREV_INUSE被清除并 IS_MMAPPED被设置。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号