The veteran forward capitalised on a superb team move midway through the second half to give the hosts all three points against Clarence Seedorf's men
The veteran striker, who looks set to call time on his playing career at the end of the season, produced the winner to help Francesco Guidolin's men to their first win in a month and second over the Rossoneri since Clarence Seedorf's appointment as coach in January.
After a goalless first half, Di Natale scored the opening goal of the game after 67 minutes when he handed Udinese a deserved lead.
The 36-year-old found the net for the ninth time in Serie A this season after a slick break involving Roberto Pereyra and Bruno Fernandes.
Despite the return of leading goalscorer Mario Balotelli from a shoulder injury, it was Di Natale to condemn Milan to back-to-back defeats ahead of Tuesday's Champions League clash with Atletico Madrid.
Udinese made the early running - Pereyra forcing Abbiati into a save down to his left after three minutes with none of his team-mates able to follow in on the rebound.
Giampaolo Pazzini, starting ahead of the fit-again Balotelli, then went close with two headers following deliveries from Mattia De Sciglio, though neither tested Simone Scuffet in the Udinese goal.
Without the likes of Kaka and Adel Taarabt, Milan struggled to create opportunities in the final third, with the duo of Keisuke Honda and Robinho playing behind Pazzini.
It was the hosts who went close next, with Di Natale's effort from range veering just wide of the Milan goal.
Cristian Zapata inexplicably headed well over from a corner shortly after the half-hour mark before Pazzini's volley was well saved by Scuffet as Milan began to crank up the pressure.
Their play failed to yield a breakthrough before the interval and the visitors were penned back in their half during the opening minutes of the second half.
Silvan Widmer caused problems down the Udinese right with Seedorf opting to introduce Balotelli just after the hour mark in an attempt to break the deadlock.
However, it was the hosts' front man who opened the scoring as Di Natale again proved a thorn in the side for the visitors - applying the finishing touch to a sweeping passing move to register his 12th league goal against Milan.
Milan failed to muster any late attempts on Scuffet's goal as Udinese moved further clear of the drop zone while Seedorf's side could slip further in Serie A when the majority of the league play on Sunday.