Switch3301/coruna

GitHub: Switch3301/coruna

对归属于 UNC6691 的国家级 Safari/WebKit 全链漏洞利用套件 Coruna 的完整逆向分析,包含去混淆样本、攻击链技术拆解、IOC 情报及检测工具。

Stars: 3 | Forks: 0

# Coruna:全链 Safari/WebKit 漏洞利用套件 **研究与分析师 [Switch3301](https://github.com/Switch3301)** | [discord.gg/jsreversing](https://discord.gg/jsreversing) | `switch3301` 对归属于 **UNC6691** 的国家级浏览器漏洞利用套件的逆向工程,针对 iOS 和 macOS 上的 **Safari 11 至 17.1+**。通过 JIT 类型混淆、WebAssembly 破坏、PAC 绕过以及内存中 Mach-O 构造,实现零点击原生代码执行。 **截至 2026 年 3 月,已确认 23 个域名仍在活跃提供此套件服务。** ## 这是什么? Coruna 是一个模块化的漏洞利用框架,包含从位于 `b27.icu` 及相关域名的活跃 C2 基础设施中恢复出的 **19 个 JavaScript 模块**(约 600KB)。它将多个漏洞串联起来,从网页访问转变为持久的原生代码执行——无需用户交互。 本仓库包含: - 所有 19 个模块,分为 **混淆**(C2 投递形式)和 **去混淆**(人类可读)两种形式 - 带有代码注释的完整漏洞利用链技术分析 - 涵盖 82+ 个域名、文件哈希、YARA 规则和唯一签名的 IOC - 一个可大规模指纹识别 Coruna 基础设施的异步 Python 扫描器 ## 攻击链 (Kill Chain) ``` Victim visits compromised page (gambling, crypto, news sites) | v +--------------+ | 0.js loader | Parse UA, select exploit for Safari version +--------------+ | +---------------+---------------+---------------+---------------+ | | | | | 16.6+ 16.2-5 15.6-1 15.2-5 11-15.1 KRfmo6 yAerzw jIJ7Om Fq2t1Q YGPUu7 Worker race JIT confuse JIT confuse JIT confuse DFG bounds | | | | | +---------------+---------------+---------------+---------------+ | v JIT type confusion --> OOB array access | v WASM global corruption --> arbitrary read/write | v Scan memory for 0xFEEDFACF --> detect iOS / macOS / arch | +---------+---------+ | | iOS arm64 macOS arm64/x64 | | Segmenter vtable Gadget chain in hijack / instanceof HomeSharing, CoreML, PAC bypass PassKitCore, etc. | | +---------+---------+ | v Build Mach-O binary in JavaScript vm_protect + vm_map --> executable memory Write ~31KB ARM64 shellcode | v pthread_create --> persistent native thread JSEvaluateScript --> JS<->native bridge | v Implant: C2 polling, payload download, data exfil ``` ## 漏洞利用变体 | Safari | iOS (approx) | 模块 | 技术 | |--------|-------------|--------|-----------| | 16.6 - 17.1+ | 16.6 - 17.1+ | `exploit_KRfmo6` | 基于 Worker 的 JIT 竞争,结构 ID 混淆 | | 16.2 - 16.5 | 16.2 - 16.5 | `exploit_yAerzw` | JIT 类型混淆 | | 15.6 - 16.1 | 15.6 - 16.1 | `exploit_jIJ7Om` | JIT 类型混淆 | | 15.2 - 15.5 | 15.2 - 15.5 | `exploit_Fq2t1Q` | JIT 类型混淆 | | 11.0 - 15.1 | 11 - 15.1 | `exploit_YGPUu7` | 通过 INT32_MIN 溢出进行 DFG 边界检查消除 | ## PAC 绕过技术 | 模块 | 平台 | 方法 | |--------|----------|--------| | `ios_uOj89n` | iOS | 破坏 `Intl.Segmenter` vtable 以重定向断点迭代器调用 | | `ios_qeqLdN` | iOS | `instanceof` 类型混淆 + 用于 PAC 指针签名的伪造 Mach-O | | `macos_stage2_eOWEVG` | macOS | 跨 Apple 私有框架的 ARM64 gadget 链 | | `macos_stage2_agTkHY` | macOS | 简化的 gadget 链变体 | Gadget 是针对特定版本从以下组件中搜寻得到的:HomeSharing, PassKitCore, CoreML, AppleMediaServices, SpringBoard, MediaToolbox, CoreGraphics, RESync, IOKit, libxml2, libdyld, libicucore。 ## 后渗透阶段 Shellcode 执行后,植入程序会: - 作为持久原生线程运行 (`pthread_create`) - 从 C2 下载并注入额外的 JS - 通过 HTTP POST 窃取数据 - 通过 16MB 共享内存 + `JSEvaluateScript` 维持 JS <-> 原生桥接 - 操作浏览器历史记录和 DOM 以对抗取证 - 在原生代码中使用 AES-256(密钥从 JS 层嵌入到 shellcode 中) ## 基础设施 该套件被发现部署在 **82+ 个域名** 上,主要是博彩和加密货币主题的网站。扫描器确认截至 2026 年 3 月,**23 个域名仍在活跃提供完整的漏洞利用套件**。 | 属性 | 值 | |----------|-------| | 主 C2 | `b27.icu` (及其他 22+ 个) | | CDN | AWS CloudFront | | 源站 | nginx/1.18.0 (Ubuntu) | | 伪装站点 | 博彩 (7P.GAME), 空投, 应用商店 | | 模块投递 | `SHA256(session_key + module_hash).slice(0,40) + ".js"` | | 落地页 | `/group.html`, `/static/analytics.html`, `/tuiliu/group.html`, 等 | | 归属 | UNC6691 (投递), UNC6353 (相关), PLASMAGRID (C2 基础设施) | ## 混淆 对于国家级工具来说,混淆强度出奇地弱: - 使用单字节密钥的 XOR 字符编码数组 (`[n,...].map(x => String.fromCharCode(x ^ KEY))`) - Base64 包装的 `new Function()` 评估 - 用于嵌入二进制文件的 LZW 压缩 - 名称最小化 没有控制流平坦化,没有虚拟机保护,没有防篡改。只需一次 Babel AST 遍历即可处理所有这些。 ## 与 Operation Triangulation 的相似之处 该架构与 [Operation Triangulation](https://securelist.com/operation-triangulation/109842/) (Kaspersky, 2023) 高度匹配: - JIT 操作列表破坏 (`_ZN3JSC16jitOperationListE`) - 相同的 gadget 目标框架 - 在 JavaScript 中构造 Mach-O 二进制文件 - JS 与原生代码之间的共享内存 IPC - 用于可执行内存的 `vm_protect`/`vm_map`/`mach_make_memory_entry` 相关 CVE:CVE-2023-41990, CVE-2023-32434, CVE-2023-32435, CVE-2023-38606 ## 加密 一个 32 字节的密钥从 JS 编排器传递到 ARM64 shellcode 载荷中: ``` ce0a80a99b00d7ab74a90fa265a62755c25f78a3cd5ee7d9779d829bcd8c1895 ``` 编译后的 ARM64 shellcode 中存在 AES-256 引用——该密钥用于解密代码执行后下载的最终原生植入程序。尽管一些研究报告中声称存在,但在该套件的任何地方 **均未发现 ChaCha20**。 ## 检测 ### 扫描器 异步 Python 扫描器,通过检查 17 个已知模块 URL + 12 个落地页路径来探测 Coruna 基础设施的域名: ``` python3 detection/scanner.py b27.icu 7p.game h4k.icu python3 detection/scanner.py --file detection/domains.txt python3 detection/scanner.py --file detection/domains.txt --json ``` ### YARA 规则 `detection/coruna.yar` 中的 9 条规则涵盖: - 框架加载器命名空间 (`vKTo89`, `OLdwIx`) - 模块 SHA1 哈希标识符 - JIT 漏洞利用模式 (INT32_MIN, WASM exports) - 植入程序全局变量 (`JqZniF`, `qbrdr`) - XOR 混淆模式 - PAC 绕过签名 - Shellcode 构建器指标 ## 仓库结构 ``` coruna-analysis/ ├── README.md ├── analysis/ │ ├── ANALYSIS.js # Annotated exploit chain walkthrough │ └── IOCs.md # 82+ domains, hashes, keys, signatures ├── detection/ │ ├── coruna.yar # 9 YARA detection rules │ ├── scanner.py # Async mass domain scanner │ └── domains.txt # Known delivery + C2 domains └── samples/ ├── obfuscated/ # 16 original modules from C2 └── deobfuscated/ ├── core/ # orchestrator, framework, utils, config ├── exploits/ # 5 JIT variants + Mach-O helper ├── stages/ # PAC bypass (iOS + macOS) + dyld parser └── payloads/ # Final stage with ARM64 shellcode ``` ## 免责声明 发布仅用于**安全研究和防御目的**。所有漏洞利用均针对 Apple 已修补的漏洞。提供样本用于威胁情报、检测工程和学术研究。
标签:0day挖掘, APT攻击, C2基础设施, CISA项目, DAST, DNS信息、DNS暴力破解, DNS 反向解析, exploit kit, IOC, iOS安全, IP 地址批量处理, JIT混淆, Mach-O, macOS安全, PAC绕过, Python扫描器, Safari, UNC6691, WebAssembly, WebKit, YARA规则, 云资产清单, 内核安全, 反混淆, 域名收集, 威胁情报, 开发者工具, 恶意软件分析, 数据可视化, 漏洞分析, 漏洞利用链, 自定义脚本, 自定义脚本, 路径探测, 逆向工具, 逆向工程, 零点击漏洞