Unbeaten in its opening seven league games of the season, the Rossoneri were 2-0 down at the break against a side previously without an away win against it in 29 attempts.
Gianluca Caprari and a penalty from Antonin Barak had Verona heading for an unlikely three points before the home side produced a second-half turnaround.
After Olivier Giroud had headed home a third goal in three league games, Franck Kessie equalised from the penalty spot before Koray Gunter's own goal settled a gripping contest.
Milan had not conceded two first-half goals in Serie A since last November, against this opponent, but it paid the price for a lifeless start to the contest.
Ciprian Tatarusanu, in for the injured Mike Maignan, was powerless to keep out Caprari's precise finish seven minutes in after Miguel Veloso had kept Verona's attack alive.
The lead was doubled 17 minutes later, Barak putting his penalty just out of Tatarusanu's reach after Alessio Romagnoli was judged to have fouled Nikola Kalinic as the former Milan forward darted in front of him to meet a cross.
This Milan is a resilient side, though – it has only twice taken more points after the first eight matches of the season in the three-point era than it had before this game – and it got a lifeline just before the hour when Giroud nodded in Rafael Leao's expert cross from the left.
A swift passing move saw Leao backheel the ball to Samu Castillejo, who was caught from behind by Marco Faraoni, allowing Kessie to dispatch a confident penalty and level the scores with 15 minutes left.
Stefano Pioli introduced Zlatan Ibrahimovic off the bench, and the veteran striker may well have had a tap-in had Gunter not scuffed an attempted clearance beneath the legs of goalkeeper Lorenzo Montipo to give Milan the lead.
Milan's comeback saw it leapfrog Napoli, which plays Torino on Monday (AEDT), and go top of the table by a single point.
With Inter having lost 3-1 at Lazio earlier, Pioli will be doubly pleased with the manner of his side's second-half performance as it capitalised on its rival's first loss of the season.
Verona is 13th, with eight points from eight games.
Milan heads to Porto in the UEFA Champions League on Wednesday (AEDT) before facing Bologna away on 24 October (AEDT).