Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-26897-EcoOnline-DeepLink — Advertencia pública y PoC para CVE-2026-26897 — Omisión de enlace profundo en EcoOnline EHS Android (com.airsweb.v10), corregido en 0.2.500 | Kitploit
Herramientas/GitHubGitHub/iwallplace/cve-2026-26897-ecoonline-deeplink
Seguridad AndroidAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPhishingPruebas de PenetraciónSeguridad MóvilAprendizaje y Educación

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHub
iwallplace/cve-2026-26897-ecoonline-deeplink

CVE-2026-26897-EcoOnline-DeepLink

Advertencia pública y PoC para CVE-2026-26897 — Omisión de enlace profundo en EcoOnline EHS Android (com.airsweb.v10), corregido en 0.2.500

Ver Repositorio
2hace 3 mesesAún no revisado

EcoOnline EHS (Android) — Bypass de validación de enlace profundo → Redirección abierta de WebView (CVE-2026-26897)

Divulgación pública / aviso para CVE-2026-26897, un bypass de validación de enlace profundo en la aplicación Android EcoOnline EHS (com.airsweb.v10). Un enlace profundo ehs-app:// manipulado se reescribe a https:// y se carga directamente en el WebView principal de la aplicación sin la comprobación de la lista blanca de hosts que la aplicación aplica en cualquier otra ruta de navegación, permitiendo que un atacante remoto renderice contenido arbitrario controlado por el atacante dentro de la aplicación de confianza (phishing).

Divulgado responsablemente, reconocido por el proveedor y corregido en la versión 0.2.500.

✅ Estado: CORREGIDO

  • Versión vulnerable analizada: com.airsweb.v10 0.2.499 (versionCode 44631)
  • Versión corregida: 0.2.500 (disponible en Google Play)
  • Acción para usuarios: actualizar la aplicación EcoOnline EHS a la última versión.

Binario afectado (para verificación)

La aplicación del proveedor es propietaria y no se redistribuye en este repositorio. El análisis estático a continuación se realizó en la compilación identificada aquí: obtenga el APK exacto de un archivo (por ejemplo, historial de versiones de APKPure) y verifique su hash antes de reproducir:

Paquetecom.airsweb.v10
versionName / versionCode0.2.499 / 44631

Resumen

Descripción

EcoOnline EHS para Android es un envoltorio WebView de Jetpack-Compose alrededor de la plataforma web EHS. Su contenido predeterminado se carga desde:

root@kitploit:~
startUrl = "https://ehsmobilelanding.ecoonline.net/"

La aplicación exporta una sola Activity (MainActivity) que es tanto el lanzador como el manejador del esquema de URL personalizado ehs-app. El elemento <data> del intent-filter de enlace profundo declara solo un esquema — sin host y sin ruta — por lo que cualquier URI ehs-app://… se enruta a la aplicación.

Para proteger la navegación del WebView, la aplicación implementa una lista blanca de hosts (isInternalHost) y la aplica al restaurar la última URL visitada. Sin embargo, la rama de manejo de enlaces profundos no llama a esa lista blanca en absoluto. Toma la URI del enlace profundo entrante, realiza un reemplazo de cadena ingenuo del esquema ehs-app: → https:, y llama a WebView.loadUrl() en el resultado. Por lo tanto, un atacante remoto puede crear un enlace profundo que haga que la aplicación de confianza cargue un origen https:// arbitrario.

Componente afectado

AndroidManifest.xml (v0.2.499) — enlace profundo exportado, solo esquema

root@kitploit:~
<activity
    android:name="com.airsweb.v10.MainActivity"
    android:exported="true" ... >
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="ehs-app"/>   <!-- scheme only: no host, no path -->
    </intent-filter>
</activity>

Causa raíz — rama de enlace profundo en MainActivityKt.WebViewPage (descompilado, v0.2.499)

root@kitploit:~
// 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
    }
}

La lista blanca que esta ruta no aplica (usada en otro lugar del mismo archivo):

root@kitploit:~
private static final Regex internalDomains =
        new Regex("^[-\\w]*\\.(airsweb)|(ecoonline)\\.net");
private static final List<String> 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);
}

Nota secundaria: la expresión regular internalDomains es en sí misma débil (alternancia rota + coincidencia de subcadenas containsMatchIn), pero el problema principal es que la rama de enlace profundo nunca invoca isInternalHost en absoluto.

Prueba de concepto

Se produjo una PoC de grabación de pantalla el 2026-01-13 contra com.airsweb.v10 0.2.499.

  1. Instale la versión afectada (0.2.499) en un dispositivo Android.
  2. Entregue un enlace profundo manipulado a la víctima (por ejemplo, por correo electrónico, SMS, chat, QR o página web):
    root@kitploit:~
    ehs-app://attacker.example/login
    
  3. Cuando la víctima lo abre, MainActivity reescribe el esquema y el WebView carga:
    root@kitploit:~
    https://attacker.example/login
    
    dentro de la aplicación EcoOnline EHS de confianza — no se realiza ninguna comprobación de la lista blanca.
  4. La página del atacante se renderiza con la apariencia y el marco de la aplicación legítima y puede, por ejemplo, presentar un inicio de sesión falso de EHS para recolectar credenciales.

Se incluye una demostración benigna, no recolectora de la redirección en poc/redirect-proof.html (uso: poc/README.md). Prueba que se carga un origen arbitrario dentro de la aplicación de confianza, sin entradas, sin captura de credenciales y sin solicitudes de red.

En la PoC original, el investigador alojó una página de destino similar benigna únicamente para demostrar la redirección. Este aviso documenta la vulnerabilidad con fines defensivos/de divulgación y contiene intencionalmente ninguna página de phishing ni código de captura de credenciales.

Impacto

  • Carga contenido https:// arbitrario controlado por el atacante dentro del contexto de la aplicación de confianza.
  • Phishing / robo de credenciales a través de un aviso de inicio de sesión que parece originarse en la aplicación real.
  • Suplantación de interfaz de usuario y mejora general de la ingeniería social (la página maliciosa hereda la confianza de la aplicación).

CVSS v3.1 (estimación del investigador — finalizar antes de la publicación): AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N → 6.3 (Medio) (se puede argumentar un Alcance:Cambiado, ya que el contenido no confiable se ejecuta en el contexto de la aplicación de confianza).

Mitigación

Actualice a com.airsweb.v10 0.2.500 o posterior. Correcciones recomendadas:

  • Aplicar isInternalHost() (o una lista blanca equivalente) a las URL de enlace profundo antes de loadUrl().
  • No derivar la URL cargada reescribiendo ciegamente el esquema; validar el esquema y el host.
  • Restringir el intent-filter del enlace profundo con un android:host/android:pathPrefix explícito.
  • Fortalecer la expresión regular internalDomains (anclar el host completamente; evitar coincidencias de subcadenas).

Cronología de divulgación

Referencias

  • CVE-2026-26897 (registro CVE de MITRE)
  • EcoOnline EHS en Google Play — https://play.google.com/store/apps/details?id=com.airsweb.v10
  • Proveedor — https://www.ecoonline.com/

Crédito

Descubierto y reportado por Ahmet Mersin — GitHub @iwallplace, HackerOne iwallplace.

Descargar herramienta
SHA-256e9e8a38d133cb9da9901caf03c4a7a033c75ad1f32ba0539260e47d5dd5068c0
FuenteAPKPure — historial de versiones de "EcoOnline EHS"
CampoValor
CVE IDCVE-2026-26897
ProveedorEcoOnline ("EcoOnline Global") — https://www.ecoonline.com/
ProductoEcoOnline EHS para Android (com.airsweb.v10)
Versión afectada0.2.499 (versionCode 44631)
Versión corregida0.2.500
Tipo de vulnerabilidadValidación incorrecta en un manejador de esquema de URL personalizado (bypass de enlace profundo) → carga de WebView no validada / redirección abierta
CWECWE-939 (Autorización incorrecta en el manejador de esquema de URL personalizado); relacionado CWE-749
Componente afectadocom.airsweb.v10.MainActivity (manejador de enlace profundo exportado) y la rama de enlace profundo en MainActivityKt.WebViewPage
Esquema personalizadoehs-app://
Tipo de ataqueRemoto (requiere interacción del usuario — abrir un enlace manipulado)
ImpactoPhishing / ingeniería social: contenido web arbitrario controlado por el atacante renderizado dentro de la aplicación EcoOnline EHS de confianza (por ejemplo, un inicio de sesión falso), evitando la lista blanca de dominios de la aplicación
DescubridorAhmet Mersin
FechaEvento
2026-01-13PoC grabada contra 0.2.499
2026-01-15Solicitud de CVE enviada a MITRE (ticket scr1979357)
2026-02-27CVE-2026-26897 asignado por MITRE
antes de la publicaciónProveedor reconoció; corrección lanzada en 0.2.500
2026-03-04Solicitud de publicación enviada a MITRE
2026-05-06MITRE solicitó una URL de divulgación pública completa
2026-06-03Aviso público publicado (este repositorio)