Le Common UNIX Printing System (CUPS) est une infrastructure critique de gestion d’impression sur les systèmes UNIX et Linux, permettant la gestion des files d’attente d’impression et la communication avec les imprimantes via des protocoles standards comme l’IPP (Internet Printing Protocol). Bien que reconnu pour sa fiabilité, une vulnérabilité récente a été identifiée dans le fichier ppd-cache.c, responsable de la gestion des descriptions d’imprimantes. Cette vulnérabilité concernait l’absence de validation des attributs reçus depuis des imprimantes connectées via IPP, ce qui posait des risques de sécurité non négligeables.
La vulnérabilité : Utilisation non validée des attributs IPP
Dans la version affectée de CUPS, le fichier ppd-cache.c recevait des attributs provenant des imprimantes via IPP sans les valider correctement. Ces attributs incluaient des URI et d’autres métadonnées, comme des informations sur les politiques de confidentialité ou les paramètres de gestion des impressions. Ces attributs étaient directement insérés dans des fichiers de description de l’imprimante (PPD) sans qu’il soit vérifié s’ils étaient bien formés ou conformes aux spécifications attendues.
Exemple de code avant le correctif :
if ((attr = ippFindAttribute(supported, "printer-more-info", IPP_TAG_URI)) != NULL)
cupsFilePrintf(fp, "*APSupplies: \"%s\"\n", ippGetString(attr, 0, NULL));
Risques associés
Cette absence de validation exposait le système à plusieurs risques potentiels :
Injection de données malveillantes : Un attaquant ayant la capacité de manipuler un serveur IPP pouvait injecter des URI malveillantes ou des attributs malformés. Cela pouvait compromettre la stabilité du service ou provoquer un comportement non désiré, voire exploiter une faille pour exécuter du code non autorisé.
Denial of Service (DoS) : Un serveur IPP malveillant pouvait envoyer des informations délibérément corrompues ou mal formées, pouvant entraîner des erreurs critiques dans CUPS et bloquer son bon fonctionnement.
Le correctif : Validation des attributs via ippValidateAttribute
Pour résoudre cette vulnérabilité, les développeurs ont introduit une validation systématique des attributs reçus via IPP. Chaque attribut récupéré est désormais validé avant d’être utilisé dans les fichiers de configuration. La fonction ippValidateAttribute a été implémentée pour s’assurer que les attributs sont correctement formés et conformes aux spécifications du protocole IPP.
Exemple du code après le correctif :
if ((attr = ippFindAttribute(supported, "printer-more-info", IPP_TAG_URI)) != NULL && ippValidateAttribute(attr))
cupsFilePrintf(fp, "*APSupplies: \"%s\"\n", ippGetString(attr, 0, NULL));
Impact du correctif
Sécurité renforcée : La validation des attributs avant leur utilisation empêche l’injection de données malveillantes ou incorrectes dans les fichiers de configuration. Cela ferme une porte importante à d’éventuelles attaques exploitant des URI ou des métadonnées malveillantes.
Fiabilité accrue : En empêchant l’utilisation d’attributs malformés, CUPS devient plus résilient aux erreurs provenant des imprimantes ou des serveurs IPP. Le système est donc moins susceptible de rencontrer des erreurs critiques dues à des entrées invalides.
Conclusion : Une amélioration essentielle pour la sécurité de CUPS
Cette vulnérabilité dans le fichier ppd-cache.c de CUPS souligne l’importance de la validation des données provenant de sources externes, comme les imprimantes réseau. Grâce à l’introduction de la fonction ippValidateAttribute, le système est désormais mieux protégé contre les attaques par injection ou Denial of Service. Cette mise à jour renforce la sécurité et la stabilité de CUPS, garantissant une meilleure protection des utilisateurs dans des environnements où des imprimantes réseau pourraient être malveillantes ou mal configurées.
La validation des entrées reste un principe fondamental dans la sécurisation des systèmes ouverts aux communications réseau, et cette amélioration de CUPS en est un parfait exemple.