Zlatan Ibrahimovic opened the scoring very early on for the hosts, before goals from Javier Pastore and Abel Hernandez put the visitors in the driving seat. However, a late Urby Emanuelson strike ensured his side still had a reasonable chance of progression.
The match started in explosive fashion with a goal just four minutes in. Massimo Oddo's cross from a deep position found Zlatan Ibrahimovic, who beat his marker and scored through a tap-in at the far post.
However, just three minutes later, Palermo grabbed an equaliser. Mauricio Pinilla once again showed his new-found importance to the team with a delightful lob pass, which found the on-rushing Javier Pastore in the box, and he smashed home, leaving Marco Amelia with no chance.
Until the equaliser, it seemed the visitors may have been in for a difficult night after such early signs of Rossoneri domination, but as the half wore on it was Palermo who continued to grow in stature. A string of snapshots and promising pieces of attacking play filled the rest of the half up with the likes of Pastore, Ibrahimovic and Kevin-Prince Boateng having various attempts.
The last great chance of the half fell to the hosts, after another quality Oddo cross was met once again by Ibrahimovic, but Salvatore Sirigu made an impressive reflex save to keep the ball out.
Palermo took the lead seven minutes into the second half with Hernandez getting on the score sheet. Substitute Josip Ilicic sprayed the ball to Pastore, and the Argentine delicately played in Hernandez with a slide-rule pass. From a spectacular angle on the left, the Uruguayan hitman rifled the finish into the top right corner in style to make it 2-1.
Palermo started and almost ended a magnificent break on 72 minutes, after Ilicic picked out Hernandez with a fine ball, and his explosive first-time shot from the edge of the box was a whisker away.
Milan equalised shortly after through substitute Urby Emanuelson on 76 minutes, after he collected the ball from a Dorin Goian sliding tackle on Ibrahimovic, and beat Sirigu.
A defensive lapse then allowed Pastore in one-on-one with Amelia, but his side-footed finish was weak and the ex-Genoa man parried the ball away. Moments later and Ibrahimovic again was involved in another goalscoring opportunity, after falling to the ground in the Palermo box.
Andrea Pirlo produced a fantastic, stinging low drive at Sirigu out of completely nothing, and the Italy number three again showed another reason why he is considered such a goalkeeping prospect after stopping the ball with his knees.
Both sides played out a high-tempo match and the tie will resume at the Renzo Barbera, with a place in the final at stake.