It was Italy's second consecutive bonus-point win and takes them top of Pool A.
Uruguay deservedly led 17-7 at the break and were dreaming of a huge upset after a remarkable opening 40 minutes that began well for Italy, who scored an early try through Lorenzo Pani, but then went badly wrong as poor discipline handed the advantage to the South Americans.
After a penalty try and yellow cards for Niccolo Cannone and Danilo Fischetti, wing Nicolas Freitas, who scored in last week's 27-12 defeat by France, squeezed in for a second try and first-five Felipe Etcheverry landed a drop goal for a shock lead.
But just when they had to hold their nerve at the start of the second period, Uruguay lost captain Andres Vilaseca to a yellow card and Italy took full advantage, running in four tries in 15 minutes to swing the contest their way.
Flanker Michele Lamaro, wing Monty Ioane, number eight Lorenzo Cannone and centre Juan Ignacio Brex all crossed in the second half for the Italians, who top Pool A with 10 points but are still to play New Zealand and hosts France in much tougher assignments.
It is the first time Italy have won four tests in a row since 1994 and they scored first at the Stade de Nice when Pani was awarded a try despite the lightest of downward pressure on the ball as he lost control.
But a horror two minutes turned the tide in Uruguay's favour as Italy lost lock Niccolo Cannone to a yellow card for cynically playing the ball on the ground, before referee Angus Gardner awarded a penalty-try and sent prop Fischetti to the sin-bin for collapsing a driving maul.
Uruguay profited from their two-man advantage with a second try after Freitas crossed in the corner and with a 10-point advantage and the momentum in their favour, looked on course for a famous win.
They needed to ride out the expected Italian pressure in the second period but lost Vilaseca to the sin-bin when he was too upright in a tackle on Pani and his shoulder glanced the winger's head.
After having a try dubiously disallowed for no grounding, Italy inevitably broke through the Uruguay defence as they moved their tiring opponents from one side of the pitch to the other, before captain Lamaro barged his way over.
Italy hit the front with Vilaseca still off the pitch as Ioane crossed under the posts, before further scores for Lorenzo Cannone and Brex made sure of the win.