Snow and ice on the brakes of a locomotive and the wagons it was pulling played a part in the train derailing, investigators have said.
The freight train's engine overshot a run-out, a short length of track designed to divert trains from Carrbridge station, in January 2010.
The engine and six bed wagons, which were carrying containers, derailed.
The Rail Accident Investigation Branch (RAIB) said deep snow left by engines' snowploughs may also have had a role.
In its newly-published accident report on the incident, the RAIB said two staff in the engine suffered minor injuries.
The derailment happened close to houses and saw the front of the engine crash into trees.
Investigators said the main cause of the derailment was that the train overshot a run-out, a short length of track designed to divert trains from Carrbridge station.
The RAIB added that a combination of factors had played a part.
They included snow and ice on the brakes and the way the driver applied them before descending towards Carrbridge.
Snowploughs used by other engines travelling the Perth to Inverness line had also left accumulations of deep snow close to the tracks.
This snow may also have got into the brakes, the RAIB said.
In the weeks following the derailment, the branch said another freight train had braking problems on the same stretch of line.
The investigation does not apportion blame, but the RAIB has made four recommendations.
They include Network Rail re-assessing the risks to trains at gradients during snowy conditions.