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规则, 云资产清单, 内核安全, 反混淆, 域名收集, 威胁情报, 开发者工具, 恶意软件分析, 数据可视化, 漏洞分析, 漏洞利用链, 自定义脚本, 自定义脚本, 路径探测, 逆向工具, 逆向工程, 零点击漏洞