The witness, identified only as 21-year-old Dino K., told the 20 Minuten daily's website he had suddenly heard a commotion and looked up.
“There was smoke everywhere, and I saw a young woman burning. She was burning from head to toe, like a torch,” he said.
He described pulling out his water bottle to help another passenger put out the flames, before seeing more victims.
“A woman was lying on the ground with stab wounds to the stomach. There was blood everywhere,” he said, adding that he had also seen a young girl with burn injuries to her face.
He said he kept reliving the sight of the burning woman and injured child.
“I keep asking myself if I did enough to help,” he said.
The assailant, a 27-year-old Swiss national, used flammable liquid to start the fire on a moving train in eastern Switzerland at about 2:20 pm (1220 GMT) on Saturday before stabbing passengers.
The incident took place on the line between Buchs and Sennwald near Salez station, not far from the eastern border with Liechtenstein and Austria.
Police said images of the attack had been caught on surveillance footage, allowing them to determine that the man had acted alone.
The footage, which was not immediately made public, showed the man, who was carrying a knife, pouring out flammable liquid and setting it alight, police said.
Pictures published by Swiss media showed a pool of dried blood on a station platform as well as burned-out train seats by a blackened window.
A 34-year-old woman and the assailant died in hospital on Sunday, police said.
The injured, who included two men aged 17 and 50, two women aged 17 and 43 and a six-year-old girl, suffered burns and stab wounds. The younger women and the child were in serious condition, police said.
One of the women had been doused with a large amount of the flammable liquid, leading to speculation she might have been the target.
But police spokesman Hanspeter Kruesi told AFP it did not appear the attack was directed at a single person.
He said it was unclear if the attacker, who did not have a criminal record, knew any of the victims.
One of those injured was not a passenger, but a man on the platform at Salez station, where the train stopped when the smoke detector went off.
He was hurt after rushing in to pull the attacker — who was on fire — from the train, police said.
“His intervention probably prevented worse,” Kruesi told the Blick daily.
Police did not provide any details on the identities or nationalities of the victims.
They were unable to question the attacker before his death but have searched his home, located in a canton neighbouring Saint Gallen.
Some 90 rescue workers took part in Saturday's operation, including police, firefighters, ambulances and three rescue helicopters, police said.
Saint Gallen prosecutors have opened a criminal investigation into the attack and sealed off the affected carriage, which is being examined by forensics teams.
“The question of motive remains,” Saint Gallen police said in a statement. “To date there is no indication this was a terrorist or politically-motivated act.”
At the moment police said they had no further information to release.
Speaking to news agency ATS, a spokesman for Swiss federal railways (SBB) said the company was shattered by the event, and that they were continually analyzing the security situation with cantonal and federal authorities.