Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-62821 — Microsoft HEIF एक्सटेंशन (msheif_store.dll) OOB-read | Kitploit
उपकरण/GitHubGitHub/hyunjungg/cve-2025-62821
मेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणरिवर्स इंजीनियरिंगफज़िंगबाइनरी विश्लेषण
GitHubhyunjungg/cve-2025-62821

CVE-2025-62821

Microsoft HEIF एक्सटेंशन (msheif_store.dll) OOB-read

रिपॉजिटरी देखें
511 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Microsoft HEIF Image Extensions (msheif_store.dll): CopyPixels पथ में स्रोत-बफ़र का कम-आवंटन आउट-ऑफ़-बाउंड रीड और Access Violation (DoS) का कारण बनता है

जब WIC के माध्यम से किसी निर्मित (crafted) HEIF छवि को डीकोड किया जाता है, तो msheif कोडेक 1-बाइट स्रोत बफ़र आवंटित करता है, लेकिन बाद में CopyPixels के दौरान उस बफ़र से बहुत बड़ी मात्रा में पिक्सेल डेटा कॉपी करने का प्रयास करता है। कॉपी, स्रोत बफ़र की वास्तविक लंबाई को सत्यापित किए बिना, stride × ROI ऊँचाई से प्राप्त आकार के साथ memmove का उपयोग करती है। इससे आउट-ऑफ़-बाउंड रीड और तुरंत Access Violation (क्रैश) उत्पन्न होता है। व्यवहार में, दुर्भावनापूर्ण HEIF को खोलने या पूर्वावलोकन करने से किसी भी WIC उपभोक्ता में सेवा-अस्वीकृति (denial of service) उत्पन्न होती है जो HEIF Image Extensions के माध्यम से रूट होता है।

नामकरण नोट: roi_height जैसे चर नाम पठनीयता के लिए डिसअसेंबली से अनुमानित किए गए हैं और विक्रेता के प्रतीक नामों को प्रतिबिंबित नहीं करते हैं।

उत्पादMicrosoft HEIF Image Extensions
मॉड्यूलmsheif_store.dll
OSWindows 11
एक्सटेंशन संस्करण1.2.22.0 (Microsoft.HEIFImageExtension_1.2.22.0_x64__8wekyb3d8bbwe\x64\msheif_store.dll)
  1. मूल कारण विश्लेषण

    a. भेद्यता का विस्तृत विवरण

    • डिकोडिंग पाइपलाइन छवि ज्यामिति के आधार पर memmove के लिए एक बड़ी कॉपी लंबाई की गणना करती है (उदा., copy_size = stride * abs(roi_height))।
    • वह स्रोत बफ़र जिसमें डीकोड किया गया फ्रेम/आइटम डेटा होना चाहिए, 1 बाइट तक कम-आवंटित किया गया है, क्योंकि:
      • CHEIFStreamReader_ReadItemData आइटम की डेटा लंबाई की गणना करने के लिए CHEIFItemInfoEntry_GetDataSize को कॉल करता है।
      • एक विशेष विफलता शाखा पर, CHEIFItemInfoEntry_GetDataSize सफलता लौटाता है लेकिन परिकलित आकार को 0 पर छोड़ देता है।
      • CHEIFStreamReader_ReadItemData तब MFCreateMemoryBuffer(0, &ppBuffer) को कॉल करता है। MF व्यवहार के अनुसार, यह न्यूनतम 1 बाइट आवंटन वाला बफ़र उत्पन्न करता है।
    • आगे (Downstream), CopyPixels गंतव्य बफ़र आकार को सत्यापित करता है, लेकिन memmove को कॉल करने से पहले स्रोत बफ़र की लंबाई को अनुरोधित कॉपी आकार के विरुद्ध सत्यापित नहीं करता है।
    • परिणाम: memmove(dst, src, large_size) 1-बाइट src से बहुत आगे पढ़ता है, और वेक्टराइज़्ड लोड पर दोष उत्पन्न करता है।

    यह बग स्वतंत्र रूप से और बढ़ जाता है यदि छवि/ROI चौड़ाई गलत पार्स की जाती है (उदा., 0x01000100 = 16,777,472), जिससे stride और अंतिम कॉपी आकार बढ़ जाता है। हालाँकि, मुख्य भेद्यता यह है कि स्रोत की लंबाई की परिकलित कॉपी लंबाई के विरुद्ध जाँच नहीं की जाती है।

root@kitploit:~
(7de0.78e4): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
msheif_store!DllCanUnloadNow+0x228b1d:
00007ffd`841bc45d c5fe6f02        vmovdqu ymm0,ymmword ptr [rdx] ds:000002b0`65be6ff0=c0

0:000> !heap -p -a rdx
    address 000002b065be6ff0 found in
    _DPH_HEAP_ROOT @ 2b05bed1000
    in busy allocation (  DPH_HEAP_BLOCK:         UserAddr         UserSize -         VirtAddr         VirtSize)
                             2b062c2f2d8:      2b065be6ff0                1 -      2b065be6000             2000
    ...
    00007ffe75b90563 MFPlat!operator new+0x0000000000000023
    00007ffe75b83d36 MFPlat!MFCreateMemoryBuffer+0x0000000000000056
    00007ffd840157b1 msheif_store!DllCanUnloadNow+0x0000000000081e71
		...

0:000> r r8
r8=0000000001000100

b. इनपुट से कोड प्रवाह

root@kitploit:~
0:000> k
 # Child-SP          RetAddr               Call Site
00 0000005d`6a9aed98 00007ffe`6fdefcc2     msheif_store!DllCanUnloadNow+0x228b21
01 0000005d`6a9aeda0 00007ffe`6fcb3adc     msheif_store!DllCanUnloadNow+0x18c382
02 0000005d`6a9aee00 00007ffe`6fcb4513     msheif_store!DllCanUnloadNow+0x5019c
03 0000005d`6a9aeef0 00007ffe`6fcb96da     msheif_store!DllCanUnloadNow+0x50bd3
04 0000005d`6a9af0a0 00007fff`318551d5     msheif_store!DllCanUnloadNow+0x55d9a
05 0000005d`6a9af1a0 00007fff`318082eb     windowscodecs!CPyramidBase::CopyPixels+0xf5
06 0000005d`6a9af260 00007fff`31857e52     windowscodecs!CFormatConverter::CopyPixels+0x22b
07 0000005d`6a9af3e0 00007ff6`15fb0f5d     windowscodecs!CFormatConverterResolver::CopyPixels+0xc2
08 0000005d`6a9af480 00007ff6`15fb04ab     heif_decoder!HEIF_LoadBitmapFromMemory+0x34d [C:\\Users\\test\\source\\repos\\heif_decoder\\heif_decoder\\heif_decoder.cpp @ 256]
09 0000005d`6a9af670 00007ff6`15fb1754     heif_decoder!HEIF_FuzzMemory+0x9b [C:\\Users\\test\\source\\repos\\heif_decoder\\heif_decoder\\heif_decoder.cpp @ 357]
0a 0000005d`6a9af830 00007ff6`15fb3039     heif_decoder!wmain+0x394 [C:\\Users\\test\\source\\repos\\heif_decoder\\heif_decoder\\heif_decoder.cpp @ 524]
0b 0000005d`6a9afaa0 00007ff6`15fb2ee2     heif_decoder!invoke_main+0x39 [D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_common.inl @ 91]
0c 0000005d`6a9afaf0 00007ff6`15fb2d9e     heif_decoder!__scrt_common_main_seh+0x132 [D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_common.inl @ 288]
0d 0000005d`6a9afb60 00007ff6`15fb30ce     heif_decoder!__scrt_common_main+0xe [D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_common.inl @ 331]
0e 0000005d`6a9afb90 00007fff`3847e8d7     heif_decoder!wmainCRTStartup+0xe [D:\\a\\_work\\1\\s\\src\\vctools\\crt\\vcstartup\\src\\startup\\exe_wmain.cpp @ 17]
0f 0000005d`6a9afbc0 00007fff`3939c34c     KERNEL32!BaseThreadInitThunk+0x17
10 0000005d`6a9afbf0 00000000`00000000     ntdll!RtlUserThreadStart+0x2c

हल किए गए आंतरिक कॉल (स्पष्टता के लिए नाम बदले गए):

root@kitploit:~
CWICheifDecoderFrame::CopyPixels
 → CWICheifBitmapSourceBase::CopyPixels_Transform
   → CWICheifBitmapSourceBase::CopyPixels_Base
     → sub_7FFD8411FC40  // issues memmove
       → memmove         // AV (vmovdqu load from src)

c. बफ़र आकार

  • निर्मित (crafted) HEIF जो CHEIFItemInfoEntry_GetDataSize को समय से पहले “आकार 0 के साथ सफलता” पथ पर ले जाता है (उदा., जब sub_7FFD8408B898 विफल हो जाता है और फ़ंक्शन sizeBuffer = 0 के साथ सफलता लौटाता है)।

  • स्रोत बफ़र: MFCreateMemoryBuffer(0) के माध्यम से आवंटित ⇒ 1 बाइट।

  • कॉपी आकार: copy_size = stride * abs(roi_height) के रूप में प्राप्त। गलत पार्स की गई चौड़ाई (उदा., 0x01000100) और सामान्य BPP के साथ, stride बहुत बड़ा होता है, जिससे बहुत बड़ा copy_size उत्पन्न होता है।

  • भेद्य कॉल:

    root@kitploit:~
    __int64 sub_7FFD8411FC40(__m128i* dst, __int64 a2, __m128i* src, int a4,
                             unsigned int stride, unsigned int abs_roi_height)
    {
      if (src && dst) {
        if (stride == a2 && stride == a4) {
          // No validation that 'src' contains at least (stride * abs_roi_height) bytes
          memmove(dst, src, (size_t)abs_roi_height * stride); // AV here
        }
      }
    }
    
  • स्रोत 1 बाइट क्यों है (आवंटन पथ):

    root@kitploit:~
    __int64 __fastcall CHEIFStreamReader_ReadItemData(__int64 *a1, __int64 *a2, IMFMediaBuffer **a3)
    {
      ppBuffer = 0i64;
      if ( v7(a2) )
      {
        *cbMaxLength = 0i64;
        result = (*(*a2 + 0xA0))(a2, cbMaxLength); // CHEIFItemInfoEntry_GetDataSize
        if ( result < 0 )
        {
          goto LABEL_10;
        }
        if ( *cbMaxLength > 0xC800000ui64 )
        {
          result = 0xC00D36BE;
          goto LABEL_23;
        }
        // cbMaxLength may still be 0 if GetDataSize returned success early
        result = MFCreateMemoryBuffer(cbMaxLength[0], &ppBuffer);
        if ( result < 0 )
        {
          goto LABEL_34;
        }
        ...
    }
    
    root@kitploit:~
    __int64 __fastcall CHEIFItemInfoEntry_GetDataSize(__int64 a1, unsigned __int64 *sizeBuffer)
    {
    
      if ( sizeBuffer )
      {
        *sizeBuffer = 0i64;
        DataLocationInfo = (*(*v5 + 0x78i64))(v5, 0x6D657461i64, &v32);
        if ( DataLocationInfo >= 0 )
        {
          v13 = v32;
          v14 = *(v32 + 0xF0);
          if ( v14 )
          {
            if ( !sub_7FFD8408B898((v14 + 0xC8), (a1 - 0x78), &v33, v31) )
            {
            // returns success (0/S_OK) without updating sizeBuffer
    	      // caller treats this as length=0 → MFCreateMemoryBuffer(0)
    	          DataLocationInfo = 0;
    	          goto LABEL_62;
    	        }
            v17 = v33;
            DataLocationInfo = CHEIFItemInfoEntry_GetDataLocationInfo(v5, v13, *(v33 + 16), &v29, &v30);
            if ( DataLocationInfo >= 0 )
            {
              for ( i = 0; ; ++i )
              {
                if ( i >= *v17 )
                {
                  *sizeBuffer = v6;
                  goto LABEL_62;
                }
                v21 = *(*(v17 + 8) + 24i64 * i + 16);
                }
                if ( v21 + v6 < v6 )
                  break;
                v6 += v21;
                DataLocationInfo = 0;
              }
    
             ...
             ...
    LABEL_62:
      sub_7FFD83F91AEC();
      return DataLocationInfo;
    }
    

d. सुझाए गए सुधार

CopyPixels पथ में, सत्यापित करें कि स्रोत बफ़र में कम से कम stride * abs(roi_height) बाइट हों (और यह कि src_stride/src_height अनुरोधित क्षेत्र को पूरा करते हों या उससे अधिक हों)। यदि नहीं, तो WINCODEC_ERR_INSUFFICIENTBUFFER (या समतुल्य) के साथ विफल करें।

e. विश्लेषण पद्धति (प्रतीक पुनर्निर्माण)

कॉल प्रवाह को समीक्षा योग्य बनाने के लिए, हमने कोडेक के स्वयं के लॉगिंग स्ट्रिंग्स से IDA में आंतरिक फ़ंक्शन नामों का पुनर्निर्माण किया।

  • लक्ष्य: प्रमुख रूटीन (…CopyPixels_Base, …CopyPixels_Transform, CHEIFStreamReader::ReadItemData, आदि) के लिए मानव-पठनीय फ़ंक्शन नामों की पहचान करना, ताकि क्रैश स्टैक को डीकंपाइल किए गए कोड के साथ संरेखित किया जा सके।

  • प्रक्रिया:

    1. लॉगिंग सहायक खोजें: क्रैश के आसपास के कॉलर्स के डीकंपाइलर दृश्य में, एक छोटा सहायक खोजें जिसे एक

      स्थिर स्ट्रिंग

      तर्क के साथ आमंत्रित किया जाता है जो फ़ंक्शन नाम जैसा दिखता है (उदा., "CWICheifBitmapSourceBase::CopyPixels_Base")।

      • IDA में: क्रैश पर स्थित फ़ंक्शन खोलें, एक फ्रेम ऊपर जाएँ, और फ़ंक्शन प्रवेश पर स्ट्रिंग लिटरल लेने वाले सहायक के लिए कॉल्स का निरीक्षण करें।
    2. कॉलर्स एकत्र करें: सभी कॉलर फ़ंक्शनों को सूचीबद्ध करने के लिए उस सहायक के xrefs का उपयोग करें।

    3. नाम निकालें: प्रत्येक कॉलर के लिए, डीकंपाइल किया गया दृश्य खोलें और सहायक का दूसरा तर्क (स्ट्रिंग लिटरल) पढ़ें। यह स्ट्रिंग लगातार इच्छित फ़ंक्शन नाम रखती है।

    4. कॉलर्स का नाम बदलें: प्रत्येक कॉलर में, N दबाएँ (Edit → Rename) और फ़ंक्शन नाम को पुनर्प्राप्त स्ट्रिंग पर सेट करें (उदा., CWICheifBitmapSourceBase::CopyPixels_Base)।

    5. आस-पास के फ्रेमों के लिए दोहराएँ जब तक कि पूरी क्रैश श्रृंखला के सार्थक नाम न हों।

सत्यापन: नाम बदलने के बाद, कॉल साइटों के माध्यम से पुनः चलाएँ और पुष्टि करें कि तर्क प्रकार/व्यवहार लेबलों से मेल खाते हैं (उदा., …CopyPixels_Base वह स्थान है जहाँ stride/ROI गणना और अंतिम memmove कॉल होते हैं)।

  1. प्रूफ-ऑफ-कॉन्सेप्ट

  • पूर्वापेक्षाएँ : HEIF Image Extensions Microsoft Store से स्थापित/सक्षम हो (HEIC/HEIF डीकोडिंग के लिए आवश्यक)।

  • पुनरुत्पादन के चरण

    1. संलग्न PoC फ़ाइल (../access_violation_0000xxxxxxxxx461_00000xxxxxxxx6B0_1.heif) को डाउनलोड करें और किसी स्थानीय फ़ोल्डर में सहेजें।

    2. सुनिश्चित करें कि HEIF Image Extensions स्थापित है (Microsoft Store खोलें → “HEIF Image Extensions” खोजें → Install)।

    3. PoC फ़ाइल को Microsoft Photos के साथ खोलें (यदि Photos डिफ़ॉल्ट है तो फ़ाइल पर डबल-क्लिक करें, या Right-click → Open with → Photos)।

  • सॉफ़्टवेयर डाउनलोड लिंक

    HEIF Image Extensions (Microsoft Store) https://apps.microsoft.com/detail/9pmmsr1cgpwg?hl=en-US&gl=US

टूल डाउनलोड करें