Filippo Inzaghi's side - denied victory in Serie A by Fiorentina at the weekend - were second best for long periods as they claimed a point at Stadio Sant'Elia on Wednesday.
Zdenek Zeman's Cagliari missed out on a Milan double, having beaten Inter 4-1 earlier in the season, after Victor Ibarbo's deserved first-half opener was cancelled out by Bonaventura's sublime 30-yard lob.
The hosts steadied themselves in the second period and looked the more likely to win the game as Daniele Conti struck the post with a well-struck free-kick.
Milan were forced to defend desperately for long stretches, but remain unbeaten on their travels in Serie A this term, while Cagliari's wait for a first home success goes on.
The hosts entered the game fresh from a 4-0 thrashing of Empoli on Saturday, and their excellent start to the game looked like being rewarded as early as the fourth minute.
Ibarbo had a gaping goal in front of him after Danilo Avelar squared to take Christian Abbiati out of the game, having collected Conti's perfect throughball. However, Adil Rami reacted and produced a sensational sliding block to somehow keep the scores level.
Ibarbo's pace and power had Milan on the back foot throughout the opening exchanges and he did make the breakthrough on 24 minutes.
The Colombian spotted a gap between Rami and Mattia De Sciglio, and darted into the space to beat Abbiati to Marco Sau's inviting, clipped cross from the left and head into the net from eight yards.
The same pair combined for Cagliari eight minutes later with roles reversed, but this time Abbiati did well to save with his feet.
Milan then drew level out of nothing after 34 minutes. Bonaventura received a throw-in 30 yards from goal under no pressure at all and had time to spot Alessio Cragno off his line before executing a perfect curled lob into the top corner, stunning the stadium into silence.
Despite conceding, the hosts were not to be discouraged and began the second half in much the same manner as they had the first.
Conti whipped in a dangerous low cross from the right 10 minutes after the break and only a desperate lunge from Ignazio Abate took the ball off the toe of an on-rushing Andrea Cossu, denying a certain goal.
Milan were relying on the frame of the goal to keep them level three minutes later as Conti thrashed in a free-kick, after Rami had been turned by Ibarbo, which bounced wide off the post.
Substitute Diego Farias should have won it for Cagliari in the final minute of regulation time, but fired straight at Abbiati from seven yards after being picked out by Sau.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.