The result means that Milan remain sixth in the Serie A table, one point above Sassuolo and six adrift of fifth-placed Fiorentina, while Verona sit at the bottom on 25 points, seven from safety.
Verona had more attacking threat in the first 20 minutes as they had created six shots, compared to Milan's two, but the first goal of the game was netted by the visitors.
© Getty Images
Menez came close to scoring a second a few minutes later, but Pierluigi Gollini managed to drop down to his left to prevent the ball from nestling into the bottom corner.
Bacca had the ball in the net around the 35-minute mark, but it was disallowed after the Milan man was offside when scoring.
Despite being a goal down, Verona did not give up and after the half-time break, the hosts went on the attack, with Luca Siligardi delivering in some teasing crosses, one of which was cut out by the Milan defence.
Bacca continued to cause problems, though, as he surged past his markers and managed to unleash a shot from the box, but the keeper made a save.
At the other end, Pazzini got on the end of a pass in the 18-yard box and aimed at goal, but it was blocked. A few minutes later, though, the hosts were handed a great opportunity to level things up.
Verona were awarded a penalty when Alessio Romagnoli handled in the area, and it was Pazzini who converted by sending the ball into the right side of the net.
© Getty Images
The home side had their tails up as they hunted for a winner, and Pazzini almost gave them a second when he got one on one with the keeper, but his low shot was saved.
Donnarumma was called upon numerous times to keep Verona from taking the lead, while Milan had a handful of moments late in the second half to get three points.
Both teams looked destined for a point, but the winner came in the fifth minute of added time from a free kick, which was granted following a Honda hand-ball.
Siligardi took the set piece and lifted the ball over the wall before it bounced off the post and into the top left corner.