The home side had to come from behind twice before sealing the win with a Mario Balotelli penalty.
Milan dominated possession from the kickoff, but rarely threatened the visitors' goal until the 20th minute, when Balotelli met Kevin-Prince Boateng's cross and poked the ball inches wide.
The home side almost found an instant response but Boateng's drive from the edge of the box hit the crossbar, before Balotelli's powerful free kick was pushed away by the goalkeeper.
Then on the stroke of half time, the ball fell kindly to Mathieu Flamini, who fired into the far corner from the centre of the penalty area.
Shortly after the break, Milan were undone on the counter-attack again, as Gonzalo Berseggio broke free and chipped the ball over Marco Amelia.
Milan responded well again, but again hit the post from Balotelli's long-range strike; this time, though, Pazzini was on hand to tap the rebound in for the equaliser.
Moments later he got on to another rebound from a Balotelli shot, only to hit the post himself, before collecting a third rebound off the goalkeeper and putting Milan ahead with just over 10 minutes to go.
In the final minutes Balotelli was fouled in the area before picking himself up to score the penalty and put the game out of Catania's reach.