The Rossoneri self destructed in Udine, finishing with nine men and falling to the Italy star's winner from the spot, increasing the pressure on coach Massimilano Allegri.
Mathias Ranegie had given the hosts the lead before a stunning Stephan El Shaarawy strike levelled matters, but Zapata saw red and Di Natale converted the spot kick to leave Milan manager Massimiliano Allegri facing increasing scrutiny.
The first half looked like ending in a stalemate, until Ranegie rose highest in the Milan penalty area to nod home unchallenged and put the hosts a goal to the good.
Di Natale wasted another chance for the Fruili in the second half, while the 19-year-old El Shaarawy continued to pose the greatest danger for Allegri's side before levelling matters 10 minutes in. Following some solid play by Boateng, Giampaolo Pazzini laid the ball off to El Shaarawy, who lashed the ball home from well outside the box. It was his his third goal in Serie A and, coincidentally, his third against the Zebrette.
Despite the goal, Milan was unable to gain control of the match as Udinese continued to look the more comfortable of the teams. Just after the hour mark, drama ensued when Zapata, making a return to his former club, was sent off for a second bookable offense, conceding a penalty in the process and one that Di Natale buried.
Matters soon worsened for Allegri and his under-performing side when Boateng, only on as a second half substitute, received his marching orders following a second yellow card.
Down to nine men, Milan was left with a mountain to club and despite the need to at least try and steal a point, it was the home side that looked like extending their lead as Allegri's men struggled with the numerical disadvantage. Udinese was able to comfortably see out the match, and for Milan, its crisis continues, and Allegri's position at the club will now be seriously called into question.