
OpenSIS SQLi Injection
OpenSIS Injection SQL Authentifiée
Il existe une vulnérabilité d'injection SQL dans Ajax.php, ForWindow.php, ForExport.php, Modules.php, functions/HackingLogFnc.php. Cette découverte affecte OpenSis Community Edition 9.1 à 8.0 et possiblement les versions antérieures.
Dans l'un des exemples, Ajax.php, on peut voir que les IP peuvent être enregistrées et insérées dans la base de données si des activités malveillantes sont rencontrées. Une chose à noter est que si l'en-tête « X-Forwarded-For » est envoyé, l'application prendra cette valeur au lieu de la valeur $_SERVER['REMOTE_ADDR']. Comme $ip est concaténé directement dans l'instruction SQL sans aucune forme de désinfection, il est possible d'effectuer une injection SQL.

Dans la preuve de concept ci-dessous, l'injection de la charge utile, ' AND SLEEP(7) AND '1'='1, a fait dormir l'application pendant 7 secondes, indiquant que l'injection SQL a réussi.

Vérifier le journal de la base de données prouve davantage cette vulnérabilité.

Enfin, l'utilisation de SQLMap, un outil automatisé d'injection SQL, a confirmé la vulnérabilité.

Les lignes de code affectées ont été trouvées pour ajouter directement la valeur de $_SERVER['HTTP_X_FORWARDED_FOR'] dans une instruction SQL.
• Ajax.php (Ligne 260 à 275)
• Modules.php (Ligne 1005 à 1023)
• ForExport.php (Ligne 135 à 147)
• ForWindow.php (Ligne 124 à 136)
• functions/HackingLogFnc.php (Ligne 47 à 68)
• Au lieu de construire dynamiquement des requêtes SQL en concaténant directement l'entrée utilisateur dans l'instruction SQL, utilisez plutôt des requêtes paramétrées (également connues sous le nom de requêtes préparées). Les requêtes paramétrées séparent le code SQL de l'entrée utilisateur, réduisant considérablement le risque d'attaques par injection SQL.
• Mettez en œuvre des techniques robustes de validation et de désinfection des entrées pour garantir que les données fournies par l'utilisateur sont conformes aux formats attendus et ne contiennent pas de code SQL malveillant. Validez les types, la longueur et le format des données d'entrée, et désinfectez les entrées en échappant les caractères spéciaux ou en utilisant des listes blanches pour n'autoriser que des caractères ou des motifs spécifiques.
• N'utilisez pas $_SERVER[‘HTTP_X_FORWARDED_FOR’] pour enregistrer les IP.