Milan created a raft of chances but were unable to take any, and they were made to pay by Fernando Llorente's goal just before half-time and Carlos Tevez's superb second-half strike.
Defeat saw Milan drop to 10th in the table, five points outside the European places.
Adel Taarabt led an early Rossoneri charge, though, first with a 30-yard shot that forced a good save from Gianluigi Buffon and then with a cross which Gianluca Pazzini headed just wide.
Tevez was denied by home goalkeeper Christian Abbiati before Martin Caceres went close, heading Andrea Pirlo's corner inches wide.
Taarabt carved out the best chance of the game so far for Kaka in the 26th minute, but the Brazilian was denied first by Buffon and, from his follow-up, by Leonardo Bonucci's goal-line clearance.
Buffon saved brilliantly from both Riccardo Montolivo and Kaka and got his reward when his team made the breakthrough a minute before the break.
Tevez and Stephan Lichtsteiner combined on the right and the latter cross low into the six-yard box where Llorent was on hand to slot home.
Tevez drew a sharp save from Abbiati early in the second half but Milan were soon back on the attack.
Taarabt's cross eluded team-mate Pazzini but was heading straight for goal until the alert Buffon made a good stop.
Kaka then crossed for Andrea Poli, whose close-range header skimmed the right post.
And again those misses were made to look more costly when Tevez let fly from 30 yards and sent the ball screaming past Abbiati into the roof of the net.
Robinho volleyed Urby Emanuelson's cross wide as Milan's frustration continued and they could easily have conceded a third late on, Paul Pogba denied by the frame of the goal from 30 yards.