J'ai regardé le code de la faille, ça n'a rien à voir avec de l'échappement. En mettant # à la place de ' ça marche aussi, et en laissant une chaîne vide ça marche également (à condition de désactiver javascript dans le navigateur).
Les requêtes SQL sont correctement échappées dans Joomla et les saisies de formulaires sont vérifiés.
Le problème est que le fameux code qui être saisi est normalement composé que de lettres et de chiffres. Joomla nettoie ce code en supprimant tout ce qui n'est pas lettre ou chiffre puis effectue un échappement.
Le déroulé de la faille est le suivant:
o saisie par exemple du token: ###{{}{}
o nettoyage par Joomla: le token devient une chaîne vide
o échappement par Joomla de la chaîne vide
o Le code SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token) devient SELECT id FROM jos_users WHERE block = 0 AND activation = ''
o La colonne activation de la table SQL est vide pour un utilisateur n'ayant pas demandé la réinitialisation de son mot de passe, d'où le bug et son code de correction.
Donc oui, la faille aurait du être évitée, mais ce n'est pas non plus aussi trivial que ça.
[^] # Re: Erf
Posté par mxt . En réponse au journal Faille de sécurité critique dans Joomla 1.5. Évalué à 7.
Les requêtes SQL sont correctement échappées dans Joomla et les saisies de formulaires sont vérifiés.
Le problème est que le fameux code qui être saisi est normalement composé que de lettres et de chiffres. Joomla nettoie ce code en supprimant tout ce qui n'est pas lettre ou chiffre puis effectue un échappement.
Le déroulé de la faille est le suivant:
o saisie par exemple du token: ###{{}{}
o nettoyage par Joomla: le token devient une chaîne vide
o échappement par Joomla de la chaîne vide
o Le code
SELECT id FROM #__users WHERE block = 0 AND activation = '.$db->Quote($token)devientSELECT id FROM jos_users WHERE block = 0 AND activation = ''o La colonne activation de la table SQL est vide pour un utilisateur n'ayant pas demandé la réinitialisation de son mot de passe, d'où le bug et son code de correction.
Donc oui, la faille aurait du être évitée, mais ce n'est pas non plus aussi trivial que ça.