79 % contre 51 % : les néobanques indépendantes en retard sur la sécurité des applications. Lire le rapport

Analyse approfondie

Analyse approfondie

UnrealIRCd : une injection de commandes exploitée dans la nature (CVE-2026-114713)

Une faille d'échappement du tag label permet à un utilisateur UnrealIRCd d'exécuter des commandes serveur ; corrigée en 6.2.7.1 et exploitée dans la nature.

En bref

  • Une faille d'échappement dans le module labeled-response d'UnrealIRCd permet à tout utilisateur ordinaire d'injecter des commandes serveur à serveur exécutées avec l'autorité du serveur. UnrealIRCd a publié 6.2.7.1 et un correctif à chaud le 7 novembre 2026.
  • Tous les serveurs UnrealIRCd 6.0.0 à 6.2.7 qui chargent le module, ce que fait la configuration par défaut, sont exposés lorsque le réseau compte deux serveurs liés ou plus.
  • L'enregistrement CVE la note CVSS v3.1 8,6 Élevée. Le catalogue Known Exploited Vulnerabilities (KEV) de la CISA l'a ajoutée le 13 novembre 2026, et son enregistrement Stakeholder-Specific Vulnerability Categorization (SSVC) indique une exploitation active.
  • Mettez à niveau vers 6.2.7.1 ou appliquez le correctif à chaud du fournisseur, puis vérifiez la version du module. Voir « Comment corriger ? » pour le contournement SPAMFILTER.

Suis-je concerné ?

Vous êtes exposé lorsque toutes les conditions suivantes sont réunies :

  • Le serveur exécute UnrealIRCd 6.0.0 à 6.2.7, ou une version 5.x en fin de vie.
  • Le module labeled-response est chargé. Le fichier modules.default.conf par défaut le charge.
  • Le réseau compte deux serveurs liés ou plus. La CVE décrit une exécution de commandes avec l'autorité du serveur dans cette topologie.
  • Un utilisateur ordinaire peut se connecter et envoyer des tags de message IRCv3.

Un serveur unique et non lié ne relaie pas la ligne injectée vers un pair, donc le chemin d'autorité serveur décrit par la CVE ne s'y applique pas. Mettez à niveau quand même : 6.2.7.1 corrige aussi huit autres problèmes, dont deux fuites d'adresse IP.

Branche Versions concernées Version corrigée
6.x 6.0.0 à 6.2.7 6.2.7.1
5.x Toutes les versions (fin de vie depuis le 2023-07-01) Aucune ; mettre à niveau vers 6.2.7.1

Vérifiez la version en cours et l'état du module :

# Version of the running server
./unrealircd version

# Is the module loaded, and at which version?
./unrealircd module-status | grep labeled-response

La ligne du module donne l'état du correctif. labeled-response 5.0 signifie que le serveur n'est pas corrigé. labeled-response 5.0-hot-patch-bundle-20261107 ou labeled-response 6.2.7.1 signifie qu'il l'est.

Comment corriger ?

Mettez à niveau vers 6.2.7.1, ou appliquez le correctif à chaud sans redémarrage, puis vérifiez la ligne du module.

  1. Appliquez le SPAMFILTER temporaire du fournisseur sur le réseau. Exécutez-le en tant qu'IRCOp sur chaque serveur : SPAMFILTER add -regex T block - Invalid_label ^label=(?![^\r\n;\x20]*\z). Il bloque les labels qui contiennent un retour chariot, un saut de ligne, un point-virgule ou un espace, et il ne fonctionne que si tous les serveurs exécutent 6.0.4 ou une version ultérieure.
  2. Sur chaque serveur, exécutez ./unrealircd hot-patch bundle-20261107. La dernière ligne doit indiquer que le correctif a été installé et que le serveur a été rehashé correctement.
  3. Ou mettez à niveau avec ./unrealircd upgrade et redémarrez. Les utilisateurs Windows téléchargent 6.2.7.1 depuis le site du fournisseur.
  4. Vérifiez avec ./unrealircd module-status | grep labeled-response. La sortie doit nommer le bundle du correctif à chaud ou 6.2.7.1.
  5. Retirez le SPAMFILTER une fois tous les serveurs corrigés.

Pour les versions 5.x en fin de vie, ajoutez blacklist-module "labeled-response"; à la configuration de chaque serveur et redémarrez-les, sans vous contenter d'un rehash. UnrealIRCd 5 est en fin de vie depuis le 2023-07-01 et ne reçoit aucun correctif.

Le correctif à chaud couvre les neuf problèmes de la version. S'il échoue, la FAQ du fournisseur sur le correctif à chaud décrit les cas de mise à niveau de distribution et de compilation. La mise à niveau vers 6.2.7.1 est la solution de repli.

Quelle est la cause racine ?

Le serveur copiait le tag de message IRCv3 label dans un tampon de taille fixe. Il le formatait ensuite dans les réponses sans échapper les délimiteurs qui séparent les tags, les paramètres et les lignes.

Dans UnrealIRCd 6.2.7, lr_pre_command() copie la valeur du tag avec strlcpy dans currentcmd.label. La seule validation se trouve dans labeled_response_mtag_is_ok(). Elle vérifie que la valeur n'est pas vide, que le client prend en charge les capacités labeled-response et batch, et que la valeur fait 64 octets ou moins.

int lr_pre_command(Client *from, MessageTag *mtags, const char *buf)
{
    lr_clear();

    if (IsServer(from))
        return 0;

    for (; mtags; mtags = mtags->next)
    {
        if (!strcmp(mtags->name, "label") && mtags->value)
        {
            strlcpy(currentcmd.label, mtags->value, sizeof(currentcmd.label));
            currentcmd.client = from;
            break;
        }
    }

    return 0;
}

gen_start_batch() écrit ensuite le label dans @label=%s :%s BATCH +%s labeled-response avec snprintf. lr_post_command() fait de même dans son chemin de réponse unique :

snprintf(packet, sizeof(packet) - 3,
         "@label=%s%s%s",
         currentcmd.label,
         more_tags ? ";" : " ",
         more_tags ? currentcmd.firstbuf + 1 : currentcmd.firstbuf);

Dans IRC, un message est composé d'une section de tags, d'une source, d'une commande et de paramètres. Les délimiteurs fonctionnent ainsi :

  • Un point-virgule sépare les tags.
  • Un espace termine la section de tags.
  • Un retour chariot ou un saut de ligne termine le message.

Un label qui contient l'un de ces octets modifie donc la structure de la réponse qu'UnrealIRCd construit. Le label est aussi copié dans la réponse ACK via la bibliothèque de tags de message. Cette bibliothèque utilise la même valeur non échappée.

Comment la faille est-elle exploitée ?

  1. L'attaquant se connecte à n'importe quel serveur du réseau en tant qu'utilisateur ordinaire, avec un client capable d'envoyer des tags IRCv3.
  2. L'attaquant envoie une commande avec un tag label dont la valeur contient un séparateur de tag, un espace ou un saut de ligne. Le serveur l'accepte parce que la validation ne vérifie que la longueur et les capacités du client.
  3. UnrealIRCd recopie le label dans le début de BATCH, dans la réponse ACK ou dans la réponse unique mise en tampon pour cette commande.
  4. Les délimiteurs découpent le texte généré en tags, paramètres ou second message IRC supplémentaires.
  5. La réponse traverse un lien serveur. Le pair analyse le message supplémentaire comme une commande serveur à serveur provenant d'un lien de confiance, donc il l'exécute avec l'autorité du serveur.

Aucun code d'exploit public n'est nécessaire pour expliquer la faille, et aucun n'est lié ici. Le fournisseur indique que tout utilisateur ordinaire peut KILL, GLINE et faire beaucoup d'autres dégâts. L'enregistrement de la CISA indique une exploitation active, donc la technique est utilisée.

Comment se déroule l'attaque ?

Un utilisateur ordinaire place des délimiteurs de tag et de ligne dans un label. UnrealIRCd recopie le label dans une réponse sans l'échapper, et le serveur pair exécute la commande injectée comme celle d'un serveur de confiance.

flowchart LR A["Un utilisateur ordinaire envoie une commande
avec un tag label forgé"] --> B["Le module copie le label
sans vérifier les délimiteurs"] B --> C["La réponse est construite
sous la forme @label=<valeur> ..."] C --> D["Les délimiteurs découpent la réponse
en tags ou en seconde ligne"] D --> E["La réponse traverse un lien serveur"] E --> F["Le pair exécute la ligne injectée
avec l'autorité du serveur"] F --> G["KILL, GLINE et d'autres
commandes serveur s'exécutent"]

Que peut faire un attaquant ?

Un utilisateur ordinaire peut exécuter des commandes que seul un serveur ou un IRCOp devrait exécuter, notamment KILL et GLINE contre d'autres utilisateurs et canaux.

L'impact exige toutes ces conditions :

  • Le serveur exécute une version concernée et charge labeled-response.
  • Le réseau compte deux serveurs liés ou plus, pour que la ligne injectée soit analysée par un pair comme une commande serveur.
  • L'attaquant peut se connecter comme utilisateur ordinaire. Aucun compte sur le serveur et aucun statut d'opérateur n'est nécessaire.
  • L'attaquant peut envoyer des tags IRCv3. Une socket brute ou un client scripté suffit.

Le fournisseur décrit ce problème comme le plus critique d'UnrealIRCd depuis 15 ans. L'enregistrement SSVC de la CISA indique un impact technique total et une exploitation automatisable. L'enregistrement CVE ne note que l'impact sur l'intégrité (C:N/I:H/A:N) ; les impacts sur la disponibilité et la confidentialité dépendent des commandes que l'attaquant exécute.

Pourquoi le correctif fonctionne-t-il ?

Le correctif rejette tout label qui contient un espace, un point-virgule, une barre oblique inverse, un retour chariot ou un saut de ligne. La valeur ne peut donc plus modifier la structure de la réponse.

Le commit de correction 05b5f5fdc8bb ajoute une vérification à labeled_response_mtag_is_ok() :

 int labeled_response_mtag_is_ok(Client *client, const char *name, const char *value)
 {
    if (BadPtr(value))
        return 0;

+   if (strpbrk(value, " ;\\\r\n"))
+       return 0;
+
    if (IsServer(client))
        return 1;

La vérification s'exécute avant la branche serveur, donc elle s'applique aussi aux tags qui arrivent d'un serveur lié. Chaque chemin de réponse qui utilise currentcmd.label reçoit désormais une valeur sans séparateur de tag, sans séparateur de paramètre et sans saut de ligne. Cela couvre le début de batch, la réponse ACK et le tampon de réponse unique.

Le fournisseur a livré le même changement dans 6.2.7.1 et dans le bundle du correctif à chaud. Le correctif est complet pour cette CVE ; les huit autres problèmes de la version sont des changements distincts.

Comment vérifier si j'ai été compromis ?

Aucun indicateur de compromission n'a été publié. La CISA indique une exploitation active. Ni le fournisseur ni la CISA n'ont publié de motifs de requêtes, de nombre de victimes ou de signatures de journaux pour cette CVE.

Vérifiez d'abord l'état du correctif, car un serveur non corrigé constitue l'exposition :

./unrealircd module-status | grep labeled-response
./unrealircd version

Examinez ensuite les journaux du serveur pour les effets que le fournisseur nomme :

  • Des commandes KILL, GLINE, SVS* et autres commandes serveur qui n'ont pas été émises par un IRCOp ou un lien serveur connu.
  • Des déconnexions de lien serveur ou des erreurs de protocole au même moment.
  • Des changements de configuration ou de liste de bans qu'aucun opérateur n'a effectués.

Les journaux d'UnrealIRCd varient selon la compilation et le niveau de journalisation, et une tentative bloquée peut ne laisser aucune trace. Le SPAMFILTER journalise les correspondances lorsqu'il bloque un label ; recherchez son message de blocage si le filtre était activé.

Chronologie

  • 2026-11-04 : le commit de correction 05b5f5fdc8bb est rédigé.
  • 2026-11-07 : UnrealIRCd publie 6.2.7.1 et le correctif à chaud bundle-20261107 à 15h00 UTC.
  • 2026-11-08 : l'enregistrement CVE est publié, et le fournisseur envoie l'avis à la liste de diffusion oss-security.
  • 2026-11-12 : l'enregistrement SSVC de la CISA indique une exploitation active.
  • 2026-11-13 : la CISA ajoute CVE-2026-114713 au catalogue KEV, avec une date d'échéance au 2026-11-16.

Du correctif au KEV de la CISA en 9 jours
Figure 1 : le correctif a été rédigé le 4 novembre 2026 et la version a suivi le 7 novembre. La CISA a marqué l'exploitation active le 12 novembre et ajouté la CVE au KEV le 13 novembre. Source : avis UnrealIRCd, enregistrement CVE et KEV de la CISA, vérifié le 14 novembre 2026

FAQ

CVE-2026-114713 est-elle exploitée dans la nature ?

Oui. La CISA l'a ajoutée au catalogue KEV le 13 novembre 2026, et son enregistrement SSVC indique une exploitation active au 12 novembre. L'avis du fournisseur décrit l'impact mais ne nomme ni campagne ni victime.

Le contournement SPAMFILTER corrige-t-il entièrement le problème ?

Non. Il bloque l'injection critique du label uniquement lorsque tous les serveurs du réseau exécutent 6.0.4 ou une version ultérieure. Il ne corrige pas les huit autres problèmes de 6.2.7.1, et il s'agit d'un filtre temporaire, pas d'un correctif.

J'exécute UnrealIRCd 5. Que faire ?

UnrealIRCd 5 est en fin de vie depuis le 2023-07-01 et est concerné par le problème critique. Ajoutez blacklist-module "labeled-response"; sur chaque serveur et redémarrez, puis passez à 6.2.7.1. Le fournisseur indique que les autres versions en fin de vie n'ont pas été vérifiées et sont probablement concernées.

Un serveur unique est-il exposé ?

La CVE décrit une exécution de commandes avec l'autorité du serveur sur un réseau comptant deux serveurs liés ou plus. Un serveur unique et non lié ne relaie pas la ligne injectée vers un pair, donc ce chemin ne s'applique pas. Mettez à niveau quand même, car 6.2.7.1 corrige huit autres problèmes.

Comment vérifier le correctif à chaud ?

Exécutez ./unrealircd module-status | grep labeled-response. La ligne doit afficher labeled-response 5.0-hot-patch-bundle-20261107 ou labeled-response 6.2.7.1. Une simple ligne labeled-response 5.0 signifie que le correctif n'est pas installé.

Références

  • Enregistrement CVE-2026-114713, CNA MITRE, publié le 2026-11-08, CVSS v3.1 8.6, CWE-140 et le bloc SSVC du CISA ADP : https://www.cve.org/CVERecord?id=CVE-2026-114713 (vérifié le 14 novembre 2026)
  • UnrealIRCd, « UnrealIRCd 6.2.7.1 released and hot-patch to fix 9 security issues », 7 novembre 2026, le texte de l'avis et la liste complète des problèmes : https://www.openwall.com/lists/oss-security/2026/11/08/1 (vérifié le 14 novembre 2026)
  • Index des actualités UnrealIRCd, la date de publication, la part de marché de 38 % et les instructions du correctif à chaud : https://www.unrealircd.org/index/news (vérifié le 14 novembre 2026)
  • Commit de correction 05b5f5fdc8bb, « Fix CRITICAL issue where anyone could execute commands as server/IRCOp », 4 novembre 2026 : https://github.com/unrealircd/unrealircd/commit/05b5f5fdc8bb (vérifié le 14 novembre 2026)
  • Source UnrealIRCd 6.2.7, la copie non validée du label dans src/modules/labeled-response.c et les constructeurs de réponse : https://github.com/unrealircd/unrealircd/blob/59546a20f6c9b0dae1646727acf74b4b744e9b09/src/modules/labeled-response.c (vérifié le 14 novembre 2026)
  • Liste des modules par défaut d'UnrealIRCd, labeled-response chargé par défaut : https://github.com/unrealircd/unrealircd/blob/unreal60_dev/doc/conf/modules.default.conf (vérifié le 14 novembre 2026)
  • Catalogue Known Exploited Vulnerabilities de la CISA, CVE-2026-114713 ajoutée le 2026-11-13 avec une échéance au 2026-11-16 : https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json (vérifié le 14 novembre 2026)