Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-26897-EcoOnline-DeepLink — Avis public et PoC pour CVE-2026-26897 — Contournement de deep link dans EcoOnline EHS Android (com.airsweb.v10), corrigé en 0.2.500 | Kitploit
Outils/GitHubGitHub/iwallplace/cve-2026-26897-ecoonline-deeplink
Sécurité AndroidAnalyse des VulnérabilitésExploitationExploitation d'Applications WebHameçonnageTests d'IntrusionSécurité MobileApprentissage et Éducation

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
GitHub
iwallplace/cve-2026-26897-ecoonline-deeplink

CVE-2026-26897-EcoOnline-DeepLink

Avis public et PoC pour CVE-2026-26897 — Contournement de deep link dans EcoOnline EHS Android (com.airsweb.v10), corrigé en 0.2.500

Voir le dépôt
il y a 2 moisPas encore vérifié

EcoOnline EHS (Android) — Contournement de la validation des deep links → Open Redirect WebView (CVE-2026-26897)

Divulgation publique / avis pour CVE-2026-26897, un contournement de validation de deep link dans l'application Android EcoOnline EHS (com.airsweb.v10). Un deep link ehs-app:// spécialement conçu est réécrit en https:// et chargé directement dans la WebView principale de l'application sans le contrôle de liste blanche d'hôtes que l'application applique sur tous les autres chemins de navigation, permettant à un attaquant distant d'afficher du contenu arbitraire contrôlé par l'attaquant dans l'application de confiance (hameçonnage).

Divulgation responsable, reconnue par l'éditeur et corrigée dans la version 0.2.500.

✅ Statut : CORRIGÉ

  • Version vulnérable analysée : com.airsweb.v10 0.2.499 (versionCode 44631)
  • Version corrigée : 0.2.500 (disponible sur Google Play)
  • Action pour les utilisateurs : mettre à jour l'application EcoOnline EHS vers la dernière version.

Binaire concerné (pour vérification)

L'application de l'éditeur est propriétaire et n'est pas redistribuée dans ce dépôt. L'analyse statique ci-dessous a été effectuée sur la build identifiée ici — obtenez l'APK exact depuis une archive (par exemple l'historique des versions d'APKPure) et vérifiez son hash avant de reproduire :

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

Résumé

Description

EcoOnline EHS pour Android est un wrapper WebView Jetpack-Compose autour de la plateforme web EHS. Son contenu par défaut est chargé depuis :

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

L'application expose une seule Activity (MainActivity) qui est à la fois le lanceur et le gestionnaire du schéma d'URL personnalisé ehs-app. L'élément <data> de l'intent-filter du deep link déclare uniquement un schéma — ni hôte ni chemin — de sorte que toute URI ehs-app://… est routée vers l'application.

Pour protéger la navigation de la WebView, l'application implémente une liste blanche d'hôtes (isInternalHost) et l'applique lors de la restauration de la dernière URL visitée. Cependant, la branche de gestion des deep links n'appelle pas du tout cette liste blanche. Elle prend l'URI du deep link entrant, effectue un remplacement de chaîne naïf du schéma ehs-app: → https:, puis appelle WebView.loadUrl() sur le résultat. Un attaquant distant peut donc concevoir un deep link qui amène l'application de confiance à charger une origine https:// arbitraire.

Composant affecté

AndroidManifest.xml (v0.2.499) — deep link exporté, schéma uniquement

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>

Cause racine — branche deep link dans MainActivityKt.WebViewPage (décompilé, 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 liste blanche que ce chemin n'applique pas (utilisée ailleurs dans le même fichier) :

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);
}

Note secondaire : la regex internalDomains est elle-même faible (alternance cassée + correspondance de sous-chaîne containsMatchIn), mais le problème principal est que la branche deep link n'appelle jamais isInternalHost.

Preuve de concept

Une preuve de concept (PoC) par enregistrement d'écran a été réalisée le 2026-01-13 contre com.airsweb.v10 0.2.499.

  1. Installez la version affectée (0.2.499) sur un appareil Android.
  2. Transmettez un deep link spécialement conçu à la victime (par ex. via e-mail, SMS, chat, QR ou une page web) :
    root@kitploit:~
    ehs-app://attacker.example/login
    
  3. Lorsque la victime l'ouvre, MainActivity réécrit le schéma et la WebView charge :
    root@kitploit:~
    https://attacker.example/login
    
    dans l'application de confiance EcoOnline EHS — aucun contrôle de liste blanche n'est effectué.
  4. La page de l'attaquant est rendue avec l'apparence et l'interface de l'application légitime et peut, par exemple, présenter une fausse page de connexion EHS pour collecter des identifiants.

Une démonstration bénigne, sans collecte d'identifiants de la redirection est incluse dans poc/redirect-proof.html (utilisation : poc/README.md). Elle prouve qu'une origine arbitraire est chargée dans l'application de confiance, sans aucune saisie, sans capture d'identifiants et sans requêtes réseau.

Dans la PoC d'origine, le chercheur a hébergé une page d'atterrissage bénigne imitant l'application uniquement pour démontrer la redirection. Cet avis documente la vulnérabilité à des fins défensives / de divulgation et ne contient intentionnellement aucune page de hameçonnage ni code de capture d'identifiants.

Impact

  • Charge du contenu https:// arbitraire contrôlé par l'attaquant dans le contexte de l'application de confiance.
  • Hameçonnage / vol d'identifiants via une invite de connexion qui semble provenir de la véritable application.
  • Usurpation de l'interface utilisateur et renforcement général de l'ingénierie sociale (la page malveillante hérite de la confiance de l'application).

CVSS v3.1 (estimation du chercheur — à finaliser avant publication) : AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N → 6.3 (Moyen) (un argument de Scope:Changed peut être avancé, car le contenu non fiable s'exécute dans le contexte de l'application de confiance).

Remédiation

Mettez à jour vers com.airsweb.v10 0.2.500 ou une version ultérieure. Correctifs recommandés :

  • Appliquez isInternalHost() (ou une liste blanche équivalente) aux URL des deep links avant loadUrl().
  • Ne dérivez pas l'URL chargée en réécrivant aveuglément le schéma ; validez le schéma et l'hôte.
  • Restreignez l'intent-filter du deep link avec un android:host/android:pathPrefix explicite.
  • Renforcez la regex internalDomains (ancrez complètement l'hôte ; évitez les correspondances de sous-chaînes).

Chronologie de divulgation

Références

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

Crédit

Découvert et signalé par Ahmet Mersin — GitHub @iwallplace, HackerOne iwallplace.

Télécharger l’outil
SHA-256e9e8a38d133cb9da9901caf03c4a7a033c75ad1f32ba0539260e47d5dd5068c0
SourceAPKPure — « EcoOnline EHS » historique des versions
ChampValeur
ID CVECVE-2026-26897
ÉditeurEcoOnline ("EcoOnline Global") — https://www.ecoonline.com/
ProduitEcoOnline EHS pour Android (com.airsweb.v10)
Version affectée0.2.499 (versionCode 44631)
Version corrigée0.2.500
Type de vulnérabilitéValidation incorrecte dans un gestionnaire de schéma d'URL personnalisé (contournement de deep link) → chargement WebView non validé / open redirect
CWECWE-939 (Autorisation inappropriée dans le gestionnaire de schéma d'URL personnalisé) ; CWE-749 associée
Composant affectécom.airsweb.v10.MainActivity (gestionnaire de deep link exporté) et la branche deep link dans MainActivityKt.WebViewPage
Schéma personnaliséehs-app://
Type d'attaqueÀ distance (nécessite une interaction de l'utilisateur — ouverture d'un lien spécialement conçu)
ImpactHameçonnage / ingénierie sociale : contenu web arbitraire contrôlé par l'attaquant affiché dans l'application de confiance EcoOnline EHS (par ex. une fausse page de connexion), contournant la liste blanche de domaines de l'application
DécouvreurAhmet Mersin
DateÉvénement
2026-01-13PoC enregistrée contre 0.2.499
2026-01-15Demande de CVE soumise à MITRE (ticket scr1979357)
2026-02-27CVE-2026-26897 attribué par MITRE
avant publicationL'éditeur a reconnu la vulnérabilité ; correctif publié dans 0.2.500
2026-03-04Demande de publication envoyée à MITRE
2026-05-06MITRE a demandé une URL de divulgation publique complète
2026-06-03Avis public publié (ce dépôt)