fix: sanitiser les paramètres shell dans l'API TTS#3261
fix: sanitiser les paramètres shell dans l'API TTS#3261kwizer15 wants to merge 2 commits intojeedom:developfrom
Conversation
57c8c86 to
7a559a9
Compare
Sanitiser les paramètres text, voice, volume et lang injectés dans shell_exec() via escapeshellarg(), floatval() et validation regex. Extraire la construction des commandes shell dans des fonctions testables (tts.func.php) et ajouter les tests unitaires associés.
7a559a9 to
949c8e3
Compare
Mips2648
left a comment
There was a problem hiding this comment.
Je comprend l'idée du fichier de fonction séparé pour avoir les unit test dessus etc ... mais les units tests ne sont pas encore en place (perso j'aimerais mais il faut encore valider et encadrer ça avec l'équipe)
du coup dans l'immédiat, cette PR ne pourra pas être approuvée car ca à l'air de beaucoup de beaucoup de changements pour "juste" un fix
Hors je souhaite la poussée pour validation pour que le problème soit déjà fixé
Pourrais-tu modifier pour uniquement fixer (déplacer les fonctions dans l'api pour l'instant p-e?)
et on fera du refacto le jour où on peut lancer une initiative pour mettre en place les unit test
merci
|
Ok je voulais juste m'assurer que ca passait (les tests tournent chez moi). |
Description
En relisant
core/api/tts.php, j'ai remarqué que les paramètrestext,voice,volumeetlang(issus deinit()) sont injectés directement dans les commandesshell_exec()sans aucun échappement. Un attaquant disposant d'une clé API TTS valide peut exploiter ça pour exécuter des commandes arbitraires sur le serveur.Exemple concret : un appel avec
text=foo" ; rm -rf / ; echo "casse le guillemet de la commande espeak/pico2wave et injecte du code shell.Corrections apportées
$voice: protégé parescapeshellarg()$text: protégé parescapeshellarg()dans les deux commandes (espeak et pico2wave)$filenameet$md5.wav: protégés parescapeshellarg()(chemins de fichiers)$volume: forcé enfloatval()pour garantir une valeur numérique$lang: validé par regex (/^[a-zA-Z]{2}(-[a-zA-Z]{2,3})?$/) avec fallback surfr-FRSuggested changelog entry
core/api/tts.php)Related issues/external references
Fixes #
Types of changes
PR checklist