FreeRDP 是远程桌面协议 (RDP) 越界读取 - CVE-2023-40181

admin 2023年9月1日02:52:19评论5 views字数 1658阅读5分31秒阅读模式
 

FreeRDP 是远程桌面协议 (RDP) 的免费实现,在 Apache 许可证下发布。受影响的版本会受到整数下溢的影响,导致“zgfx_decompress_segment”函数中的越界读取。在“CopyMemory”的上下文中,可能会读取超出传输数据包范围的数据,并可能导致崩溃。此问题已在版本 2.11.0 和 3.0.0-beta3 中得到解决。建议用户升级。此问题没有已知的解决方法。

 

  • 受影响的版本

<= 2.10.0,<= 3.0.0-beta2

  • 修补版本

2.11.0、3.0.0-beta3

 

细节一、

FreeRDP/libfreerdp/codec/zgfx.c

FreeRDP 是远程桌面协议 (RDP) 越界读取 - CVE-2023-40181

 zgfx -> pbInputCurrent  =  pbSegment ; zgfx -> pbInputEnd  =  & pbSegment [ cbSegment  -  1 ]; /* NumberOfBitsToDecode = ((NumberOfBytesToDecode - 1) * 8) - ValueOfLastByte */  zgfx -> cBitsRemaining  =  8  * ( cbSegment  -  1 ) -  * zgfx -> pbInputEnd ; zgfx -> cBitsCurrent  =  0 ; zgfx -> BitsCurrent  =  0 ;

中可能发生整数下溢cBitsRemaining

 

细节二、FreeRDP/libfreerdp/codec/zgfx.c

FreeRDP 是远程桌面协议 (RDP) 越界读取 - CVE-2023-40181

 else  {    /* Unencoded */    zgfx_GetBits(zgfx, 15);    count = zgfx->bits;    zgfx->cBitsRemaining -= zgfx->cBitsCurrent;    zgfx->cBitsCurrent = 0;    zgfx->BitsCurrent = 0;      if (count > sizeof(zgfx->OutputBuffer) - zgfx->OutputCount)      return FALSE;      if (count > zgfx->cBitsRemaining / 8)      return FALSE;      CopyMemory(&(zgfx->OutputBuffer[zgfx->OutputCount]), zgfx->pbInputCurrent,               count);    zgfx_history_buffer_ring_write(zgfx, zgfx->pbInputCurrent, count);    zgfx->pbInputCurrent += count;    zgfx->cBitsRemaining -= (8 * count);    zgfx->OutputCount += count;  } 
在上下文中CopyMemory,可以读取超出传输数据包范围的数据。

 

概念验证

  1. 启动带压缩的 gfx 数据包传输(flags== 0x24)。
  2. 传输以下主体数据:0b10001000 0b00111111 0b11111111.
  3. 在执行zgfx->cBitsRemaining = 8 * (cbSegment - 1) - *zgfx->pbInputEnd;期间,计算8 * (1 - 1) - 0xFF结果出现整数下溢。
  4. 令牌类型为0b10001,距离为0b00000。的值count是0x7e00,导致越界读取。

 

影响

越界读取

 

参考:

  • https://github.com/FreeRDP/FreeRDP/security/advisories/GHSA-mxp4-rx7x-h2g8
  • https://github.com/FreeRDP/FreeRDP/blob/2252d53001d9ce8a452f0a0a5b1f5ed9db6d57f1/libfreerdp/codec/zgfx.c#L256-L261
  • https://github.com/FreeRDP/FreeRDP/blob/2252d53001d9ce8a452f0a0a5b1f5ed9db6d57f1/libfreerdp/codec/zgfx.c#L334-L355

 

原文始发于微信公众号(Ots安全):FreeRDP 是远程桌面协议 (RDP) 越界读取 - CVE-2023-40181

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月1日02:52:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   FreeRDP 是远程桌面协议 (RDP) 越界读取 - CVE-2023-40181https://cn-sec.com/archives/2000109.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息