Contexte de la mise à jour
Le 3 septembre 2026, MikroTik a publié simultanément trois paquets : RouterOS 7.23.4 (LTS), 7.24.2 (stable) et 6.49.21 (v6). Tous affichent le même bandeau : « Important security update », sans détail technique. Cette absence d’information incite les opérateurs à comparer les binaires avant et après afin d’extraire la correction.
Analyse du paquet NPK et du diff binaire
Les paquets sont fournis sous forme de fichiers NPK (Nova Package). Chaque NPK débute par le magic 1E F1 D0 BA, suivi d’une section TLV, d’une signature et d’un payload SquashFS. L’extraction montre un système de fichiers SquashFS 4.0 compressé en xz, d’une taille de 16 650 908 octets à partir de l’offset 0x1000. La commande utilisée :
binwalk routeros-x86-7.23.4.npk
# → 0x1000 SquashFS filesystem, little endian, version 4.0, compression: xz, size: 16650908 bytesAprès extraction, le répertoire /nova/bin/ révèle que le serveur SSH et le client SSH partagent le même binaire sshd. Un simple cmp indique 170 KB de différences, mais la plupart provient d’un décalage d’adresses. En comparant les tables de symboles dynamiques (nm -D) on identifie les ajouts et suppressions de symboles pertinents :
+ _Z20validLoginParamInput11string_view (libumsg.so)
+ _ZN12RsaPublicKey23parseHashFromDerEncodedE6HashIDN4asn14blobE (libucrypto.so)
- _ZN12RsaPublicKey23parseHashFromDerEncodedEjN4asn14blobECes changements touchent plusieurs binaires : sshd, ipsec, ssld, cloud et le processus mtget.
Vulnérabilités découvertes
Le premier correctif concerne une fonction validLoginParamInput qui rejette toute chaîne commençant par « - » ou contenant des caractères de contrôle. Dans la version antérieure, le processus /nova/bin/login accepte un argument positionnel commençant par « - », le convertit en descripteur de fichier (atoi(positional+1)) et lit jusqu’à 4096 octets depuis ce descripteur. Ainsi, un nom d’utilisateur SSH « -2 » force le serveur à lire depuis le descripteur 2 (stderr du PTY), injectant un blob de données contrôlé dans les paramètres de connexion. Cette injection permet à un attaquant disposant d’une session SSH authentifiée en lecture‑seule de fournir son propre masque de politique, aboutissant à une exécution de commandes RouterOS avec les privilèges du processus login.
Le second correctif modifie la routine RSA parseHashFromDerEncoded. La version antérieure utilisait un identifiant de hachage (HashID) mal validé, ouvrant la porte à une falsification de signature à faible exposant, exploitable via le débordement de la fonction mtget. Le nouveau symbole introduit un parseur plus strict, éliminant le vecteur d’injection.
Implications et mesures d’atténuation
Ces deux correctifs révèlent que la mise à jour résout à la fois une injection de paramètres via un descripteur de fichier et une faiblesse de validation RSA. Les administrateurs doivent impérativement mettre à jour tous les appareils MikroTik, même si leurs configurations semblent « non à risque », car la vulnérabilité se déclenche dès qu’une session SSH authentifiée est possible. En outre, il est recommandé de désactiver l’accès SSH direct sur les interfaces exposées et de surveiller les logs pour toute tentative d’utilisation du nom d’utilisateur « -2 ». Enfin, la transparence du diff de symboles montre l’intérêt de publier les changements de symboles dans les notes de version afin de faciliter l’audit de sécurité par la communauté.