CVE: CVE-2019-16339

Tested Versions:

  • HCell.exe 9.6.1.7363
  • SDSerialize 9.6.1.9403

Product URL(s): https://www.hancom.com/cs_center/csDownload.do

Hangul Office is published by Hancom, Inc. and is considered one of the more popular Office suites used within South Korea. This vulnerability was discovered within the SDSerialize.dll when opening a specially crafted Office Open XML Workbook (.xlsx). This is part of the Hangul Office Suite.

Vulnerability

0:000> lmvm SDSerialize
start    end        module name
6eca0000 6ed36000   SDSerialize   (export symbols)       C:\Program Files (x86)\Hnc\Office NEO\HOffice96\Bin\SDSerialize.dll
    Loaded symbol image file: C:\Program Files (x86)\Hnc\Office NEO\HOffice96\Bin\SDSerialize.dll
    Image path: C:\Program Files (x86)\Hnc\Office NEO\HOffice96\Bin\SDSerialize.dll
    Image name: SDSerialize.dll
    Timestamp:        Thu Apr 12 17:20:43 2018 (5ACF24EB)
    CheckSum:         0005FF4F
    ImageSize:        00096000
    File version:     9.6.1.9403
    Product version:  9.6.1.9403
    File flags:       0 (Mask 3F)
    File OS:          4 Unknown Win32
    File type:        2.0 Dll
    File date:        00000000.00000000
    Translations:     0409.04b0
    CompanyName:      Hancom Inc.
    ProductName:      Hancom, Inc.  Common Library 9.0
    InternalName:     SDSERIALIZE.DLL
    OriginalFilename: SDSerialize.dll
    ProductVersion:   9, 6, 1, 9403
    FileVersion:      9, 6, 1, 9403
    FileDescription:  Hancom Inc.  SDSerialize 9.0
    LegalCopyright:   Copyright 1989. Hancom Inc. All rights reserved.
    LegalTrademarks:  SDSERIALIZE is a registered trademark of Hancom Inc.

[NOTE]

​ 1. To trigger this corruption, please enable PageHeap and Application Verifier for the Hcell.exe

​ 2. The base address of SDSerialize.dll is 0x6eca0000 in my case.

The following is the Crash context:

(ea8.424): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=6ece7250 ebx=00e4dd24 ecx=6ece587c edx=6a510077 esi=00e4deb8 edi=00056f0c
eip=6ecbf308 esp=00e4dcb4 ebp=00e4dd08 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210202
SDSerialize!CSDObject::IsMaintainObject+0x778:
6ecbf308 668b0f          mov     cx,word ptr [edi]        ds:002b:00056f0c=????
0:000> kb
ChildEBP RetAddr  Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
00e4dd08 6eca1610 00056f0c 0a9bc1c8 0a9bc1c8 SDSerialize!CSDObject::IsMaintainObject+0x778
00e4dd3c 6eca3f85 0a525110 00056f0c 0a9bc1c8 SDSerialize!CSDDefaultHandler::CSDDefaultHandler+0x290
00e4ddbc 6eca3981 6ece1b70 0b60509a 0b605175 SDSerialize!CSDObject::Delete+0x1895
00e4dde4 6eca6b69 0ac106f0 0b605000 0b605175 SDSerialize!CSDObject::Delete+0x1291
00e4de1c 6eca589d 0b605000 0b605175 00000001 SDSerialize!CSDObject::Delete+0x4479
00e4de58 6eca3696 0ac106f0 0b605000 0b605175 SDSerialize!CSDObject::Delete+0x31ad
00e4de7c 6eca24e6 00000001 0a540bf8 0a525618 SDSerialize!CSDObject::Delete+0xfa6
00e4de94 6eca25cb 0b605000 00000175 b6f675d6 SDSerialize!CSDCustomObject::ReadAttribute+0x386
00e4df50 6a507613 0a94d01c 0a525618 0a51d8c0 SDSerialize!CSDCustomObject::ReadAttribute+0x46b
00e4df8c 6a503610 0a94d01c 0a959570 6a518ea8 OOXMLDocument!OOXML::COOXMLPart::Parse+0x143
00e4dfec 6d7f690c 69637374 6e115378 00e4f71c OOXMLDocument!OOXML::PRESENTATION::CUserDefTagsRootPart::GetRootClass+0x10
00e4e23c 6d7e706d 69634ec4 6e115378 0487dbbc HCellApp!CHncAppShield::operator=+0x7dc
00e4e2f4 6d7d269c 0b5f0c08 00e4f71c 0a930ec0 HCellApp!NGLSetSurfaceMetal+0x3396d
00e4e778 6d47343c 0b602f9c 00e4f71c 00e4ead8 HCellApp!NGLSetSurfaceMetal+0x1ef9c
00e4ea00 6d472aa5 0b5f0c08 00e4f71c 00e4ead8 HCellApp!CHclDoc::Load+0x1cc
00e4ed58 6d471f72 0b5f0c08 00e4f71c 00000000 HCellApp!CHclDoc::Load+0x6e5
00e4f40c 6d3c099a 0b5f0c08 00e4f71c 00000000 HCellApp!CHclDoc::OpenDocument+0x3f2
00e4f428 00288880 0b602f9c 00e4f71c 00000000 HCellApp!CHclViewCon::operator IHclViewCon *+0x17a
00e4f934 00281c4e 0a6b3160 00000001 00000000 HCell!LPenHelper+0x30840
00e4f9cc 002aeed7 0a6b3160 00000001 00000000 HCell!LPenHelper+0x29c0e
00e4fc50 002af0cb 00e4fc64 00436d74 00ba2810 HCell!LPenHelper+0x56e97
00e4fc58 00436d74 00ba2810 00e4fcb0 00709cd3 HCell!LPenHelper+0x5708b
00e4fc64 00709cd3 00230000 00000000 05b81e5a HCell!LPenHelper+0x1ded34
00e4fcb0 75fb343d 7efde000 00e4fcfc 77639832 HCell!LPenHelper+0x4b1c93
00e4fcbc 77639832 7efde000 7791d7f0 00000000 kernel32!BaseThreadInitThunk+0x12
00e4fcfc 77639805 00709d51 7efde000 00000000 ntdll!RtlInitializeExceptionChain+0x63
00e4fd14 00000000 00709d51 7efde000 00000000 ntdll!RtlInitializeExceptionChain+0x36
0:000> ub
SDSerialize!CSDObject::IsMaintainObject+0x761:
6ecbf2f1 89467c          mov     dword ptr [esi+7Ch],eax
6ecbf2f4 51              push    ecx
6ecbf2f5 57              push    edi
6ecbf2f6 8bce            mov     ecx,esi
6ecbf2f8 e8530f0000      call    SDSerialize!CSDObject::IsMaintainObject+0x16c0 (6ecc0250)
6ecbf2fd eb04            jmp     SDSerialize!CSDObject::IsMaintainObject+0x773 (6ecbf303)
6ecbf2ff 8b5c2414        mov     ebx,dword ptr [esp+14h]
6ecbf303 b85072ce6e      mov     eax,offset SDSerialize!CSDCustomObject::`vftable'+0x16b4 (6ece7250)

Timeline:

  • 2019-01-09 Vendor disclosure

Vendor Response

The vendor has silently released a fix for the issue some time after reporting.