GVI-2010-02 : Multiples vulnérabilités dans Open-AudIT ====================================================== 1 Produit --------- Description tirée de http://www.open-audit.org : "Open-AudIT is an application to tell you exactly what is on your network, how it is configured and when it changes. Open-AudIT will run on Windows and Linux systems. Essentially, Open-AudIT is a database of information, that can be queried via a web interface." 2 Description ------------- Plusieurs problèmes de sécurité ont été découverts qui peuvent être catégorisés de la façon suivante : - Manque d'authentification - Injection SQL - Cross-Site Scripting - Inclusion de fichiers (local) 3 Détails --------- Produit : Open-AudiT Versions : 20081013, 20091223-RC Vulnérabilités : authentification, SQLi, XSS, LFI Découvert par : Sébastien Duquette (virtualguardian.ca) Avis original : http://www.gardienvirtuel.ca/wp-content/uploads/2010/05/GVI-2010-02-FR.txt 4 Calendrier ------------ Une rustine (patch) a été envoyée au vendeur. Le vendeur a répondu qu'ils concentrent présentement leurs efforts sur le développement de la version 2 du logiciel. Les correctifs ne sont pas appliqués au moment de la publication de cet avis. Mainteneur avisé : 12 décembre 2009 Réponse du mainteneur : 13 décembre 2009 Relance : 14 janvier 2010 Réponse du mainteneur : 14 janvier 2010 Relance : 19 février 2010 Réponse du mainteneur : 21 février 2010 Envoi de la rustine : 29 mars 2010 Publication de l'avis : 20 mai 2010 5 Analyse --------- 5.1 Manque d'Authentification ----------------------------- Lorsque l'option "Use Passwords" est activée, Open-AudIT demande un nom d'utilisateur et un mot de passe valides pour accéder au panneau d'administration web. Toutefois, plusieurs scripts ne vérifie pas si l'utilisateur est authentifié avant d'accepter les requêtes. Ceci permet à un attaquant d'ajouter ou de modifier des informations dans la base de données des systèmes inventoriés, d'obtenir ou de modifier des informations de configuration comme les adresses de serveurs SMTP ou LDAP, etc. Aussi, le répertoire "backup" est accessible en lecture à tous par défaut, permettant à quiquonque de récupérer les sauvegardes qui s'y trouvent. Veuillez prendre note que ce problème n'est pas réglé par la rustine rendue disponible avec cet avis. Pour effectuer l'inventaire des postes informatiques, Open-AudIT utilisent des scripts VBS et Bash et renvoient les données par des requêtes HTTP POST. Les scripts ne supportent pas actuellement l'authentification HTTP. ------------------------------ | Scripts affectés | |------------------------------| | upgrade.php | | admin_config_data.php | | delete_system.php | | admin_delete_all_systems.php | | admin_nmap_input.php | | admin_pc_add_2.php | | delete_other.php | | delete_missed_audit.php | | ldap_audit_script.php | | ldap_login.php | | ldap_logout.php | | list.php | | list_export.php | | system_post.php | | system_export.php | | php.php | ------------------------------ 5.1.1 Preuve de concept ----------------------- Obtenir l'adresse du serveur LDAP admin_config_data.php?sub=f1 Effacer un système de la base de données par son ID delete_system.php?pc= 5.2 Injection SQL ----------------- La plupart des requêtes SQL dans l'application ne filtrent pas les paramètres. Par exemple, le code suivant est tiré du script system_post.php : $sql = "UPDATE other SET other_network_name = '" . $_REQUEST['other_network_name'] . "',"; Veuillez vous référer à la rustine rendue disponible avec cet avis pour la liste complète des requêtes affectées. 5.2.1 Preuve de concept ----------------------- Cette requête affichera les noms de l'utilisateur et de la base de données mysql courants admin_config_data.php?sub=f8&ldap_path_id=1%20UNION%20SELECT%20user%28%29, %20database%28%29 Cette requête retourne les informations de l'ensemble des systèmes inventoriés dans un fichier texte list_export.php?filename=export&sql=SELECT%2B%252A%2BFROM%2B%2560system 5.3 Cross-Site Scripting ------------------------ Quelques cas de Cross-Site Scripting ont été découverts. La table suivante en donne la liste. ------------------------------ | Script | Variable | ------------------------------ | include_lang.php | language | | list.php | view | ------------------------------ 5.3.1 Preuve de concept ----------------------- list.php?view=%3Cscript%3Ealert('XSS')%3B%3C%2Fscript%3E 5.4 Inclusion de fichiers ------------------------- Le script include_lang.php est vulnérable à l'inclusion de fichiers. Voici le code affecté :