Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-26897-EcoOnline-DeepLink — Avviso pubblico e PoC per CVE-2026-26897 — Deep Link Bypass in EcoOnline EHS Android (com.airsweb.v10), corretto in 0.2.500 | Kitploit
Strumenti/GitHubGitHub/iwallplace/cve-2026-26897-ecoonline-deeplink
Sicurezza AndroidAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPhishingPenetration TestingSicurezza MobileApprendimento e Formazione

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHub
iwallplace/cve-2026-26897-ecoonline-deeplink

CVE-2026-26897-EcoOnline-DeepLink

Avviso pubblico e PoC per CVE-2026-26897 — Deep Link Bypass in EcoOnline EHS Android (com.airsweb.v10), corretto in 0.2.500

Vedi Repository
23 mesi faNon ancora revisionato

EcoOnline EHS (Android) — Bypass della validazione dei deep link → Reindirizzamento aperto WebView (CVE-2026-26897)

Divulgazione pubblica / advisory per CVE-2026-26897, un bypass della validazione dei deep link nell'applicazione Android EcoOnline EHS (com.airsweb.v10). Un deep link ehs-app:// appositamente creato viene riscritto in https:// e caricato direttamente nella WebView principale dell'app senza il controllo della whitelist degli host che l'app applica su ogni altro percorso di navigazione, consentendo a un aggressore remoto di visualizzare contenuti arbitrari controllati dall'aggressore all'interno dell'applicazione fiduciaria (phishing).

Divulgato in modo responsabile, riconosciuto dal fornitore e corretto nella versione 0.2.500.

✅ Stato: RISOLTO

  • Versione vulnerabile analizzata: com.airsweb.v10 0.2.499 (versionCode 44631)
  • Versione corretta: 0.2.500 (disponibile su Google Play)
  • Azione per gli utenti: aggiornare l'app EcoOnline EHS all'ultima versione.

Binario interessato (per verifica)

L'applicazione del fornitore è proprietaria e non viene ridistribuita in questo repository. L'analisi statica di seguito è stata eseguita sulla build identificata qui — ottenere l'APK esatto da un archivio (es. cronologia versioni APKPure) e verificarne l'hash prima di riprodurre:

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

Riepilogo

Descrizione

EcoOnline EHS per Android è un wrapper WebView Jetpack-Compose attorno alla piattaforma web EHS. Il suo contenuto predefinito viene caricato da:

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

L'app esporta una singola Activity (MainActivity) che è sia il launcher che il gestore per lo schema URL personalizzato ehs-app. L'elemento <data> del intent-filter del deep link dichiara solo uno schema — nessun host e nessun percorso — quindi qualsiasi URI ehs-app://… viene instradato all'app.

Per proteggere la navigazione WebView, l'app implementa una whitelist degli host (isInternalHost) e la applica quando ripristina l'ultimo URL visitato. Tuttavia, il ramo di gestione del deep link non chiama affatto quella whitelist. Prende l'URI del deep link in arrivo, esegue una sostituzione ingenua della stringa dello schema ehs-app: → https: e chiama WebView.loadUrl() sul risultato. Un aggressore remoto può quindi creare un deep link che fa sì che l'app fiduciaria carichi un'origine https:// arbitraria.

Componente interessato

AndroidManifest.xml (v0.2.499) — deep link esportato, solo schema

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"/>   <!-- solo schema: nessun host, nessun percorso -->
    </intent-filter>
</activity>

Causa principale — ramo deep-link in MainActivityKt.WebViewPage (decompilato, v0.2.499)

root@kitploit:~
// intent consegnato alla MainActivity esportata
if (intent.getScheme().equals("ehs-app")) {
    WebView webView = ...;
    if (webView != null) {
        Uri data = intent.getData();                       // URI completo ehs-app://…
        String s = String.valueOf(data);
        // riscrittura ingenua dello schema: "ehs-app:" -> "https:"
        String url = StringsKt.replaceFirst(s, "ehs-app:", "https:", false, 4, null);
        webView.loadUrl(url);                              // <-- NESSUN CONTROLLO isInternalHost()
    }
}

La whitelist che questo ramo non applica (usata altrove nello stesso file):

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 secondaria: la regex internalDomains è essa stessa debole (alternanza interrotta + corrispondenza di sottostringhe containsMatchIn), ma il problema principale è che il ramo deep-link non invoca mai isInternalHost.

Prova di concetto

Una PoC con registrazione dello schermo è stata prodotta il 13-01-2026 contro com.airsweb.v10 0.2.499.

  1. Installare la versione interessata (0.2.499) su un dispositivo Android.
  2. Consegnare un deep link appositamente creato alla vittima (ad es. via email, SMS, chat, QR o una pagina web):
    root@kitploit:~
    ehs-app://attacker.example/login
    
  3. Quando la vittima lo apre, MainActivity riscrive lo schema e la WebView carica:
    root@kitploit:~
    https://attacker.example/login
    
    all'interno dell'app EcoOnline EHS fiduciaria — nessun controllo della whitelist viene eseguito.
  4. La pagina dell'aggressore viene renderizzata con l'aspetto e la chrome dell'app legittima e può, ad esempio, presentare un falso login EHS per raccogliere credenziali.

Una dimostrazione benigna, non di raccolta del reindirizzamento è inclusa in poc/redirect-proof.html (utilizzo: poc/README.md). Dimostra che un'origine arbitraria viene caricata all'interno dell'app fiduciaria, senza input, senza cattura di credenziali e senza richieste di rete.

Nella PoC originale il ricercatore ha ospitato una pagina di destinazione benigna simile puramente per dimostrare il reindirizzamento. Questo advisory documenta la vulnerabilità a scopo difensivo / di divulgazione e intenzionalmente non contiene nessuna pagina di phishing o codice di cattura delle credenziali.

Impatto

  • Carica contenuti https:// arbitrari controllati dall'aggressore all'interno del contesto dell'applicazione fiduciaria.
  • Phishing / furto di credenziali tramite un prompt di login che sembra provenire dall'app reale.
  • Spoofing dell'interfaccia utente e aumento dell'ingegneria sociale in generale (la pagina dannosa eredita la fiducia dell'app).

CVSS v3.1 (stima del ricercatore — finalizzare prima della pubblicazione): AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N → 6.3 (Medio) (si può avanzare un argomento Scope:Changed, poiché il contenuto non fiduciario viene eseguito nel contesto dell'app fiduciaria).

Rimedi

Aggiornare a com.airsweb.v10 0.2.500 o successiva. Correzioni consigliate:

  • Applicare isInternalHost() (o una whitelist equivalente) agli URL dei deep link prima di loadUrl().
  • Non derivare l'URL caricato riscrivendo ciecamente lo schema; validare lo schema e l'host.
  • Vincolare il intent-filter del deep link con un esplicito android:host/android:pathPrefix.
  • Rafforzare la regex internalDomains (ancorare completamente l'host; evitare corrispondenze di sottostringhe).

Cronologia della divulgazione

Riferimenti

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

Crediti

Scoperto e segnalato da Ahmet Mersin — GitHub @iwallplace, HackerOne iwallplace.

Scarica lo strumento
SHA-256e9e8a38d133cb9da9901caf03c4a7a033c75ad1f32ba0539260e47d5dd5068c0
FonteAPKPure — cronologia versioni di "EcoOnline EHS"
CampoValore
CVE IDCVE-2026-26897
FornitoreEcoOnline ("EcoOnline Global") — https://www.ecoonline.com/
ProdottoEcoOnline EHS per Android (com.airsweb.v10)
Versione interessata0.2.499 (versionCode 44631)
Versione corretta0.2.500
Tipo di vulnerabilitàValidazione impropria in un gestore di schema URL personalizzato (bypass deep link) → caricamento WebView non validato / reindirizzamento aperto
CWECWE-939 (Autorizzazione impropria nel gestore per schema URL personalizzato); correlata CWE-749
Componente interessatocom.airsweb.v10.MainActivity (gestore deep link esportato) e il ramo deep-link in MainActivityKt.WebViewPage
Schema personalizzatoehs-app://
Tipo di attaccoRemoto (richiede interazione dell'utente — apertura di un link appositamente creato)
ImpattoPhishing / ingegneria sociale: contenuto web arbitrario controllato dall'aggressore visualizzato all'interno dell'app EcoOnline EHS fiduciaria (es. falso login), bypassando la whitelist dei domini dell'app
ScopritoreAhmet Mersin
DataEvento
2026-01-13PoC registrata contro 0.2.499
2026-01-15Richiesta CVE inviata a MITRE (ticket scr1979357)
2026-02-27CVE-2026-26897 assegnato da MITRE
prima della pubblicazioneFornitore riconosciuto; correzione rilasciata in 0.2.500
2026-03-04Richiesta di pubblicazione inviata a MITRE
2026-05-06MITRE ha richiesto un URL di divulgazione pubblica completo
2026-06-03Advisory pubblico pubblicato (questo repository)