Luca Antonelli provided the decisive touch on the stroke of half-time when he reacted first to a Juraj Kucka knockdown to slam beyond Daniele Padelli.
The result moves the Rossoneri nine points clear of Sassuolo in seventh place ahead of the Neroverdi's meeting with Lazio later this weekend.
Milan were carved out open inside two minutes when Andrea Belotti was ushered in by Daniele Baselli but his right-footed effort, when he ought to have gone with his weaker foot, was foiled by the covering Cristian Zapata.
Kamil Glik intervened to good effect when Daniele Padelli’s miscued fist fell to Carlos Bacca in a promising position.
Gigi Donnarumma was called into action on 13 minutes when he dashed out to thwart Belotti before springing to his feet to repel Ciro Immobile’s attempt.
Keisuke Honda fashioned the home side’s first menacing chance of the contest when he curled a free-kick off the underside of the bar.
Immobile, though, spurned a golden opportunity to break the deadlock minutes later when he was liberated through the middle. With Zapata in close proximity, the Italian shanked his effort into the side netting and Milan survived.
Honda’s set-pieces were posing questions of the Granata and the Rossoneri almost constructed an opener when the Japanese midfielder’s free-kick fell invitingly to Juraj Kucka whose left-footed effort was deflected out for a corner.
And from the ensuing move, Kucka met Honda’s delivery with his header, Luca Antonelli spun the attentions of Davide Zappacosta inside the six-yard box and prodded the ball beyond Padelli on the stroke of half-time.
Kucka threatened on the 54th minute when he drove into the area but dragged his shot just wide of Padelli’s far post.
Giacomo Bonaventura, uncharacteristically quiet during the opening period, used Nikola Maksimovic as a decoy but lifted his effort wide of the mark.
Bacca thought he had doubled his side’s advantage on the hour mark when he snuck in behind Baselli from a corner and headed home, but the linesman adjudged the Colombian to have strayed offside once Antonelli met the initial corner.
Ignazio Abate’s sliced Bonaventura’s cute lay-off wide of the target as Milan cranked up the pressure.
Donnarumma then had to be at his sharpest to foil Immobile’s half-volley from distance.
Belotti dragged an effort off-target on the 85th minute as the Granata’s hopes of finding a leveller began to diminish.
Milan held on for an important three points in their bid for European places.