Des XSS réfléchies (RXSS) ont été découvertes dans le système de Bug Tracking « JitterBug » sur les domaines principaux « www.samba.org » et « www.openldap.org ».
Introduction
JitterBug est un projet de « Bug Tracker » supporté et hébergé par Samba.org. Ce Bug Tracker est à présent suspendu et n’est plus maintenu.
Le portail de Samba.org conserve la page de présentation du projet ainsi qu’une version de démonstration. Beaucoup d’autres projets, notamment open-source tels que Gnome, rsync, The Gimp, linux-patches, ProFTPD, Willows, Java Linux, WindowMaker, mod_ssl, GnuCash ou encore OpenLdap ont par le passé exploité ce système de Bug Tracking. La plupart ont évolué et changé de solution (BugZilla par exemple) suite à l’arrêt de JitterBug, mais hélas pas l’intégralité.
Vulnérabilité
Une vulnérabilité de type Reflected XSS a pu être décelée au sein du moteur du système de bug tracking JitterBug. Cette vulnérabilité permet de corrompre le contexte des navigateurs des victimes, capturer des données personnelles et altérer le rendu des pages.
Le moteur JitterBug étant impacté, tous les sites utilisateurs de ce bug tracker sont concernés. A ce titre, le domaine principal « www.samba.org » qui expose encore le tracker en version de démonstration, ainsi que « www.openldap.org » qui utilise encore JitterBug actuellement en tant que bug tracker principal sont vulnérables.
Les URLs d’accès à un bug particulier du tracker JitterBug contiennent le paramètre « id » qui référence l’identifiant unique d’un bug. Ce paramètre est réfléchi, notamment dans la balise « <title> » de la page :
http://www.samba.org/cgi-bin/jitterbug/CVS?id=1337 http://www.openldap.org/its/index.cgi/Documentation?id=1337
Il est possible d’altérer ce paramètre GET « id » afin de former du code qui sera interprété dans le contexte de la page. JitterBug intègre toutefois un mécanisme de filtre des balises fermantes « </XXX>« . Ainsi une injection canonique, telle celle qui suit, n’est pas réalisable :
<script>alert(0);</script>
L’injection doit donc porter sur un autre type de balise, par exemple l’injection via l’événement « onerror » d’une balise « <img> » :
http://www.openldap.org/its/index.cgi/Documentation?id=1337</TITLE><img src=x onerror='alert(/Reflected XSS - Yann CAM @ASAfety/)' /><TITLE>;selectid=1337 http://www.samba.org/cgi-bin/jitterbug/CVS?id=1337</TITLE><img src=x onerror='alert(/Reflected XSS - Yann CAM @ASAfety/)' /><TITLE>;selectid=1337
Résultat au niveau de la source :
Notifications
Les mainteneurs du projet JitterBug ont été alertés, à savoir directement sur le bug tracker de www.samba.org. Le ticket a été privatisé afin de discuter de la meilleure méthode de correction et de décider du maintien ou non du portail de démonstration JitterBug sur « www.samba.org ».
Un ticket a également été ouvert sur le JitterBug tracker principal du projet OpenLDAP pour corriger le déploiement sur ce domaine. La correction a été appliqué en moins d’1h15min.
J’encourage tous sites utilisant encore le projet JitterBug en tant que bug tracker à changer de système au plus tôt, sachant que le projet n’est plus maintenu et qu’il n’y aura pas de patchs correctifs à l’avenir.
Après plusieurs semaines de discussion et de proposition de correction, les équipes de Samba (qui maintenaient le projet JitterBug) on finalement décidé de l’arrêt de celui-ci (sous réserve qu’il soit repris par un autre contributeur), et ont désactivé l’accès aux scripts CGI de la version de démonstration JitterBug.
Thanks a lot for the reminder, Yann!
I added this note on the web site now:
—
Jitterbug has known unfixed security vulnerabilities. Unless you know exactly what you are doing, you should not use it any more.
—And I made the cgi unaccessable on our server now. Further more I moved latest stable version to old-versions. This is all we can and should do I think. In case someone will start maintain jitterbug again (very unlikely I guess) we can change this again.
I’ll close this bug now as the web site is fixed finally. RIP jitterbug 😉
Corrections potentielles
Faute de disposer du détail de la correction apportées par les équipes d’OpenLDAP, une brève analyse (non testée) vous permettrait de sécuriser votre JitterBug si vous persévérez à employer ce moteur de bug tracking. En analysant rapidement le code (C) de la version 1.6.2 de JitterBug, la vulnérabilité semble localisée dans l’appel de la fonction « print_title » du fichier « jitterbug.c » à la ligne 249 :
void print_title(char *fmt, ...)
Cette fonction intègre le titre dans le code source de la page HTML retournée par le moteur avec un format spécifique :
vprintf(fmt, ap);
Pour protéger cette injection, chaque appel de la fonction « print_title() » doit être renforcé, notamment en échappant/encodant les caractères spéciaux. La plupart de ces appels sont réalisés à la fin du fichier « jitterbug.c », notamment aux ligne 2505 ou encore 2547 :
print_title('%s - %s/%s', lp_title(), directory, cgi_variable('id'));
Les variables incriminées semblent être tous les « cgi_variable(‘XXX’) » réinjectés sans nettoyage ni traitement dans le code HTML.
Ces appels à « print_title() » pourraient éventuellement être protégés via une fonction déjà disponible dans le fichier « cgi.c » à la ligne 361 :
char *urlquote(char *s)
Si vous appliquez ce patch et que celui-ci répond aux attentes, je serais ravi de modifier cet article pour confirmer la correction 🙂 !
Conclusion
Je salue les équipes de Samba et d’OpenLDAP pour nos divers échanges, leur intérêt et leur amabilité. Navré d’avoir contribué à une mort prématurée du projet JitterBug, mais comme les équipes de Samba l’indiquent, libre à vous de reprendre le fambeau !
Sources & ressources :