{"id":3717,"date":"2024-10-15T13:18:52","date_gmt":"2024-10-15T13:18:52","guid":{"rendered":"https:\/\/techhub.saworks.io\/codeql-quest-ce-quune-donnee-contaminee\/"},"modified":"2025-06-18T09:31:22","modified_gmt":"2025-06-18T09:31:22","slug":"codeql-quest-ce-quune-donnee-contaminee","status":"publish","type":"post","link":"https:\/\/techhub.saworks.io\/fr\/codeql-quest-ce-quune-donnee-contaminee\/","title":{"rendered":"CodeQL : qu&rsquo;est-ce qu&rsquo;une donn\u00e9e contamin\u00e9e ?"},"content":{"rendered":"\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"576\" data-src=\"\/wp-content\/uploads\/2024\/10\/1728997429718-1024x576.png\" alt=\"\" class=\"wp-image-2596 lazyload\" data-srcset=\"https:\/\/techhub.saworks.io\/wp-content\/uploads\/2024\/10\/1728997429718-1024x576.png 1024w, https:\/\/techhub.saworks.io\/wp-content\/uploads\/2024\/10\/1728997429718-300x169.png 300w, https:\/\/techhub.saworks.io\/wp-content\/uploads\/2024\/10\/1728997429718-768x432.png 768w, https:\/\/techhub.saworks.io\/wp-content\/uploads\/2024\/10\/1728997429718.png 1280w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/576;\" \/><\/figure>\n\n<p>Vous \u00eates-vous d\u00e9j\u00e0 demand\u00e9 comment les entr\u00e9es non fiables peuvent devenir le talon d&rsquo;Achille de la s\u00e9curit\u00e9 de votre application ? Aujourd&rsquo;hui, nous nous penchons sur un concept crucial pour les d\u00e9veloppeurs et les professionnels de la s\u00e9curit\u00e9 : les <strong>donn\u00e9es contamin\u00e9es<\/strong>. Comprendre les donn\u00e9es contamin\u00e9es est essentiel pour pr\u00e9venir les vuln\u00e9rabilit\u00e9s telles que l&rsquo;<strong>Injection SQL<\/strong>, le <strong>Cross-Site Scripting (XSS)<\/strong>, et d&rsquo;autres qui peuvent compromettre la s\u00e9curit\u00e9 de vos applications.  <\/p>\n\n<h3 class=\"wp-block-heading\">Que sont les donn\u00e9es contamin\u00e9es ?<\/h3>\n\n<p>Dans le domaine de la s\u00e9curit\u00e9 logicielle, les <strong>donn\u00e9es contamin\u00e9es<\/strong> d\u00e9signent toute entr\u00e9e provenant d&rsquo;une source externe non fiable. Voici des exemples de telles sources : <\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>Entr\u00e9es utilisateur<\/strong> : Champs de formulaire, param\u00e8tres URL ou fichiers t\u00e9l\u00e9charg\u00e9s.<\/li>\n\n\n\n<li><strong>API externes<\/strong> : Donn\u00e9es provenant d&rsquo;un service tiers.<\/li>\n\n\n\n<li><strong>Variables d&rsquo;environnement<\/strong> : En particulier lorsque ces variables peuvent \u00eatre d\u00e9finies de mani\u00e8re externe.<\/li>\n<\/ul>\n\n<p>Les donn\u00e9es contamin\u00e9es sont dangereuses car elles peuvent contenir des charges utiles malveillantes destin\u00e9es \u00e0 exploiter les vuln\u00e9rabilit\u00e9s de votre application. Jusqu&rsquo;\u00e0 ce qu&rsquo;elles soient valid\u00e9es ou assainies, elles sont consid\u00e9r\u00e9es comme non fiables. <\/p>\n\n<p>Prenons l&rsquo;exemple suivant en Java :<\/p>\n\n<pre class=\"wp-block-code\"><code>String userInput = request.getParameter(\"username\");\nresponse.getWriter().println(\"&lt;h1&gt;Welcome, \" + userInput + \"&lt;\/h1&gt;\");<\/code><\/pre>\n\n<p>Dans ce cas, <code>userInput<\/code> est <strong>contamin\u00e9<\/strong> car il provient directement de l&rsquo;utilisateur et est ins\u00e9r\u00e9 dans la sortie HTML sans aucune d\u00e9sinfection. Si un attaquant soumet un script comme nom d&rsquo;utilisateur, il pourrait \u00eatre ex\u00e9cut\u00e9 dans le navigateur, entra\u00eenant une vuln\u00e9rabilit\u00e9 <strong>XSS<\/strong>. <\/p>\n\n<h3 class=\"wp-block-heading\">Pourquoi les donn\u00e9es contamin\u00e9es sont-elles dangereuses ?<\/h3>\n\n<p><strong>Les donn\u00e9es contamin\u00e9es deviennent un risque important lorsqu&rsquo;elles atteignent un \u00ab puits \u00bb sensible sans \u00eatre correctement trait\u00e9es.<\/strong> Un puits est toute partie du code o\u00f9 les donn\u00e9es contamin\u00e9es pourraient causer des dommages, comme \u00eatre utilis\u00e9es dans une requ\u00eate de base de donn\u00e9es, une r\u00e9ponse HTML, ou des op\u00e9rations sur le syst\u00e8me de fichiers.<\/p>\n\n<p>Voici quelques vuln\u00e9rabilit\u00e9s courantes associ\u00e9es aux donn\u00e9es contamin\u00e9es :<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>Injection SQL<\/strong> : Se produit lorsque les entr\u00e9es utilisateur sont concat\u00e9n\u00e9es dans une requ\u00eate SQL sans \u00e9chappement ou param\u00e9trage appropri\u00e9. Un attaquant pourrait injecter des commandes SQL malveillantes qui pourraient alt\u00e9rer votre base de donn\u00e9es de mani\u00e8re non intentionnelle. <\/li>\n<\/ul>\n\n<pre class=\"wp-block-code\"><code>  String query = \"SELECT * FROM users WHERE username = '\" + userInput + \"'\";\n  \/\/ This is vulnerable to SQL Injection if userInput contains malicious SQL code.<\/code><\/pre>\n\n<ul class=\"wp-block-list\">\n<li><strong>Cross-Site Scripting (XSS)<\/strong> : Se produit lorsqu&rsquo;une entr\u00e9e utilisateur non d\u00e9sinfect\u00e9e est directement refl\u00e9t\u00e9e dans la sortie de la page web. Cela permet aux attaquants d&rsquo;injecter et d&rsquo;ex\u00e9cuter du JavaScript dans le contexte d&rsquo;un autre utilisateur, potentiellement en volant leurs donn\u00e9es. <\/li>\n\n\n\n<li><strong>Travers\u00e9e de chemin<\/strong> : Les donn\u00e9es contamin\u00e9es utilis\u00e9es dans les chemins de fichiers pourraient permettre aux attaquants de naviguer en dehors des r\u00e9pertoires autoris\u00e9s, potentiellement en acc\u00e9dant \u00e0 des fichiers sensibles sur le serveur.<\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\">Comment g\u00e9rer efficacement les donn\u00e9es contamin\u00e9es<\/h3>\n\n<p>La meilleure fa\u00e7on d&rsquo;\u00e9viter les dangers des donn\u00e9es contamin\u00e9es est de mettre en \u0153uvre des mesures de s\u00e9curit\u00e9 \u00e0 chaque \u00e9tape du traitement des donn\u00e9es :<\/p>\n\n<ol class=\"wp-block-list\">\n<li><strong>Validation des entr\u00e9es<\/strong> : Validez les donn\u00e9es entrantes pour vous assurer qu&rsquo;elles correspondent aux formats et types attendus. Par exemple, si vous attendez une adresse e-mail, assurez-vous que l&rsquo;entr\u00e9e correspond \u00e0 un mod\u00e8le d&rsquo;e-mail valide. <\/li>\n<\/ol>\n\n<pre class=\"wp-block-code\"><code>   if (!userInput.matches(\"^&#91;a-zA-Z0-9._%+-]+@&#91;a-zA-Z0-9.-]+\\.&#91;a-zA-Z]{2,}$\")) {\n       throw new IllegalArgumentException(\"Invalid email address\");\n   }<\/code><\/pre>\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Assainissement et \u00e9chappement<\/strong> : Modifiez les donn\u00e9es pour vous assurer qu&rsquo;elles sont s\u00fbres avant qu&rsquo;elles n&rsquo;atteignent des points critiques de votre application. Pour les requ\u00eates SQL, utilisez toujours des <strong>requ\u00eates param\u00e9tr\u00e9es<\/strong> au lieu de la concat\u00e9nation de cha\u00eenes. <\/li>\n<\/ol>\n\n<pre class=\"wp-block-code\"><code>   String query = \"SELECT * FROM users WHERE username = ?\";\n   PreparedStatement stmt = connection.prepareStatement(query);\n   stmt.setString(1, userInput); \/\/ Parameterized to avoid SQL Injection<\/code><\/pre>\n\n<p>Pour la sortie HTML, utilisez des biblioth\u00e8ques qui \u00e9chappent automatiquement les caract\u00e8res HTML pour pr\u00e9venir le XSS.<\/p>\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Suivi de la contamination<\/strong> : Utilisez des outils d&rsquo;analyse statique comme <strong>CodeQL<\/strong> ou <strong>Fortify<\/strong> pour d\u00e9tecter automatiquement les flux de donn\u00e9es contamin\u00e9es. Ces outils peuvent identifier si des entr\u00e9es non fiables atteignent des puits sensibles sans assainissement ad\u00e9quat. <\/li>\n<\/ol>\n\n<h3 class=\"wp-block-heading\">Suivi de la contamination avec CodeQL<\/h3>\n\n<p>Le <strong>suivi de la contamination<\/strong> est une technique utilis\u00e9e par les outils d&rsquo;analyse statique pour d\u00e9terminer le flux de donn\u00e9es contamin\u00e9es \u00e0 travers votre base de code. Il vous aide \u00e0 comprendre si l&rsquo;entr\u00e9e de l&rsquo;utilisateur, qui est initialement contamin\u00e9e, atteint une zone sensible sans validation ou nettoyage appropri\u00e9. Cela aide \u00e0 pr\u00e9venir une vari\u00e9t\u00e9 de vuln\u00e9rabilit\u00e9s d&rsquo;injection.  <\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>Sources<\/strong> : Dans le contexte du suivi de la contamination, une <strong>source<\/strong> est tout point o\u00f9 des donn\u00e9es potentiellement contamin\u00e9es entrent dans votre syst\u00e8me, comme les entr\u00e9es utilisateur (<code>request.getParameter()<\/code> dans un servlet).<\/li>\n\n\n\n<li><strong>Puits<\/strong> : Un <strong>puits<\/strong> est tout endroit o\u00f9 l&rsquo;utilisation de donn\u00e9es contamin\u00e9es sans assainissement pourrait causer des dommages, comme une ex\u00e9cution SQL (<code>executeQuery()<\/code>) ou une r\u00e9ponse HTML.<\/li>\n\n\n\n<li><strong>Assainisseurs<\/strong> : Ce sont des points dans le code o\u00f9 les donn\u00e9es sont nettoy\u00e9es ou v\u00e9rifi\u00e9es avant une utilisation ult\u00e9rieure. L&rsquo;utilisation appropri\u00e9e d&rsquo;assainisseurs garantit que les donn\u00e9es contamin\u00e9es ne peuvent pas atteindre un puits et causer des vuln\u00e9rabilit\u00e9s. <\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\">Sc\u00e9nario d&rsquo;exemple : Injection SQL<\/h3>\n\n<p>Consid\u00e9rons un sc\u00e9nario o\u00f9 un d\u00e9veloppeur utilise une entr\u00e9e utilisateur pour construire une requ\u00eate :<\/p>\n\n<pre class=\"wp-block-code\"><code>String userInput = request.getParameter(\"id\");\nString query = \"SELECT * FROM users WHERE id = \" + userInput;<\/code><\/pre>\n\n<p>Dans ce cas, si <code>userInput<\/code> contient du code SQL malveillant (par exemple, <code>1 OR 1=1<\/code>), cela peut alt\u00e9rer la requ\u00eate et renvoyer des r\u00e9sultats non d\u00e9sir\u00e9s, ou pire, compromettre la base de donn\u00e9es.<\/p>\n\n<p>Pour rem\u00e9dier \u00e0 cela, on utilise des <strong>requ\u00eates param\u00e9tr\u00e9es<\/strong> :<\/p>\n\n<pre class=\"wp-block-code\"><code>String query = \"SELECT * FROM users WHERE id = ?\";\nPreparedStatement stmt = connection.prepareStatement(query);\nstmt.setString(1, userInput);<\/code><\/pre>\n\n<p>De cette mani\u00e8re, la base de donn\u00e9es traite <code>userInput<\/code> comme une valeur plut\u00f4t que comme une partie de la commande SQL, emp\u00eachant ainsi les attaques par injection.<\/p>\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n<p>Les donn\u00e9es contamin\u00e9es peuvent repr\u00e9senter des menaces de s\u00e9curit\u00e9 significatives si elles ne sont pas g\u00e9r\u00e9es correctement. En comprenant les risques associ\u00e9s aux donn\u00e9es contamin\u00e9es et en employant des techniques telles que la <strong>validation des entr\u00e9es<\/strong>, la <strong>d\u00e9sinfection<\/strong> et le <strong>suivi de contamination<\/strong>, vous pouvez construire des applications plus s\u00e9curis\u00e9es. <\/p>\n\n<p>Les outils de s\u00e9curit\u00e9 modernes comme <strong>CodeQL<\/strong> offrent des capacit\u00e9s avanc\u00e9es de suivi de contamination qui aident les d\u00e9veloppeurs \u00e0 identifier les vuln\u00e9rabilit\u00e9s dans le code source avant qu&rsquo;elles ne deviennent de v\u00e9ritables probl\u00e8mes. La mise en \u0153uvre de ces meilleures pratiques peut pr\u00e9server votre organisation d&rsquo;une large gamme de menaces de s\u00e9curit\u00e9 courantes, mais n\u00e9anmoins dangereuses. <\/p>\n\n<p><strong>Comment g\u00e9rez-vous les donn\u00e9es contamin\u00e9es dans vos projets ? Utilisez-vous des outils d&rsquo;analyse statique comme CodeQL ou Fortify pour suivre les flux de donn\u00e9es et s\u00e9curiser vos applications ? <\/strong> Discutons davantage de la s\u00e9curisation de nos bases de code et de la cr\u00e9ation d&rsquo;un web plus s\u00fbr.<\/p>\n\n<h1 class=\"wp-block-heading\">#S\u00e9curit\u00e9Informatique, #S\u00e9curit\u00e9DesApplications #InjectionSQL #XSS #Donn\u00e9esContamin\u00e9es #AnalyseStatique #CodeQL #S\u00e9curit\u00e9Logicielle #MeilleuresPratiques<\/h1>\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous \u00eates-vous d\u00e9j\u00e0 demand\u00e9 comment les entr\u00e9es non fiables peuvent devenir le talon d&rsquo;Achille de la s\u00e9curit\u00e9 de votre application ? Aujourd&rsquo;hui, nous [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3718,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[106],"tags":[116,120,117,114,118,112,113,119,115],"class_list":["post-3717","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-securite","tag-analysestatique","tag-bonnespratiques","tag-codeql-fr","tag-cybersecuritesecurite","tag-donneescontaminees","tag-injectionsql","tag-securitedesapplications","tag-securitelogicielle","tag-xss-fr"],"_links":{"self":[{"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/posts\/3717"}],"collection":[{"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/comments?post=3717"}],"version-history":[{"count":0,"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/posts\/3717\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/media\/3718"}],"wp:attachment":[{"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/media?parent=3717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/categories?post=3717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techhub.saworks.io\/fr\/wp-json\/wp\/v2\/tags?post=3717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}