iwallplace/CVE-2026-26897-EcoOnline-DeepLink

GitHub: iwallplace/CVE-2026-26897-EcoOnline-DeepLink

针对EcoOnline EHS Android应用深度链接验证绕过漏洞的公开披露和PoC。

Stars: 0 | Forks: 0

# EcoOnline EHS (Android) — 深度链接验证绕过 → WebView 开放重定向 (CVE-2026-26897) **CVE-2026-26897** 的公开披露/咨询,这是一个 EcoOnline EHS Android 应用 (`com.airsweb.v10`) 中的深度链接验证绕过。一个精心制作的 `ehs-app://` 深度链接被重写为 `https://` 并直接加载到应用的主 WebView 中,**没有进行应用在所有其他导航路径上应用的宿主允许列表检查**,允许远程攻击者在受信任的应用程序内渲染任意攻击者控制的内容(钓鱼)。 负责任地披露,厂商已确认,并在版本 0.2.500 中修复。 ## ✅ 状态:已修复 - **受影响版本分析:** `com.airsweb.v10` **0.2.499** (versionCode `44631`) - **修复版本:** **0.2.500** (已在 Google Play 上发布) - **用户行动:** 将 EcoOnline EHS 应用更新到最新版本。 ## 受影响二进制文件(用于验证) 厂商的应用是专有的,**不在此存储库中重新分发**。以下静态分析是在此处识别的构建上进行的 — 从存档(例如 APKPure 版本历史)中获取确切的 APK 并在重现之前验证其哈希值: | | | |---|---| | 包名 | `com.airsweb.v10` | | versionName / versionCode | `0.2.499` / `44631` | | SHA-256 | `e9e8a38d133cb9da9901caf03c4a7a033c75ad1f32ba0539260e47d5dd5068c0` | | 来源 | APKPure — "EcoOnline EHS" 版本历史 | ## 摘要 | 字段 | 值 | |---|---| | **CVE ID** | CVE-2026-26897 | | **厂商** | EcoOnline ("EcoOnline Global") — https://www.ecoonline.com/ | | **产品** | EcoOnline EHS for Android (`com.airsweb.v10`) | | **受影响版本** | 0.2.499 (versionCode 44631) | | **修复版本** | 0.2.500 | | **漏洞类型** | 自定义 URL 方案处理程序中的不正确验证(深度链接绕过)→ 未经验证的 WebView 加载/开放重定向 | | **CWE** | CWE-939(自定义 URL 方案处理程序中的不正确授权);相关 CWE-749 | | **受影响组件** | `com.airsweb.v10.MainActivity`(导出的深度链接处理程序)和 `MainActivityKt.WebViewPage` 中的深度链接分支 | | **自定义方案** | `ehs-app://` | | **攻击类型** | 远程(需要用户交互 — 打开精心制作的链接) | | **影响** | 钓鱼/社会工程学:在受信任的 EcoOnline EHS 应用程序内渲染任意攻击者控制的网络内容(例如,一个假的登录),绕过应用程序的域名允许列表 | | **发现者** | Ahmet Mersin | ## 描述 EcoOnline EHS for Android 是围绕 EHS 网络平台的 Jetpack-Compose **WebView 包装器**。其默认内容从以下位置加载: ``` startUrl = "https://ehsmobilelanding.ecoonline.net/" ``` 该应用导出一个 Activity (`MainActivity`),既是启动器也是自定义 URL 方案 **`ehs-app`** 的处理程序。深度链接 `intent-filter` 的 `` 元素仅声明 **一个方案** — 没有主机和路径 — 因此任何 `ehs-app://…` URI 都会被路由到该应用。 为了保护 WebView 导航,该应用实现了一个主机允许列表 (`isInternalHost`) 并在恢复最后访问的 URL 时应用它。**然而,深度链接处理分支根本不调用该允许列表**。它获取传入的深度链接 URI,执行方案 `ehs-app:` → `https:` 的天真字符串替换,并在结果上调用 `WebView.loadUrl()`。因此,远程攻击者可以制作一个深度链接,导致受信任的应用程序加载任意的 `https://` 原始内容。 ## 受影响组件 ### `AndroidManifest.xml` (v0.2.499) — 导出,仅方案深度链接 ``` ``` ### 根本原因 — `MainActivityKt.WebViewPage` 中的深度链接分支(反编译,v0.2.499) ``` // intent delivered to the exported MainActivity if (intent.getScheme().equals("ehs-app")) { WebView webView = ...; if (webView != null) { Uri data = intent.getData(); // full ehs-app://… URI String s = String.valueOf(data); // naïve scheme rewrite: "ehs-app:" -> "https:" String url = StringsKt.replaceFirst(s, "ehs-app:", "https:", false, 4, null); webView.loadUrl(url); // <-- NO isInternalHost() CHECK } } ``` 此路径**未能应用**的允许列表(在文件中的其他地方使用): ``` private static final Regex internalDomains = new Regex("^[-\\w]*\\.(airsweb)|(ecoonline)\\.net"); private static final List excludeDomainsStartingWith = listOf("passport", "login", "auth"); public static boolean isInternalHost(String host) { for (String p : excludeDomainsStartingWith) if (host.startsWith(p)) return false; return internalDomains.containsMatchIn(host); } ``` ## 演示 在 **2026-01-13** 对 `com.airsweb.v10` 0.2.499 进行了屏幕录制 PoC。 1. 在 Android 设备上安装受影响的版本(**0.2.499**)。 2. 将精心制作的深度链接发送给受害者(例如,通过电子邮件、短信、聊天、QR 码或网页): ehs-app://attacker.example/login 3. 当受害者打开它时,`MainActivity` 重写方案,WebView 加载: https://attacker.example/login 在受信任的 EcoOnline EHS 应用程序内 — 不执行允许列表检查。 4. 攻击者页面以合法应用的样式和外观呈现,并可以例如,提供一个假的 EHS 登录以收集凭证。 在 `[poc/redirect-proof.html](poc/redirect-proof.html)`(用法:`[poc/README.md](poc/README.md)`)中包含了一个**无害、不收集**的重定向演示。它证明了在受信任的应用程序内加载了任意原始内容,没有任何输入、没有凭证捕获和没有网络请求。 ## 影响 - 在受信任的应用程序上下文中加载任意攻击者控制的 `https://` 内容。 - 通过看似来自真实应用的登录提示进行钓鱼/凭证盗窃。 - UI 欺骗和一般的社会工程学提升(恶意页面继承了应用的信任)。 **CVSS v3.1(研究人员估计 — 在发布前完成):** `AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N` → **6.3(中等)**(可以提出一个 Scope:Changed 论点,因为不受信任的内容在受信任的应用程序上下文中执行)。 ## 补救措施 更新到 **`com.airsweb.v10` 0.2.500** 或更高版本。建议的修复措施: - 在 `loadUrl()` 之前应用 `isInternalHost()`(或等效的允许列表)到深度链接 URL。 - 不要盲目重写加载的 URL 的方案;验证方案**和**主机。 - 使用显式的 `android:host`/`android:pathPrefix` 限制深度链接 `intent-filter`。 - 加强 `internalDomains` 正则表达式(锚定主机完全;避免子字符串匹配)。 ## 披露时间线 | 日期 | 事件 | |---|---| | 2026-01-13 | 针对 0.2.499 记录 PoC | | 2026-01-15 | 向 MITRE 提交 CVE 请求(票据 scr1979357) | | 2026-02-27 | MITRE 分配 **CVE-2026-26897** | | 发布之前 | 厂商确认;在 0.2.500 中发布修复 | | 2026-03-04 | 向 MITRE 发送发布请求 | | 2026-05-06 | MITRE 请求完整的公开披露 URL | | 2026-06-03 | 公开咨询发布(此存储库) | ## 参考 - CVE-2026-26897(MITRE CVE 记录) - EcoOnline EHS 在 Google Play 上 — https://play.google.com/store/apps/details?id=com.airsweb.v10 - 厂商 — https://www.ecoonline.com/ ## 致谢 由 **Ahmet Mersin** 发现并报告 — GitHub [@iwallplace](https://github.com/iwallplace),HackerOne `iwallplace`。
标签:Android应用安全, APK分析, CVE-2026-26897, CWE-749, CWE-939, EcoOnline EHS, JS文件枚举, PoC, SHA-256, URL重定向, WebView安全, 云安全监控, 后端开发, 威胁模拟, 安全修复, 安全公告, 安全漏洞, 暴力破解, 深度链接绕过, 漏洞披露, 版本更新, 自定义URL方案, 远程攻击, 静态分析