[Contribution] Reflected XSS vulnérabilités dans samba.org et openldap.org

02
avril
2015
  • Google Plus
  • LinkedIn
  • Viadeo
Posted by: Yann C.  /   Category: Contributions / Opensource / Vulnérabilités, exploits et PoC / XSS   /   Pas de commentaire

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.

Reflected XSS www.samba.org

Reflected XSS www.samba.org

Reflected XSS www.openldap.org

Reflected XSS www.openldap.org

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>
Balise fermante filtrée

Balise fermante filtrée

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 :

RXSS via une balise IMG

RXSS via une balise IMG

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 :

  • Google Plus
  • LinkedIn
  • Viadeo
Yann C.

About the Author : Yann C.

Consultant en sécurité informatique et s’exerçant dans ce domaine depuis le début des années 2000 en autodidacte par passion, plaisir et perspectives, il maintient le portail ASafety pour présenter des articles, des projets personnels, des recherches et développements, ainsi que des « advisory » de vulnérabilités décelées notamment au cours de pentest.