The two sides drew 2-2 after 120 minutes with Italy creating the majority of the chances.
Davide Astori put the Italians ahead after 25 minutes before Edinson Cavani levelled the scores after the interval.
Alessandro Diamanti restored the Italians’ lead after 73 minutes, before Cavani netted again to make the score 2-2 and take the game into extra-time, where Riccardo Montolivo saw red after picking up two bookings.
Then Buffon came into his own, saving from Diego Forlan, Martin Caceres and Walter Gargano to win the game for Italy.
Uruguay started the game strongly but it was Italy who struck first.
A Diamanti free-kick ricocheted off the post and onto Uruguay stopper Fernando Muslera, with the ball falling to Astori, who from a yard out, tapped home.
Uruguay fought back and the pressure told 12 minutes after the restart when a well-weighted pass from Alvaro Gonzalez found an unmarked Cavani who slotted into the far corner.
Diamanti restored Italy’s lead with 17 minutes left with a wonderful 25 yard free-kick which gave Muslera no chance.
It was feat replicated by Cavani three minutes later as his powerful effort was too much for Buffon.
Italy had to play the final 10 minutes of extra-time with 10 men following Montolivo’s second yellow for a late challenge on Luiz Suarez, but Uruguay could not get past Buffon.
And Forlan could not do so with his spot kick, while Alberto Aquilani, Cavani, Stephan El Shaarawy, Suarez all scored before Mattia De Sciglio’s miss brought the South Americans back into the shoot-out.
However Caceres missed and Emanuele Giaccherini scored before Buffon saved Gargano’s effort.
URUGUAY: Muslera, Caceres, Lugano, Maxi Pereira (Pereira 81), Godin, Gargano, Rodriguez (Gonzalez 56), Arevalo Rios (Perez 106), Forlan, Suarez, Cavani.
ITALY: Buffon, Maggio, Chiellini, Astori (Bonucci 96), De Sciglio, Candreva, De Rossi (Aquilani 70), Montolivo, Diamanti (Giaccherini 82),Gilardino, El Shaarawy.
Referee: Djamel Haimoudi (Algeria).