Inter striker Diego Milito equalized in the 86th minute after Andriy Shevchenko had give Dynamo Kiev the lead in the 21st. But Wesley Sneijder pounced on a goalkeeping error to hit the winning goal in the 89th.
Inter leads with six points, one more than Rubin Kazan and defending champion Barcelona, which drew 1-1 on Wednesday. Dynamo Kiev is last with four points.
Inter was outplayed for long periods in freezing conditions by the Ukrainian champions, who will be disappointed not to have at least held on for a draw.
The first chance of the game fell in the second minute to Sneijder, who sent his shot over the crossbar from just outside the box. But Dynamo soon started to dominate possession, and Shevchenko drove home from 20 meters (yards) after Artem Milevskiy had chested down a throw-in.
Inter struggled to create chances, but could have drawn level in the 35th minute when Milito played a one-two with Samuel Eto’o before shooting straight at the goalkeeper.
However, it was still Dynamo which was looking more dangerous without finding the final pass.
Inter manager Jose Mourinho made two substitutions in halftime, putting in striker Mario Balotelli for defender Cristian Chivu and Thiago Motta for Esteban Cambiasso.
Inter came out with more energy at the start of the second half, but still failed to properly test goalkeeper Stanislav Bogush despite having plenty of possession.
The Ukrainians looked threatening on the break, with Milos Ninkovic shooting into the side-netting in the 61st after good work in the air by Shevchenko.
Inter striker Samuel Eto’o almost leveled in the 64th when his header hit the bottom of the post with the goalkeeper beaten. The Italians were now pressing hard, hitting the same post again three minutes later from a free kick.
Inter’s Balotelli flicked the ball passed the onrushing Bogush but wide when clear on goal in the 69th.
Mourinho was pleased with his team’s second-half performance.
“With the changes in the second half we risked everything,” Mourinho said. “When the team keeps missing chances, it is easy to be disappointed. But we got better every minute, and after first goal we all felt that could win.”
Milito finally got the goal, sending the goalkeeper the wrong way with a left-footed shot when the ball fell to him in the box.
Sneijder scored the winner after substitute Sulley Muntari’s long-range shot squirmed under Bogush, who parried the follow-up shot before Sneijder slammed the ball into the empty net from close range.
Dynamo coach Valery Gazzayev was disappointed with his team’s defensive lapses.
“We shouldn’t make such mistakes. You can have great tactics, but then let in two easy goals,” Gazzayev said. “We’ve got two more games, it’s going to be tough now, but we’ll give it our best.”
Inter next plats at Barcelona on Nov. 24, when Dynamo travels to Kazan.