The hosts could have taken the lead as early as the 10th minute had Fabrizio Miccoli's shot been on target.
Miccoli tested Milan goalkeeper Marco Amelia with a free kick from 30 yards eight minutes later, before Palermo custodian Samir Ujkani was forced to intercept a dangerous Kevin Constant cross on the half-hour mark.
Miccoli went close again in the 34th minute with a free kick that went just wide of the post.
Palermo eventually went ahead in the first minute of injury time when they earned a penalty after Ignazio Abate handled the ball inside the Milan penalty area.
Miccoli stepped up to take the spot kick and made no mistake from 12 yards.
Two minutes after the restart the hosts doubled their advantage when Franco Brienza drilled his shot home from 20 yards.
Then with 10 minutes of normal time left Stephan El Shaarawy rescued a point for the Rossoneri when he sneaked in a shot after an instinctive turn.