🔍 Contexte
Publié le 7 août 2026 sur amibeingpwned.com, cet article présente une recherche présentée à DEF CON portant sur l’extension Connective signing, utilisée par plus de 2 millions d’utilisateurs principalement en Belgique. Cette extension est déployée par 8 des 10 plus grandes banques belges et plus de 60 agences gouvernementales belges, et supporte les signatures qualifiées eIDAS. L’éditeur, Nitro Software Belgium, est un Qualified Trust Service Provider (QTSP) inscrit sur la liste de confiance eIDAS de l’UE.
🧩 Architecture du système
Le système Connective se compose de deux parties :
- Une extension de navigateur (couche de communication)
- Un hôte natif (binary) qui dialogue avec les lecteurs de cartes à puce
L’extension transmet tous les messages sans filtrage d’origine, ce qui constitue le point de départ des vulnérabilités.
🚨 Vulnérabilités identifiées
1. Absence de vérification d’origine sur l’activationToken
L’activationToken (signé RSA 2048) n’est pas lié à l’origine du site demandeur. Il contient un UUID, un TTL et un bitmask de fonctionnalités, mais aucune information d’origine. N’importe quelle page web peut rejouer un token valide (ex: obtenu depuis Doccle.be) pour accéder à l’intégralité du système Connective sur la machine de l’utilisateur.
2. Lecture non autorisée des cartes eID et Maestro
Avec un activationToken valide rejouable, toute page web (y compris une iframe publicitaire) peut lire les données de la carte eID et Maestro de l’utilisateur sans son consentement, incluant le Rijksregisternummer, le nom complet, l’adresse, et des données attestées par le Registre National.
3. Vol du PIN eID via le pinToken
Le pinToken retourné par le binaire natif à la page web après saisie du PIN contient à la fois le chiffré et la clé de déchiffrement (AES-128, IV statique codé en dur 0xa6 × 16). Le texte du dialogue de saisie du PIN est entièrement contrôlé par la page web, facilitant le phishing. La procédure de déchiffrement :
- Décodage Base64 → 48 octets bruts
- Clé AES-128 : octets pairs (positions 0, 2, 4, …, 30)
- Chiffré : octets 32+
- IV statique :
a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6 a6
Une fois le PIN extrait, l’attaquant peut forger des signatures qualifiées eIDAS (hypothèques, accès Tax-on-web, etc.) tant que la carte est connectée.
4. RCE drive-by via GET_READERS et chargement de DLL arbitraire
La commande GET_READERS accepte un paramètre library permettant de spécifier un chemin de DLL à charger, avec traversée de répertoire relative autorisée. La seule contrainte est que le chemin contienne .dll. Contournement via un fichier polyglotte nommé frien.dlly_reminder.pdf téléchargé automatiquement, puis chargé depuis le dossier Downloads via traversée de chemin. Cela permet une RCE au niveau utilisateur, échappant au sandbox Chrome, sans action de sécurité requise de l’utilisateur.
🏦 Impact sur l’écosystème belge
- Prise de contrôle de comptes itsme (identité numérique belge : Tax-on-web, MyGov, MyPension, banques)
- Démonstration d’une prise de contrôle de compte CSAM.be
- Possibilité de fraude à l’identité avec données gouvernementales attestées
- Propagation potentielle en mode worm via vol de tokens de session
🔧 Chronologie et correctifs
- Premier rapport : ~octobre 2025 (146 jours avant le correctif complet)
- 8 mai 2026 : Premier correctif partiel (vérification d’origine via serveur distant) — RCE et fuite du pinToken non corrigés
- 19 mai 2026 : Nitro demande un délai de divulgation ; les chercheurs signalent l’incomplétude du patch
- 1er juin 2026 : Correctif complet — désactivation de la commande
libraryet mise en cache du pinToken dans l’extension (UUID aléatoire transmis au site)
📋 Type d’article
Publication de recherche offensive présentée à DEF CON, documentant de manière technique des vulnérabilités critiques dans un composant d’infrastructure de confiance nationale belge, avec démonstration de l’impact sur l’écosystème eIDAS.
🧠 TTPs et IOCs détectés
TTP
- T1185 — Browser Session Hijacking (Collection)
- T1539 — Steal Web Session Cookie (Credential Access)
- T1056.002 — Input Capture: GUI Input Capture (Collection)
- T1574.001 — Hijack Execution Flow: DLL Search Order Hijacking (Persistence)
- T1059 — Command and Scripting Interpreter (Execution)
- T1204.002 — User Execution: Malicious File (Execution)
- T1555 — Credentials from Password Stores (Credential Access)
- T1189 — Drive-by Compromise (Initial Access)
- T1036.008 — Masquerading: Masquerade File Type (Defense Evasion)
- T1134 — Access Token Manipulation (Privilege Escalation)
🟡 Indice de vérification factuelle : 46/100 (moyenne)
- ⬜ amibeingpwned.com — source non référencée (0pts)
- ✅ 15000 chars — texte complet (fulltext extrait) (15pts)
- ✅ 2 IOC(s) (6pts)
- ⬜ 0/1 IOCs confirmés externellement (0pts)
- ✅ 10 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ pas de CVE à vérifier (0pts)
🔗 Source originale : https://amibeingpwned.com/blog/8-in-10-banks-in-belgium