Massimiliano Allegri, who before the game hinted he would not be signing a new contract until the end of the season, saw his side fall behind in the 11th minute when Marco Parolo fired home after Ignazio Abate had blocked Massimo Gobbi’s effort into his path.
Milan's task was made even harder on the stroke of half time as Antonio Cassano doubled the lead with a low finish, before two goals in two minutes midway through the second half looked to have snatched a point.
Alessandro Matri grabbed his first goal for Milan with a cool finish in the 61st minute before Matias Silvestre headed the equaliser two minutes later from a corner.
However, Parolo won the game for his side deep into stoppage time, claiming his second of the game and fifth of the season with a thunderous free-kick into the bottom corner from 30 yards
The hosts made three changes from last week, with goalkeeper Antonio Mirante returning after a one-match suspension while Mario Balotelli was one of four changes for Milan, back in the starting line-up after recovering from a thigh injury.
Parma took the lead with the first action of note in the 11th minute as Parolo found the net, following good work from Jonathan Biabany to initially set up Gobbi.
The visitors' first chance came in the 33rd minute as Andrea Poli fired narrowly wide of the left-hand post after being played into the area by Valter Birsa.
Cassano then doubled the advantage in first-half stoppage time, receiving a pass from Parolo inside the box and firing into the bottom left-hand corner, with Biabany again troubling Milan left-back Kevin Constant in the build-up.
Five minutes after the break, Gabriel reacted smartly to keep the visitors in the game, getting down low to his left to deny Amauri after he had combined with Cassano.
Walter Gargano then went even closer to a third as Parma continued to dominate, rattling the crossbar from 12 yards after Cassano had teed him up.
They were made to pay for that miss as Milan found two goals in as many minutes against the run of play.
Substitute Matri, on in place of Balotelli, angled a drive across Mirante on the run, the striker's first goal for the club since making his debut as a 19-year-old in his first spell more than a decade ago.
Suddenly Milan were full of life and they found an equaliser two minutes later.
Another second-half introduction, Kaka, was denied by Mirante and from the resulting corner, Cristian Zapata struck the bar with a header before Silvestre nodded home the rebound from six yards.
With the game seeming destined for a draw, Parolo stepped up to lash his set-piece beyond Gabriel from distance after Zapata tripped Nicola Sansone as Milan's wait for a first league away win of the season continues.
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.