The Isolated Heap
While working on some IE 11 related UAF vulnerabilities, I noticed that there were significant changes in the new IDB.
The initialization function of MSHTML now has some additional code:
push    0               ; dwMaximumSize
push    0               ; dwInitialSize
push    0               ; flOptions
call    ds:__imp__HeapCreate@12 ; HeapCreate(x,x,x)
mov     _g_hIsolatedHeap, eax
test    eax, eax
jnz     short loc_63C94EC5
xor     esi, esi
jmp     loc_6358112F
A new heap is created and stored in a globally accessible way in _g_hIsolatedHeap.
A low fragmentation heap is then created with the new heap:
mov     ecx, eax
call    HeapSetInformation_LowFragmentation_Downlevel
jmp     loc_63A246BA
Object Allocation
Allocations are currently done from two functions:
- _MemIsolatedAlloc
- _MemIsolatedAllocClear
_MemIsolatedAllocClear
This simple wrapper around HeapAlloc will allocate a heap block with the memory zero'd out:
LPVOID _MemIsolatedAllocClear(SIZE_T dwBytes)
{
    //HEAP_ZERO_MEMORY
    return HeapAlloc(g_hIsolatedHeap, 0x8, dwBytes);
}
_MemIsolatedAlloc
LPVOID _MemIsolatedAlloc(SIZE_T dwBytes)
{
    //
    return HeapAlloc(g_hIsolatedHeap, 0, dwBytes);
}
Object Freeing
Every time an object that was created in this heap is freed, it is now first memset to zero and then freed. Here is an example of an object of size 0x34 being freed:
push    34h             ; Size
push    0               ; Val
push    esi             ; Dst
call    _memset
...
push    esi             ; lpMem
push    0               ; dwFlags
push    _g_hIsolatedHeap ; hHeap
call    _HeapFree@12    ; HeapFree(x,x,x)
Appendix
Based on a cursory look, here are a few objects allocated on the Isolated Heap:
| Object | Size | 
|---|---|
| CBodyElement | 40h | 
| CHeadElement | 34h | 
| CSelectElement | 0E4h | 
| COptionElement | 4Ch | 
| CNoShowElement | 38h | 
| CObjectElement | 170h | 
| CParamElement | 3Ch | 
| CPluginSite | 198h | 
| CMapElement | 3Ch | 
| CAreaElement | 64h | 
| CMetaElement | 34h | 
| CParaElement | 34h | 
| CDivElement | 34h | 
| CDocumentType | 34h | 
| CTitleElement | 40h | 
| CHeaderElement | 38h | 
| CStyleElement | 5Ch | 
| CCommentElement | 44h | 
| CLinkElement | 68h | 
| CImgElement | 5Ch | 
| CLabelElement | 48h | 
| COListElement | 38h | 
| CHtmlElement | 34h | 
| CBRElement | 34h | 
| CScriptElement | 0C4h | 
| CFormElement | 70h | 
| CFontElement | 34h | 
| CAnchorElement | 64h | 
| CInput | 0C0h | 
| CSpanElement | 34h | 
| CPhraseElement | 34h | 
| CLIElement | 3Ch | 
| CProgressElement | 5Ch | 
| CSemanticElement | 34h | 
| CBaseElement | 3Ch | 
| CBlockElement | 34h | 
| CTable | 58h | 
| CTableSection | 4Ch | 
| CTableCell | 48h | 
| CTableRow | 54h | 
| CUListElement | 38h | 
| CHRElement | 3Ch | 
| CButton | 58h | 
| CDListElement | 38h | 
| CDTElement | 34h | 
| CDDElement | 34h | 
| CIFrameElement | 68h | 
| CHTMLCanvasElement | 0ACh | 
| CGenericElement | 50h | 
| CTextArea | 74h | 
| CSVGFilterElement | 50h | 
| CSVGDefsElement | 4Ch | 
| CSVGFEColorMatrixElement | 50h | 
| CSVGSVGElement | 70h | 
| CTitleElement | 40h | 
| CUnknownElement | 3Ch | 
| CAudioElement | 0F8h | 
| CLegendElement | 3Ch | 
| CFieldSetElement | 40h | 
| CTableCaption | 4Ch | 
| CTableCol | 3Ch | 
| CVideoElement | 190h | 
| CSVGGElement | 4Ch | 
| CSVGPathElement | 70h | 
| CSVGScriptElement | 0D8h | 
| CSVGPolygonElement | 70h | 
| CSVGRectElement | 50h | 
| CSVGEllipseElement | 50h | 
| CSVGPolylineElement | 70h | 
| CSVGTextElement | 4Ch | 
| CIsIndexElement | 34h | 
| CNextIdElement | 34h | 
| CMarquee | 74h | 
| CWndSelectElement | 118h | 
| CWndOptionElement | 40h | 
| CTextElement | 34h | 
| CFrameElement | 5Ch | 
| CSVGElement | 4Ch | 
| CSVGTitleElement | 54h | 
| CSVGAElement | 60h | 
| CSVGCircleElement | 50h | 
| CSVGClipPathElement | 98h | 
| CSVGDescElement | 4Ch | 
| CSVGFEBlendElement | 50h | 
| CSVGFEComponentTransferElement | 50h | 
| CSVGFECompositeElement | 50h | 
| CSVGFEConvolveMatrixElement | 50h | 
| CSVGFEDiffuseLightingElement | 50h | 
| CSVGFEDisplacementMapElement | 50h | 
| CSVGFEDistantLightElement | 4Ch | 
| CSVGFEFloodElement | 50h | 
| CSVGFEFuncAElement | 4Ch | 
| CSVGFEFuncBElement | 4Ch | 
| CSVGFEFuncGElement | 4Ch | 
| CSVGFEFuncRElement | 4Ch | 
| CSVGFEGaussianBlurElement | 50h | 
| CSVGFEImageElement | 70h | 
| CSVGFEMergeElement | 4Ch | 
| CSVGFEMergeNodeElement | 4Ch | 
| CSVGFEMorphologyElement | 50h | 
| CSVGFEOffsetElement | 58h | 
| CSVGFEPointLightElement | 4Ch | 
| CSVGFESpecularLightingElement | 50h | 
| CSVGFESpotLightElement | 4Ch | 
| CSVGFETileElement | 50h | 
| CSVGFETurbulenceElement | 70h | 
| CSVGImageElement | 50h | 
| CSVGLineElement | 74h | 
| CSVGLinearGradientElement | 0E8h | 
| CSVGMarkerElement | 4Ch | 
| CSVGMaskElement | 0C0h | 
| CSVGMetadataElement | 4Ch | 
| CSVGPatternElement | 0B0h | 
| CSVGRadialGradientElement | 0FCh | 
| CSVGStopElement | 4Ch | 
| CSVGStyleElement | 74h | 
| CSVGSwitchElement | 54h | 
| CSVGSymbolElement | 4Ch | 
| CSVGTextPathElement | 60h | 
| CSVGTSpanElement | 4Ch | 
| CSVGUseElement | 60h | 
| CSVGViewElement | 4Ch | 
| CMSHTMLWebViewElement | 58h | 
| CSourceElement | 34h | 
| CTrackElement | 44h | 
| CProcessingInstruction | 70h | 
| CBaseFontElement | 34h | 
| CBGsound | 40h | 
| CDataListElement | 3Ch | 
| CFrameSetSite | 78h | 
| CFrameSetSite | 3Ch | 
There are more objects that are created on the Isolated Heap, but not listed here