ABUS Secvest est un système d'alarme sans fil qui est commercialisé auprès des particuliers et des petites entreprises. Il est généralement déployé par une entreprise spécialisée. Un contrôleur Secvest FUAA50000 coûte environ 400 euros. Un déploiement typique avec des détecteurs de mouvement, une sirène et des détecteurs de portes/fenêtres peut coûter des milliers d'euros. Dans cet article, nous allons expliquer comment plus de 10 000 systèmes d'alarme connectés à Internet ont pu être piratés et désactivés à distance.
ABUS a publié une version corrigée du logiciel Secvest. Si vous utilisez ce système, nous vous recommandons d'installer la version V3.01.21 (ou ultérieure). Vous aurez besoin d'un accès « installateur » pour le faire. Si vous n'avez pas installé le système vous-même, l'aide de la société qui a installé le système peut être nécessaire. Comme solution temporaire, vous pouvez supprimer le transfert de port vers le port 4433 dans votre routeur. Cela vous empêchera toutefois d'utiliser l'application pour smartphone ou l'interface Web pour contrôler le système.
Le système d'alarme peut être contrôlé via le panneau d'alarme, l'interface Web ou l'application Secvest (iPhone ou Android). Pour contrôler le système via une application ou une interface Web, le système d'alarme doit être connecté à Internet et un port HTTPS (4433 par défaut) doit être redirigé vers le système.
Sur la base de ces informations, nous avons mené une enquête rapide pour déterminer la popularité du système. Pour cela, nous avons utilisé les analyses HTTPS publiques de Rapid7 :
Pays | Nombre |
---|---|
Allemagne | 10.184 |
Suisse | 445 |
Autriche | 426 |
Pays-Bas | 376 |
Luxembourg | 89 |
France | 37 |
Belgique | 35 |
Autre | 87 |
Total | 11.679 |
Comme vous pouvez le constater, le système est surtout utilisé dans les pays germanophones et au Benelux. Selon ABUS, Secvest est le système d'alarme sans fil le plus vendu en Allemagne. Comme nous n'avons étudié que les ports couverts par les données de Rapid7, le nombre réel de systèmes exposés est probablement un peu plus élevé, car les gens modifient le port par défaut.
Une fois dans l'application, vous pouvez voir l'état de votre système d'alarme et l'activer ou le désactiver.
Nous apprécions le fait que cette configuration nous permette de contrôler le système d'alarme sans dépendre d'un système basé sur le cloud. Elle présente toutefois certains risques : comme le système d'alarme est connecté à notre adresse IP, elle peut permettre aux criminels de surveiller des cibles intéressantes sur Internet. Sur la base de votre adresse IP, ils peuvent dans certains cas être en mesure de remonter jusqu'à un lieu réel. Cela en fait une cible intéressante pour les criminels qui ciblent les maisons ou les entreprises haut de gamme.
Les chercheurs de la société de sécurité allemande SySS GmbH ont déjà bien avancé en examinant le côté sans fil du système et ont trouvé quelques problèmes, comme décrits dans cet article et cette vidéo. Nous avons décidé d'examiner la connectivité IP du système et avons également découvert de sérieux problèmes.
Pour s'authentifier sur l'interface Web, il faut un nom d'utilisateur et un code PIN d'alarme à 4 chiffres. Dans les versions ultérieures du micrologiciel, l'option d'un code à 6 chiffres a été ajoutée. Il existe trois niveaux d'utilisateur : installateur, administrateur et utilisateur normal. Une fois authentifié, vous pouvez modifier la configuration, gérer les utilisateurs ou (dés)activer le système, en fonction de votre rôle d'utilisateur. Les versions ultérieures du micrologiciel ont ajouté un quatrième niveau d'utilisateur pour les mises à jour. Nous aurions préféré un mot de passe distinct plutôt que de réutiliser le code PIN, car un code 4 chiffres peuvent être cracké en cinq minutes environ. Le panneau sonne l'alarme après trop de tentatives infructueuses et le nom d'utilisateur doit également être deviné.
Ce que nous avons découvert, c'est que bien que la requête HTTPS pour désactiver le système nécessite une authentification, de nombreuses autres requêtes n'en ont pas besoin. Par exemple, il est possible d'accéder au script sec_about_panel.cgi sans se connecter et d'obtenir un résumé du système, notamment le nombre de capteurs, de verrous, etc. Le fichier sec_virtkeypad_raster.bmp donne à un attaquant une vue en direct de l'écran du système d'alarme, lui permettant de voir le nom du système et si l'alarme est activée ou désactivée.
Nous pouvons également effectuer un test de la sirène interne en utilisant une requête HTTP POST, comme le montre la commande curl suivante :
curl -kv https://192.168.99.230:4433/<redacted> -d 'events={"panelTest_intSirensState":1}'
Heureusement, nous pouvons aussi l'éteindre en changeant le dernier « 1 » en « 0 », car le son devient très vite gênant. Nous n'avons pas acheté de sirène externe, mais nous pourrions probablement la tester aussi (en réveillant tout le voisinage au passage). Imaginez un attaquant qui « testerait » les sirènes de 10 000 systèmes d'alarme, ce qui aurait pour conséquence d'ennuyer beaucoup de gens (principalement des Allemands).
Plus grave encore, nous pouvons télécharger une copie de la configuration du système d'alarme, en demandant le fichier sans aucune forme d'authentification. Ce fichier binaire codé en hexadécimal contient les noms d'utilisateur et les mots de passe de tous les utilisateurs, ce qui nous permet de nous authentifier sur l'interface Web et de contrôler entièrement le système d'alarme. Voici un extrait de la commande hexdump de notre fichier de configuration :
0000f870 03 13 37 ff 01 73 03 70 69 63 6f 62 65 6c 6c 6f |..7..s.picobello|
0000f880 62 76 00 01 74 c3 05 00 00 00 00 00 01 75 c3 01 |bv..t........u..|
0000f890 0f 01 76 02 00 01 00 09 45 02 01 01 01 00 00 d2 |..v.....E.......|
0000f8a0 05 02 01 01 00 02 72 c3 03 13 38 ff 01 73 03 31 |......r...8..s.1|
0000f8b0 33 33 38 00 01 74 c3 05 00 00 00 00 00 01 75 c3 |338..t........u.|
0000f8c0 01 0f 01 76 02 01 01 00 09 45 02 01 01 01 00 00 |...v.....E......|
0000f8d0 d2 05 02 02 01 00 02 72 c3 03 12 34 ff 01 73 03 |.......r...4..s.|
0000f8e0 61 64 6d 69 6e 00 01 74 c3 05 00 00 00 00 00 01 |admin..t........|
0000f8f0 75 c3 01 0f 01 76 02 01 01 00 09 45 02 01 01 01 |u....v.....E....|
0000f900 00 00 d2 05 02 03 01 00 02 72 c3 03 99 99 ff 01 |.........r......|
0000f910 73 03 6e 69 65 6c 73 00 01 74 c3 05 00 00 00 00 |s.niels..t......|
Nous avons quatre utilisateurs : picobellobv
(l'installeur), 1338
, admin
et niels
. L'installateur a un code de 1337
, que l'on peut clairement voir dans le hexdump, à 6 octets avant le nom d'utilisateur. Les codes des deux autres utilisateurs (1338
, 1234
, and 9999
) peuvent également être vus.
C'est vraiment la seule vulnérabilité dont nous avons besoin. En extrayant le fichier de configuration, nous pouvons obtenir tous les noms d'utilisateur et mots de passe et nous connecter au système. Nous avons maintenant les mêmes privilèges que le propriétaire (ou l'installateur) du système d'alarme. Un attaquant peut maintenant reconfigurer ou désactiver le système, consulter les journaux pour déterminer le mode de vie ou chercher des indices pour trouver l'emplacement physique du système (comme le nom du propriétaire, que les installateurs saisissent souvent comme nom du système).
Le fichier de configuration contient également les mots de passe en texte clair des systèmes connectés. Si un utilisateur a connecté des caméras au système, nous pourrons accéder au flux vidéo en utilisant les mots de passe du fichier de configuration.
Le fichier de configuration contient également le mot de passe du « serveur ABUS ». Il s'agit d'un service DNS dynamique gratuit fourni par ABUS. Comme de nombreux fournisseurs ne fournissent pas d'adresses IP dynamiques aux utilisateurs, ABUS propose cette solution. Au lieu de configurer l'application Android/iOS avec une adresse IP statique, l'utilisateur peut configurer un nom DNS, tel que « secvest.u12345.abus-server.com ». Pour un attaquant, cela crée des opportunités intéressantes. En prenant le contrôle du DNS dynamique, nous pouvons rediriger les utilisateurs vers notre propre adresse IP et commencer à manipuler les informations. Nous pourrions par exemple dire à l'application que le système d'alarme est actif, alors qu'en réalité, il est désactivé. De même, si l'utilisateur possède une caméra, nous pouvons manipuler le flux vidéo. Nous pouvons maintenant enregistrer une séquence vidéo et la passer en boucle, de sorte que pour l'utilisateur final, tout semble normal pendant que nous entrons par effraction.
À l'heure actuelle, environ 10 % des systèmes Secvest utilisent la dernière version du logiciel. Ce qui signifie que 90 % des systèmes sur Internet utilisent une version vulnérable.
Calendrier de divulgation :
2020-10-30 : Contact d'ABUS via un formulaire Web afin de demander un contact de sécurité.
2020-11-04 : Réception de l'adresse e-mail du centre de sécurité d'ABUS. Envoi d'un e-mail pour demander un contact de sécurité.
2020-11-06 : Réception des coordonnées du directeur technique et envoi d'un avis par e-mail.
2020-11-08 : Confirmation de la réception de l'avis par ABUS.
2020-11-20 : Demande d'Eye par e-mail pour savoir si ABUS est en mesure de reproduire les résultats.
2020-11-20 : Confirmation de la part d'ABUS de la reproduction des résultats et de l'intégration d'un correctif dans la prochaine version.
2020-11-23 : Demande du CVE par Eye et envoi du numéro obtenu à ABUS.
2020-11-24 : Accusé de réception du CVE de la part d'ABUS.
2020-12-16 : Demande de mise à jour de la part d'Eye , réponse d'ABUS confirmant la publication d'un nouveau logiciel à la mi-janvier.
2021-01-22 : Publication de la version du logiciel V3.01.21 par ABUS, qui corrige la vulnérabilité signalée.
2021-04-20 : Publication le blog d'Eye.