The former Italy international struck the only goal of the game midway through the second half to lift the Zebrette 10 points clear of the drop zone, and to within four points of the Rossoneri, who have now lost two in a row.
Clarence Seedorf's men could fall as much as nine points adrift of the top five this weekend following the 1-0 loss, putting them under increased pressure to reach the quarter-finals of the Champions League when they face Atletico Madrid on Tuesday night.
Milan need to overturn a 1-0 deficit in Spain if they are to continue in Europe.
There was encouragement from their performance against Juventus last weekend, if not from the result - a 2-0 defeat.
There was enough encouragement from the way they started at the Stadio Friuli too, with Giampaolo Pazzini sending a shot over the crossbar early on.
He wasted an even better chance 10 minutes later when Simone Scuffet missed a cross from De Sciglio, but the Italian forward used his hands and still managed to miss the target.
Former Udinese defender Cristian Zapata wasted an even better chance after half an hour when he headed over Keisuke Honda's cross at the far post before Scuffet made a fine save to deny Pazzini.
Di Natale was Udinese's one and only threat, but his shot was deflected wide by Philippe Mexes just before the interval.
A mistake by Mexes was nearly punished by Di Natale as the hosts started to probe more in the second half.
Midway through, they got their reward with a fine team move finally slicing through the Milan defence.
Robert Pereyra's committed run forwards created room for him to slot the ball through to Bruno Fernandes, whose immediate one-touch cross invited Di Natale to score from six yards out.
Allan and Luis Muriel both wasted good chances to add a second, but it was not necessary as Udinese, after beating Milan in the Coppa Italia, also defeated them in the league to take a decisive step away from the relegation zone.