user-input-not-filtered
ÉlevéDescription
Les champs de saisie ne nettoient pas ni n’échappent les données fournies par l’utilisateur avant de les rendre sur la page, rendant l’application vulnérable aux attaques de Cross-Site Scripting (XSS).Importance
Le XSS permet aux attaquants d’injecter du JavaScript arbitraire dans les pages de votre application. Cela peut être utilisé pour :- Voler les cookies de session (même sans contournement HttpOnly via XSS stocké)
- Rediriger les utilisateurs vers des sites de phishing
- Exfiltrer silencieusement des données de formulaire (enregistrement de frappe)
- Défigurer l’application
- Attaquer d’autres utilisateurs qui consultent la page infectée
Comment QAOS le détecte
L’agent identifie les champs de saisie qui reflètent le contenu utilisateur (champs de recherche, formulaires de commentaires, champs de profil, paramètres URL rendus sur la page) et soumet des charges utiles de test XSS. Il observe si la charge utile est exécutée, rendue sans échappement ou stockée et affichée à d’autres visiteurs. Charges utiles de test utilisées :Comment corriger
Ne faites jamais confiance aux entrées utilisateur. Appliquez l’encodage de sortie approprié au contexte :hostile-data-used-in-query
ÉlevéDescription
Les entrées contrôlées par l’utilisateur sont utilisées directement dans la construction de requêtes sans paramétrage, permettant aux attaquants de modifier la logique de requête et d’extraire des enregistrements non autorisés.Importance
Un seul champ de recherche injectable peut exposer toute votre base de données. Les charges utiles d’injection SQL comme' OR 1=1 -- contournent les clauses WHERE. Les charges utiles d’injection NoSQL comme {"$ne": null} retournent tous les enregistrements. C’est systématiquement la cause n°1 des violations de données à grande échelle.
Comment QAOS le détecte
L’agent identifie les champs de recherche, de filtre et de requête, puis soumet des charges utiles d’injection et observe les changements de réponse :Comment corriger
Utilisez toujours des requêtes paramétrées. Ne concaténez jamais les entrées utilisateur dans des chaînes de requête :untrusted-data-concatenation-dynamic-query
ÉlevéDescription
Des requêtes dynamiques sont construites en concaténant plusieurs valeurs d’entrée non fiables, permettant à des fragments injectés comme&showAll=true, &fields=password ou ?filter[$gt]=0 de modifier le comportement de la requête et d’exposer des données non autorisées.
Importance
Même lorsque les entrées individuelles sont partiellement assainies, combiner plusieurs valeurs contrôlées par l’utilisateur dans une seule expression de requête crée des opportunités d’injection. Les vulnérabilités d’assignation massive dans les ORM entrent dans cette catégorie.Comment QAOS le détecte
L’agent teste les pages basées sur des filtres en injectant des paramètres de requête supplémentaires commeshowAll=true, fields=password,ssn,salary ou filter[$ne]=null pour vérifier si l’application les passe aveuglément à la couche de données.
Comment corriger
Utilisez une liste d’autorisation explicite de paramètres et d’opérateurs acceptés. Ne passez jamais directement des fragments de requête bruts des entrées utilisateur à un ORM ou un constructeur de requête :orm-parameter-extraction-in-url
ÉlevéDescription
Les paramètres URL sont passés directement à une requête ORM sans validation, permettant l’injection d’opérateurs de style MongoDB ([$ne], [$gt], [$regex]), de fragments SQL ou de paramètres d’assignation massive qui exposent des enregistrements supplémentaires ou des champs cachés.
Importance
L’injection ORM via les paramètres URL est particulièrement courante dans les applications Node.js utilisant Mongoose ou Sequelize, oùreq.query est passé directement à Model.find(). Cela peut contourner tout contrôle d’accès et exposer chaque enregistrement dans la collection.
Comment QAOS le détecte
L’agent ajoute des suffixes d’injection aux paramètres URL sur les pages avec des listes de données :Comment corriger
Assainissez les paramètres de requête avant de les passer à votre ORM. Rejetez toute entrée contenant des opérateurs$ ou une syntaxe de tableau :
orm-parameter-extraction-in-form
ÉlevéDescription
La même vulnérabilité d’injection ORM que ci-dessus, mais exploitée via des soumissions de formulaires (paramètres du corps POST) plutôt que des chaînes de requête URL.Importance
Les paramètres du corps POST reçoivent souvent moins de scrutin que les paramètres URL, surtout dans les frameworks qui utilisent des parseurs de corps qui convertissent automatiquement la notation de formulairename[$ne]=x en objets imbriqués { name: { $ne: 'x' } }.
Comment QAOS le détecte
L’agent soumet des formulaires avec des paramètres de corps modifiés contenant des charges utiles d’injection ORM et observe si la réponse inclut des données auxquelles il ne devrait pas avoir accès.Comment corriger
Appliquez le même assainissement aux paramètres du corps POST qu’aux chaînes de requête. Utilisezexpress-mongo-sanitize ou l’équivalent pour votre framework, et validez toutes les entrées par rapport à des schémas explicites en utilisant des outils comme Zod, Joi ou Pydantic.