Malick Thiaw a deschis scorul pentru Milan în minutul 12 cu o reluare din interiorul careului.
Real Madrid a restabilit egalitatea prin Vinicius, în minutul 23, dintr-o lovitură de la 11 metri.
Alvaro Morata avea să o readucă pe AC Milan în avantaj din minutul 39, când a profitat de un balon respins în față de portarul Andriy Lunin.
În partea secundă, Lunin s-a revanșat la lovitura de cap a lui Rafael Leao, respingând spectaculos în lateral.
Tijjani Reijnders a dus scorul la 3-1 pentru milanezi în minutul 73 după o fază pornită de oaspeți cu mingea jos de la propriul portar.
Responsabil cu pasa decisivă a fost Leao, jucător care a destabilizat întregul flanc drept al defensivei madrilene.
Gazdele au avut un gol anulat în minutul 81 la șutul lui Antonio Ruddiger pentru o poziție afară din joc.
AC Milan obține a doua victorie consecutivă, după ce începuse campania din Liga Campionilor cu două eșecuri la rând.
Real Madrid încasează a doua înfrângere, după ce a mai pierdut în deplasare cu Lille.