Tijjani Reijnders scored two fine second-half goals as AC Milan recovered from a shaky start to see off the 10 men of Club Brugge.
The Belgian side impressed early on and only a fine save from Mike Maignan prevented Christos Tzolis from curling them ahead.
Milan – needing a win after opening defeats to Liverpool and Bayer Leverkusen – opened the scoring when former Chelsea forward Christian Pulisic’s inswinging corner went straight in.
Referee Felix Zwayer then sent off Raphael Onyedika for a high challenge on Reijnders after an intervention from the video assistant referee, leaving Brugge up against it.
The visitors still managed to equalise with a fine goal, when substitute Kyriani Sabbe was the spare man at the end of a flowing move and drove into the far corner. In doing so, the 19-year-old became just the fourth teenager to score against Milan in the Champions League.
Milan boss Paulo Fonseca’s decision to withdraw the lively Rafael Leao was jeered by home fans, but within seconds of the change his replacement Noah Okafor made a goal.
Okafor skipped down the left and cut the ball back for Reijnders to finish with a side-footed strike.
Reijnders repeated the process for Milan’s third goal when he converted a cross from another substitute, Samuel Chukwueze, to seal the win.
There was time for Francesco Camarda to come on and become the youngest Italian player to appear in the Champions League at the age of 16 years and 226 days.