Faille et vulnérabilité DNS
La faille d'envergure[1][2], découverte par Dan Kaminsky en juillet 2008 et qui a entrainé une série de correctifs pour la grande majorité des serveurs DNS existants n'est pas à prendre à la légère, puisque les impacts potentiels sont importants : En ayant la capacité de corrompre les entrées (le cache) des serveurs DNS, c'est une des clés de voute du SI qui est attaquée.
L'exploitation de cette vulnérabilité ne posant pas de réelle difficulté si le serveur n'est pas patché, il est indispensable de mettre à jour les serveurs DNS, la plupart étant affectés. Cette mise à jour est d'autant plus critique si vous hébergez des serveurs ouverts et permettant d'effectuer des requêtes récursives.
Si votre serveur DNS venait à être corrompu, c'est toutes vos requêtes vers l'extérieur (et vers vous dans une certaine mesure) qui peuvent être interceptées, puisque l'attaquant aura la possibilité de rediriger les internautes de manière totalement transparente vers le site de son choix. Un tel contexte est un catalyseur très important pour les attaques de type phishing, installation de malwares (via les mises à jour automatiques), et aussi Man In The Middle (donc interception de mails entrants/sortants, des connexions vers l'extérieur etc.).
Il faut garder à l'esprit que le correctif n'élimine pas le risque à 100%, mais vise plutôt à rendre l'attaque beaucoup plus difficilement réalisable, en effet on passe de 32,769 paquets nécessaires pour réussir l'attaque à un nombre de tentatives nécessaires compris entre 134,217,728 et 4,294,967,296. Un tel niveau est très raisonnable en sécurité, le risque est réellement minimisé. "
Protection contre le SQL Injection
Les SQL Injection sont parmi les failles les plus répandus et dangereux en PHP.
Ce tutorial va expliquer clairement le concept de SQL Injection et comment les éviter, une fois pour toutes.
Il existe deux types d'injection SQL:
- L'injection dans les variables qui contiennent des chaînes.
- L'injection dans les variables numériques.
Ce sont deux types très différents et à éviter, il agira différemment pour chacun de ces types.
Les variables qui contiennent des chaînes :
Imaginez qu'un script PHP qui récupère l'âge d'un membre conformément à son
surnom. Ce surnom est parti d'une page à l'autre via l'URL
(en $ _GET). Ce script devrait ressembler à ceci :
1 |
$ pseudo = $ _GET [ 'pseudo']; |
Ce script est une grande vulnérabilité par injection SQL. Il suffit qu'une personne malveillante en mettant en place le nom d'utilisateur dans l'URL d'une requête comme ceci :
1 |
'Password UNION SELECT FROM membres WHERE id = 1
|
Ceci est juste une demonstration, par exemple le mot de passe le membre ayant l'ID 1.
02.La sécurité
Pour sécuriser ce type d'injection est simple. Vous utilisez la fonction mysql_real_escape_string ().
What is ? Cette fonction ajoute le caractère "\" pour les caractères suivants :
1 |
NULL, \ x00, \ n, \ r, \, ', "et \ X1A
|
Comme vous l'avez remarqué dans l'injection précédente, le pirate utilise la citation (pour fermer la 'Around $ nick): si elle est empêchée de le faire, le pirate iras voir ailleurs. Cela signifie que si l'on applique un mysql_real_escape_string () pour le nom de variable comme ça ...
1 |
$ pseudo = mysql_real_escape_string ($ _GET [ 'pseudo']); |
L'application est entièrement sécurisé.
Explication
1 |
'Password UNION SELECT FROM membres WHERE id = 1
|
Eh bien, si nous appliquons mysql_real_escape_string () à la variable $ nom utilisé dans la requête est ce qui va de l'injection :
1 |
\ 'Union de passe Sélectionnez membres WHERE id = 1
|
Cela signifie que nous ne viennent pas même en dehors des quotes autour de $ nick dans la requête car la \ a été ajoutée. Il existe une autre fonction quelque peu semblable à mysql_real_escape_string () est addslashes (), pourquoi ne pas avoir utilisé ? Eh bien récemment, une faille de sécurité a été découvert à ce sujet si il est utilisé sur une installation de PHP 4.3.9 avec magic_quotes_gpc est activé.
Variables numériques:
Ce type d'injection est moins connue que la précédente, ce qui en fait plus fréquentes, et il commence comme tout à l'heure avec un exemple. Cette fois, c'est affichage de l'âge d'un membre en fonction de son id, et en le faisant passer par un formulaire ($ _POST) à changer:
$ id = $ _POST [ 'id'];
$ requete = mysql_query ( "SELECT age FROM membres WHERE id = $ id");
exploitation :
1 |
2 UNION DE passe Sélectionnez membres WHERE id = 1
|
Cette injection fait exactement la même que la précédente, sauf qu'ici, pour l'éviter, il y a deux solutions:
- Changer le contenu de la variable si elle contient uniquement des chiffres
- Vérifiez si la variable contient en réalité un certain nombre avant de l'utiliser dans une requête.
Méthode 1:
Nous allons utiliser une fonction intval () Cette fonction retourne quel que soit le contenu d'une variable sa valeur numérique. Par exemple:
1 |
e10 variable = '1 '; / / $ variable vaut '1 e10' |
1 |
$ id = intval ($ _POST [ 'id']); |
Cela signifie que vous pouvez y passer est plus que suffisante, mais je vous recommande decontinuer à trouver une autre méthode, ou si vous avez l'air bête si vous trouvez cetteméthode sur un code qui n'est pas le vôtre sans le comprendre.
Méthode 2 :
Ici, nous utilisons une fonction qui renvoie TRUE si une variable ne contient quenombres et FALSE si elle n'est pas le cas cette fonction is_numeric (),nous allons l'utiliser dans une condition qui vérifie si la fonction is_numeric () retourne TRUE bien
$ id = $ _POST [ 'id'];
if (is_numeric ($ id))
(
$ requete = mysql_query ( "SELECT age FROM membres WHERE id = $ id");
)
autre
(
echo "Essayer de me hack ?";
Quelle est la meilleure, en fonction entre intval () et is_numeric () ?
Les deux sont tout aussi efficaces, mais je conseil inval () car avec la fonction is_numeric () écrire plus de code, et si la variable ne contient pas seulement des chiffres, la demande est annulée (en principe, mais bien sûr vous pouvez exécuter la même requête en choisissant une Valeur par défaut de la variable utilisée). Well that's it!
Vous savez tout pour sécuriser vos applications.
Si vous appliquez ces méthodes, il y a absolument aucun risque d'avoir un type de faille d'injection SQL sur son site web (ou PHP).
Exclu : vulnérabilité Injection de paramétre SQL du composant 'com_mailto' de Joomla
Aucune solution pour le moment a pars desactiver la fonctionalité envoyer par mail.
Vous trouverez ci-dessous la liste des versions de joomla concernées y compris la derniére sortie récement
Joomla Joomla 1.5.10
Joomla Joomla 1.5.9
Joomla Joomla 1.5.8
Joomla Joomla 1.5.7
Joomla Joomla 1.5.6
Joomla Joomla 1.5.5
Joomla Joomla 1.5.4
Joomla Joomla 1.5.3
Joomla Joomla 1.5.2
Joomla Joomla 1.5.1
Joomla Joomla 1.5
Joomla Joomla 1.0.15
Joomla Joomla 1.0.14
Joomla Joomla 1.0.13
Joomla Joomla 1.0.12
Joomla Joomla 1.0.12
Joomla Joomla 1.0.11
Joomla Joomla 1.0.10
Joomla Joomla 1.0.9
Joomla Joomla 1.0.8
Joomla Joomla 1.0.7
Joomla Joomla 1.0.4
Joomla Joomla 1.0.3
Joomla Joomla 1.0.2
Joomla Joomla 1.0.1
Joomla Joomla 1.0
Joomla Joomla 1.5.0 Beta
Joomla Joomla 1.5 RC3
Joomla Joomla 1.5 RC2
Joomla Joomla 1.5 RC1
Joomla Joomla 1.5 Beta 2
Joomla Joomla 1.0.15 RC4
Qu'est-ce que le cross site scripting ?
Le cross site scripting, abrégé XSS, est un type de faille de sécurité des sites Web, que l'on trouve typiquement dans les applications Web qui peuvent être utilisées par un attaquant pour faire afficher des pages web contenant du code douteux. Il est abrégé XSS pour ne pas être confondu avec le CSS (feuilles de style), X étant une abréviation commune pour « cross » (croix) en anglais.
Une démo très pédagogique, simple et en images (une animation flash très jolie en fait) en dessous. La faille illustrée correspond apparemment au second type de faille XSS décrit sous Wikipedia.
Principe :
Le principe est d'injecter des données arbitraires dans un site web, par exemple en déposant un message dans un forum, mais aussi par des paramètres d'URL, etc. Si ces données arrivent telles quelles dans la page web transmise au navigateur (par les paramètres d'URL, un message posté, etc.) sans avoir été vérifiées, alors il existe une faille : on peut s'en servir pour faire exécuter du code malveillant en langage de script (du JavaScript le plus souvent) par le navigateur web qui consulte cette page.Les risques
L'exploitation d'une faille de type XSS permettrait à un intrus de réaliser les opérations suivantes :* Affichage d'un contenu non interne au site (publicité, faux article)
* Redirection (parfois de manière transparente) de l'utilisateur.
* Vol d'informations, par exemple sessions et cookies.
* Actions sur le site faillible, à l'insu de la victime et sous son identité (envois de messages, suppression de données, etc.)
* Plantage de la page (boucle infinie d'alertes par exemple), et souvent du navigateur.
Une faille de type XSS est à l'origine de la propagation des virus Samy[3] sur MySpace en 2005 ainsi que de Yamanner sur Yahoo!Mail en 2006.
Types de failles XSS
Il y a trois types de failles XSSPremier type
Ce type de faille XSS, qui est dit « basé sur DOM » ou « local », est connu de longue date. Un article récent (DOM-Based cross-site scripting) définit bien ses caractéristiques. Dans ce cas de figure, le problème est dans le script d'une page côté client. Par exemple, si un fragment de JavaScript accède à un paramètre d'une requête d'URL, et utilise cette information pour écrire du HTML dans sa propre page, et que cette information n'est pas encodée sous forme d'entités HTML, alors il y a probablement un trou XSS, puis les données écrites seront réinterprétées par le navigateur comme du HTML contenant éventuellement un script ajouté.En pratique la manière d'exploiter une telle faille sera similaire au type suivant, sauf dans une situation très importante. À cause de la manière dont Internet Explorer traite les scripts côté client dans des objets situés dans la « zone locale » (par exemple le disque dur local du client), une faille de ce type peut conduire à des vulnérabilités d'exécution à distance. Par exemple, si un attaquant héberge un site web « malicieux » contenant un lien vers une page vulnérable sur le système local du client, un script peut être injecté et tournera avec les droits du navigateur web de l'utilisateur sur ce système. Ceci contourne complètement le « bac à sable », pas seulement les restrictions inter-domaines qui sont normalement contournées par les XSS.
Second type
Ce type de trou de sécurité, qu'on peut qualifier de « non permanent », est de loin le plus commun.Il apparaît lorsque des données fournies par un client web sont utilisées telles quelles par les scripts du serveur pour produire une page de résultats. Si les données non vérifiées sont incluses dans la page de résultat sans encodage des entités HTML, elles pourront être utilisées pour injecter du code dans la page dynamique reçue par le navigateur client.
Un exemple classique dans les moteurs de recherche des sites : si l'on recherche une chaîne qui contient des caractères spéciaux HTML, souvent la chaîne recherchée sera affichée sur la page de résultat pour rappeler ce qui était cherché, ou dans une boîte de texte pour la réédition de cette chaîne. Si la chaîne affichée n'est pas encodée, il y a une faille XSS.
À première vue, ce n'est pas un problème grave parce que l'utilisateur peut seulement injecter du code dans ses propres pages. Cependant, avec un peu d'ingénierie sociale, un attaquant peut convaincre un utilisateur de suivre une URL piégée qui injecte du code dans la page de résultat, ce qui donne à l'attaquant tout contrôle sur le contenu de cette page. L'ingénierie sociale étant requise pour l'exploitation de ce type de faille (et du précédent), beaucoup de programmeurs ont considéré que ces trous n'étaient pas très importants. Cette erreur est souvent généralisée aux failles XSS en général.
Troisième type
Ce type de vulnérabilité, aussi appelé faille permanente ou du second ordre permet des attaques puissantes. Elle se produit quand les données fournies par un utilisateur sont stockées sur un serveur (dans une base de données, des fichiers, ou autre), et ensuite réaffichées sans que les caractères spéciaux HTML aient été encodés.Un exemple classique est celui des forums, où les utilisateurs peuvent poster des textes formatés avec des balises HTML. Ces failles sont plus importantes que celles d'autres types, parce qu'un attaquant peut se contenter d'injecter un script une seule fois et atteindre un grand nombre de victimes sans recourir à l'ingénierie sociale.
Il y a diverses méthodes d'injection, qui ne nécessitent pas forcément que l'attaquant utilise l'application web elle-même. Toutes les données reçues par l'application web (par email, journaux, etc.) qui peuvent être envoyées par un attaquant doivent être encodées avant leur présentation sur une page dynamique, faute de quoi une faille XSS existe.
Eric Seguinard d'aprés l'article wikipedia
Page 1 sur 2
Documentations


