Audit sécurité WebDev et HFSQL

Cet article a pour vocation de partager le fruit de notre expérience de tests d’intrusion réalisés sur des sites web construits avec WebDev et la base de données HFSQL. Il s’adresse aux auditeurs et chercheurs qui souhaitent étudier la sécurité de ces technologies, mais aussi aux développeurs curieux.

Il est important de souligner que WebDev permet de créer des applications web sécurisées, mais comme tous frameworks, il laisse aux développeurs suffisamment de flexibilité pour y introduire des vulnérabilités.

Nous verrons en particulier les possibilités offertes par HFSQL en cas d’injections SQL, comment s’authentifier sur un service HFSQL accessible, ainsi que la réplication d’un environnement local WebDev pour en étudier la sécurité.

Note : l’image d’illustration a été réalisée avec une IA, c’est une référence comique aux visuels de PC SOFT qui contiennent généralement des personnes qui ne sont pas dans des pays froids.

WinDev, WebDev, HFSQL, WLangage

Avant d’entrer dans le vif du sujet, quelques définitions s’imposent.

Premièrement, WebDev != WebDav, hein Nolan 🙂

WinDev :  WinDev est un atelier de génie logiciel (AGL) édité par la société PC SOFT, la première version fut créée en 1993. Ce logiciel permet de concevoir et développer des applications dans tous les domaines. WinDev utilise son propre langage de programmation, le WLangage, un langage simple, puissant et très rapide à prendre en main.

WebDev :  WebDev est un environnement de développement d’applications web. Il comprend un éditeur de code, une interface de conception visuelle, des composants préconçus et une base de données intégrée. De plus, il propose des fonctionnalités de déploiement facilitées pour rendre les applications web rapidement accessibles en ligne. WebDev est populaire, surtout en France, auprès des développeurs cherchant à créer des applications web complexes et puissantes, tout en bénéficiant d’une interface utilisateur intuitive et de fonctionnalités de développement rapides.

HFSQL : HFSQL (HyperFileSQL) se positionne comme un système de gestion de base de données relationnelle, offrant des fonctionnalités avancées pour le stockage, l’organisation et la récupération de données de manière structurée. En complément, HFSQL offre la possibilité d’utiliser WLangage, qui propose des fonctions avancées, simples d’utilisation et puissantes, ce qui renforce sa polyvalence et ses capacités de développement. Ces deux composants, bien que distincts, peuvent collaborer de manière synergique dans le développement d’applications robustes et sécurisées.

Pentest de l’application WebDev

Les tests d’intrusion sur une application web WebDev et HFSQL ne sont pas différents de ceux exécutés sur des technologies plus répandues : les vulnérabilités du TOP10 OWASP peuvent y être rencontrées et la méthodologie reste celle d’un pentest web classique.

L’application est le plus généralement déployée sur un environnement Windows avec un serveur web IIS, adaptez donc vos wordlists en cas de path traversal !

Cet article traite de deux spécificités qui ne sont pas couvertes par les outils actuels à disposition des pentesters : l’exploitation d’une injection HFSQL et l’authentification sur le service HFSQL (le plus souvent sur le port tcp/4900).

S’authentifier sur HFSQL

Il est fréquent que le port du SGBD HFSQL soit ouvert sur Internet : des clients lourds WinDev peuvent nécessiter l’accès à ces données ou la base de données est hébergée dans une infrastructure différente de l’application WebDev. Dans tous les cas, c’est une pratique dangereuse : il est recommandé de ne jamais laisser ouvert le service de base de données sur Internet et de restreindre son accès (par liste blanche d’adresses IP, par VPN, ou autres).

Il n’existe pas d’outils faciles d’utilisation permettant de tester la validité d’un compte sur un service HFSQL ouvert. En effet, cela nécessite l’utilisation d’un driver ODBC spécifique, difficilement intégrable dans des outils comme Metasploit ou Hydra (d’un point de vue technologique mais aussi juridique).

La solution proposée ici est l’utilisation d’un système Windows, avec l’installation du driver ODBC et la création d’un script PowerShell simple utilisant ce dernier.

La première étape est de télécharger et installer le driver ODBC : https://pcsoft.fr/st/telec/modules-communs-28/wx28_94s.htm.

Téléchargez l’exécutable pour Windows et installez-le.

Vous pouvez vérifier sa bonne installation avec la commande PowerShell suivante :

Get-OdbcDriver | Where-Object Name -like "HFSQL"

Vous pouvez ensuite interagir simplement avec le driver grâce à PowerShell. Le script suivant permet de tester la connexion à une base HFSQL distante en utilisant le compte administrateur par défaut qui est admin sans mot de passe.

Les pentesters DSecBypass vous ont facilité le travail en utilisant une base de données built-in, accessible par l’utilisateur admin de HFSQL, ce qui vous permet d’exécuter la requêtes SQL sans forcément connaître le nom des bases applicatives.

Le lecteur averti pourra étendre ce script pour bruteforcer l’authentification au service, bien évidement sur les systèmes sur lesquels il détient une autorisation.

Execution du script Powershell pour s'authentifier à la base HFSQL

Exploitation d’une injection HFSQL

SQLMap sait détecter l’injection HFSQL puisque le langage reste du SQL relativement classique. En revanche, il ne saura pas l’exploiter car il ne détecte pas le DBMS et ne dispose pas de certaines fonctionnalités pour l’exploiter de manière générique. Cela se traduit en général par SQLMap rapportant une injection SQL, découvrant la méthode d’exploitation (Error, Blind, Union etc), puis finissant par déclarer que c’est un faux positif.

Lors d’un test d’intrusion, notre pentester a découvert une injection SQL dans une application WebDev. Cette faille, lorsqu’elle concerne HFSQL, devient particulièrement sensible : elle permet à un attaquant de tirer parti du langage WLangage, qui est une extension propre à l’environnement de développement WinDev, WebDev et WinDev Mobile.

Cette interconnexion entre WebDev, HFSQL et WLangage offre un potentiel significatif pour le développement d’applications. Toutefois, elle souligne également l’importance d’une gestion proactive des vulnérabilités, en particulier dans le contexte de la sécurité des bases de données. Cela nécessite une vigilance constante et des mesures de sécurité appropriées pour garantir l’intégrité et la confidentialité des données stockées.

Attention, ce n’est pas automatique que l’utilisateur HFSQL ait accès aux fonctions WLangage. Il est donc possible que votre injection SQL ne puisse pas utiliser cette technique d’exploitation. Cependant, d’expérience, les développeurs donnent fréquemment ces droits à l’application.

Voici un exemple de requête HFSQL qui utilise une fonction WLangage. Pour les utiliser, il suffit de préfixer le nom de la fonction par « WL. » :

Exemple de requête HFSQL avec WLangage

L’ensemble des fonctions WLangage est documenté au lien suivant : https://doc.pcsoft.fr/fr-FR/search2.awp?origin=browse&cat=wlangage,249.

Revenons à notre injection SQL.

L’auditeur avait validé manuellement la présence de l’injection :

"test' or 1=1--" renvoie l'ensemble des résultats
"test' or 1=2--" ne renvoie aucun résultat

De type « Union based », l’injection permettait de récupérer le résultat de la requête ce qui permet par exemple d’obtenir l’ensemble des variables d’environnement systèmes grâce à la fonction « WL.SysEnvironment() » :

Utilisation WLangage pour exploiter une injection HFSQL

La payload est la suivante :

' union all select 85,85,WL.SysEnvironment()--

On voit clairement, dans le retour de l’application, l’ensemble des variables d’environnement configurées. Ce qui, dans certains contextes, peut être très intéressant.

Selon les configurations et version HFSQL, les fonctions ExeRun (LanceAppli) ou LanceAppliAssociée peuvent être utilisées pour exécuter des commandes Windows sur le serveur de base de données. Une fonction bas niveau permet également d’interagir avec les dll. Notons que HFSQL restreint les fonctions WLangage accessibles, le lecteur devra donc découvrir lesquelles sont utilisables.

Plus largement, les fonctions WLangage de la rubrique « Fonctions WLangage de gestion de Windows » devraient être testées dans le cadre d’un test d’intrusion, en particulier les Fonctions Exécutables, Fonctions Système et Fonctions Réseaux.

Réplication d’un environnement WebDev + HFSQL en local

Afin d’étudier et mieux comprendre la sécurité des applications développées sur WinDev/WebDev il peut être intéressant de se créer un environnement de test local.

Pour cela il suffit d’une machine virtuelle Windows et d’installer l’environnement WebDev (dont HFSQL et IIS qui vous seront proposés lors de l’installation). Les prérequis de la VM sont disponibles au lien suivant : https://doc.pcsoft.fr/?2036002.

Pour tester l’exécution de fonctions WLangage depuis HFSQL, une fois tous les composants installés, ajoutez un nouvel utilisateur à l’aide du Centre de Contrôle d’hébergement WebDev en lui octroyant tous les droits sur la base, en particulier le « Droit d’exécuter des procédures stockées ».

Vérifiez ensuite que vous pouvez exécuter les fonctions WL en utilisant le client HFSQL paramétré avec l’utilisateur ainsi créé :

De nombreuses possibilités de recherche sur la sécurité de l’environnement WinDev/WebDev existent : analyser les communications entre le client HFSQL et le serveur, analyser la sécurité des fonctions WLangage (fuzzing des paramètres par exemple), étudier les possibilités d’élévations de privilèges en local, et bien d’autres.

Et les remédiations dans tout ça?

Afin de déployer des applications WebDev avec HFSQL dans les meilleurs conditions de sécurité, les conseils suivants peuvent être considérés :

  • Implémenter les recommandations de sécurité de PC SOFT : https://doc.pcsoft.fr/fr-FR/?1000017310
  • Assurez-vous d’avoir un mot de passe complexe pour le compte Admin HFSQL
  • Utilisez des utilisateurs systèmes qui possèdent des droits restreints
  • N’octroyez que les droits strictement nécessaires à l’utilisateur HFSQL
  • N’exposez les services réseau HFSQL qu’aux hôtes et réseaux devant y accéder
  • Utilisez les requêtes HFSQL paramétrées lorsque vous devez construire une requête à partir de données qui proviennent du frontend
  • Utilisez la fonction WLangage HTMLVersTexte() pour vous prémunir des XSS
  • Formez vos développeurs aux bonnes pratiques de développement sécurisé

🛡️ DSecBypass vous accompagne sur l’audit de sécurité de vos applications Web ainsi que sur la formation des développeurs aux bonnes pratiques de sécurité. N’hésitez pas à nous contacter pour des informations complémentaires et/ou un devis personnalisé 📝.