The one (free) extension I have used to do this was:
The one main feature is:
In addition it can optionally change the product's image, associated image gallery, name and description to match the associated product when a user has made their selection of a product's configurable options. (so if a user has chosen a silver phone they can see it in silver before they buy it)
However, this would force use to use configurable products that link to simple products (the simple products would have a picture set to them so it knows what to change).
There are a few paid modules that do it more elegantly, however you just wanted a free extension reference.