Qu'est-ce que l'injection de code ?
L'injection de code est une attaque dans laquelle du code malveillant est injecté dans une application, puis interprété ou exécuté par celle-ci. Dans les applications PowerBuilder, la forme la plus courante et la plus dangereuse est l'injection SQL — où un attaquant manipule les requêtes de base de données pour effectuer des opérations non autorisées.
L'injection SQL dans PowerBuilder est particulièrement grave, car elle cible l'application dans sa fonction principale : l'interaction avec la base de données. Une attaque réussie peut exposer ou détruire des années de données métier, et dans certains cas donner à un attaquant un contrôle total sur le serveur de base de données.
Pourquoi les applications PowerBuilder sont-elles ciblées par l'injection SQL ?
Les applications PowerBuilder sont, par conception, fortement orientées base de données. Elles reposent sur les DataWindows, le SQL dynamique et les connexions directes aux bases de données — ce qui en fait des cibles de choix, car une attaque par injection SQL réussie contre une application PowerBuilder atteint directement les données critiques.
Les attaques par injection SQL contre les applications PowerBuilder peuvent :
- Accéder à des données sensibles ou les détruire — dossiers clients, données financières, informations personnelles.
- Extraire le schéma de la base de données : noms des tables, structures des colonnes, procédures stockées.
- Escalader jusqu'à la compromission totale du serveur de base de données, au déni de service ou à une prise de contrôle hostile.
Les équipes qui effectuent un audit de sécurité plus complet de leur application PowerBuilder trouveront les risques d'injection traités aux côtés de l'authentification, du chiffrement et des contrôles de déploiement dans le guide pour sécuriser les applications PowerBuilder.
Comment fonctionne l'injection SQL dans le code PowerBuilder ?
Le vecteur d'injection SQL le plus courant dans PowerBuilder est le SQL dynamique construit par concaténation de chaînes — où les valeurs fournies par l'utilisateur sont directement intégrées dans une chaîne de requête sans validation ni échappement.
Une attaque typique consiste à fournir une valeur malveillante dans un champ de formulaire où une saisie normale est attendue. Lorsque cette valeur atteint une instruction SQL dynamique non protégée, elle modifie la logique de la requête — pouvant supprimer des enregistrements, contourner l'authentification ou extraire des données auxquelles l'utilisateur n'aurait jamais dû avoir accès.
Dans PowerBuilder, les instructions SQL dynamiques intégrées dans les événements et fonctions PowerScript sont particulièrement vulnérables et doivent être examinées avec attention.
Exemple de code non conforme — vulnérable à l'injection SQL :
string query = "DELETE FROM employee WHERE emp_id = '" + Emp_id_var + "'" ; EXECUTE IMMEDIATE: query;
Dans l'exemple ci-dessus, si Emp_id_var contient une valeur telle que ' OR '1'='1, la clause WHERE devient universellement vraie et le DELETE affecte toutes les lignes de la table.
Exemple de code conforme — utilisant des requêtes paramétrées :
INT Emp_id_var = 56 PREPARE SQLSA FROM "DELETE FROM employee WHERE emp_id =? " ; EXECUTE SQLSA USING :Emp_id_var;
Les requêtes paramétrées transmettent la saisie utilisateur en tant que valeur typée plutôt que de l'intégrer dans la chaîne SQL.
Le moteur de base de données la traite uniquement comme une donnée. Elle ne peut pas modifier la structure de la requête, quel que soit le contenu de la saisie.
Visual Expert peut effectuer cette vérification automatiquement afin d'identifier ce type de vulnérabilités de sécurité.
Comment détecter les vulnérabilités d'injection SQL avec Visual Expert
Visual Expert analyse automatiquement l'intégralité de votre code source PowerBuilder à la recherche de patterns SQL dynamiques vulnérables à l'injection de code.
Voici comment localiser tous les objets concernés en une seule analyse.
Lister toutes les vulnérabilités d'injection de code dans l'application
- Dans la Vue principale, cliquez sur [Code Inspection for PowerBuilder].

- Dans la barre de navigation, cliquez sur [Security Vulnerabilities].

- Sélectionnez la règle « Database queries should not be vulnerable to injection attacks ».
- Sélectionnez [Issues Found] dans la barre de navigation.
Visual Expert liste tous les événements et fonctions contenant des requêtes SQL vulnérables à l'injection de code.

- Sélectionnez une méthode dans cette liste.
Les instructions à l'origine de la vulnérabilité sont mises en évidence dans le code.
- Pour corriger un problème d'« Injection de code », sélectionnez la fonction PowerBuilder dans l'arborescence.
- Dans la barre de navigation, cliquez sur [Open in PB IDE].

Visual Expert ouvrira la cible, l'objet et le PowerScript correspondants dans l'IDE PowerBuilder, à condition que PB ait été préalablement ouvert avec le Workspace approprié.
Vous pouvez ensuite effectuer vos modifications et compiler/enregistrer votre projet PB.

Après la prochaine analyse du code, Visual Expert mettra à jour les résultats de l'inspection de code en fonction de vos modifications.
Inspecter un objet, une bibliothèque, un package ou une méthode spécifique
Si vous souhaitez vous concentrer sur un fragment de code particulier, suivez ces étapes :
- Dans l'arborescence Visual Expert, sélectionnez le fragment de code que vous souhaitez inspecter.
Par exemple, une procédure.

- Dans la barre de navigation, cliquez sur « Code Inspection Issues ».
- Suivez les étapes 4 à 7 décrites ci-dessus.
Au-delà de l'injection SQL : autres risques d'injection dans PowerBuilder
L'injection SQL est la forme d'injection de code la plus répandue dans PowerBuilder, mais Visual Expert détecte également deux autres types de vulnérabilités d'injection affectant les applications qui traitent des saisies utilisateur :
- Attaques par traversée de répertoire (Path traversal) — lorsque le code PowerBuilder construit dynamiquement des chemins du système de fichiers à partir de saisies utilisateur, les attaquants peuvent injecter des séquences comme ../ pour accéder à des répertoires en dehors de la portée prévue.
- Injection de commandes système (OS command injection) — lorsque le code PowerBuilder exécute des commandes du système d'exploitation basées sur des valeurs fournies par l'utilisateur sans valider le nom de la commande, les attaquants peuvent injecter des commandes système arbitraires.
Ces deux types sont couverts par les règles d'analyse des vulnérabilités de sécurité PowerBuilder de Visual Expert.