Speaking on German public television, Interior Minister Joachim Herrmann said it was too early to speculate about the motives of the attacker, who he said was believed to have been living in a home for unaccompanied minors in Ochsenfurt, near the city of Wuerzburg.
The attack comes just days after a Tunisian delivery man ploughed a 19-tonne truck into crowds of Bastille Day revellers in the southern French city of Nice, killing 84.
It is likely to deepen worries about so-called “lone wolf” attacks in Europe and could put political pressure on German Chancellor Angela Merkel, who welcomed hundreds of thousands of migrants to Germany over the past year.
“The attacker appears to have been a 17-year-old Afghan who has been living in Ochsenfurt for some time,” Herrmann said. “He suddenly attacked passengers with a knife and an axe, critically injuring several. Some of them may now be fighting for their lives.”
Police spokesman Fabian Hench said four people had been severely wounded and a fourth slightly injured. Several others were treated for shock.
The attacker fled the train when it halted at a station on the outskirts of Wuerzburg. Herrmann said the man had tried to attack police when he was confronted and had been shot dead.
German media, citing a spokesman for the Bavarian interior ministry, reported that the man had shouted “Allahu Akbar” (God is great) during the attack, but neither Herrmann nor Hench said they could confirm that.
“There are witnesses that suggest there may be an Islamic background to this but that is far from clear at this point,” Herrmann said.
Unlike neighbours France and Belgium, Germany has not been the victim of a major attack by Islamic militants in recent years, although security officials say they have thwarted a large number of plots.
Germany welcomed roughly 1 million migrants in 2015, including thousands of unaccompanied minors. Many were fleeing war in countries like Syria, Iraq and Afghanistan.