Matthijs de Ligt gave Juve lift-off, breaking the deadlock three minutes before the interval with a powerful low effort from 25 yards to score his fourth goal of the season.
But the relegation-threatened hosts found their deserved equaliser in style seven minutes after the restart through Iljia Nestorovski's bullet header from a delightful Ken Sema cross.
It was no less than Udinese deserved, as they were denied by the woodwork early on, with Danilo's attempted headed clearance crashing off his own post. They also had a strong case for a penalty waved away as Rodrigo De Paul went tumbling inside the box under pressure from Aaron Ramsey.
And the winner eventually came late on when Seko Fofana netted in the second minute of stoppage-time, nut-megging De Ligt before sliding it under Wojciech Szczesny, as Juve fell to a fifth defeat of the campaign.
Once again Sarri's men failed to meet the high standards demanded by the Old Lady, but they will clinch their 36th league title at the weekend without kicking a ball if Atalanta and Inter lose. Failing that, a victory over Sampdoria on Sunday would guarantee the crown.
TALKING POINT - More questions for Sarri to answer
Juventus have now won just one of their last five games, in a concerning run of form in which they have squandered maximum points from a winning position on three occasions - hardly the hallmarks of champions. This was the latest gaffe, another fine example of the deep-rooted problems that exist under Sarri. Their 36th Scudetto is inevitable - but the speculation over Sarri's future at the club is not going to disappear. Indeed, had Lazio - who were only one point behind Juve before football was suspended in March - shown any consistency, the rug could have been pulled from under Sarri's feet long before his contract is up.
MAN OF THE MATCH - Seko Fofana (Udinese)
The Ivory Coast international encapsulated Udinese's determination with a real show of steel and desire in midfield, and fully deserved the match-winning goal.
Udinese: Musso 7, Becao 7, Nuytinck 7, Ekong 7, Ter Avest 7, Fofana 9, De Paul 7, Sema 8, Zeegelar 7, Okaka 7, Nestorovski 8.. subs: Samir N/A, Larsen 5, Maio 5.
Juventus: Szczesny 6; Danilo 5, Rugani 5, de Ligt 6, Alex Sandro 5, Ramsey 4, Bentancur 5, Rabiot 6, Bernardeschi 4, Dybala 6, Ronaldo 5.. subs: Matuidi 5, Cuadrado 5, Douglas Costa 5.
8' - Off the post! Udinese go agonisingly close to opening the scoring! Semo delivers a devilish cross into the area and Danilo almost puts the ball into his own net as his attempted headed clearance crashes off the woodwork.
35' - No penalty! Ramsey throws out a leg and De Paul goes tumbling inside the penalty area. The referee allows play to continue as Sema shoots straight at Szczesny. Was that a penalty? You have seen them given...
42' - GOAL! Udinese 0-1 Juventus (de Ligt): Oh, that is special! de Ligt takes a lovely first touch to get the ball out of his feet as Udinese fail to clear their lines and with his second he fires it low and hard into the bottom corner. Koeman-esque.
52' - GOAL! Udinese 1-1 Juventus (Nestorovski): Oh, what have we here?! An equaliser! Nestorovksi levels the score and Juve have work to do if they want to land the title tonight! Sema stands up a delicious cross from the left and Nestorovski's bullet header leaves Szczesny helpless. Stunning goal.
90'+2 - GOAL! Udinese 2-1 Juventus (Fofana): OH MY! Juventus are stunned. Udinese haven't beaten Juve in a decade - but Seko Fofana throws a huge spanner in the works with a late, late goal. Fofana shows great strength to hold off de Ligt and co before coolly place it under Szczesny.
Juventus have dropped 18 points from winning positions in Serie A this season - their worst record in the last nine years in the competition.
Matthijs de Ligt is the youngest defender with four or more goals scored in the top-five European Leagues this season.