You should probably do it on the character movement component, using your own custom class that extends GetMaxSpeed()
That way you can do any processing that you want, like detect root/immobilize effects for example through tags
You just have to get the ability system of your character and fetch the appropriate data