Redan innan fem minuter spelats sprang sig Ibrahimovic fri men knuffades i ryggen av försvararen Charalampos Lykogiannis inne i straffområdet.
Ibrahimovic reste sig, slog in straffen och firade sitt elfte ligamål för säsongen.
Målvakten Alessio Cragno slängde sig till vänster, Ibrahimovic placerade bollen i andra hörnet.
VAR-koll vid 2–0
Davide Calabria var nära att öka till 2–0 men han prickade stolpens insida.
I stället tryckte Ibrahimovic distinkt in kvällens andra mål sju minuter in i andra halvlek. Målet blåstes först bort för offside men en VAR-koll visade att Ibrahimovic befann sig i linje med en försvarare.
Det var hans 22:a mål på 26 matcher sedan han kom tillbaka till Milan för drygt ett år sedan.
– Vi mår bra, vi är nästan halvvägs genom serien. Nu börjar de svåraste matcherna. Det kommer att bli ett mycket tufft program, säger Ibrahimovic.
Han välkomnar nyförvärvet Mario Mandzukic.
– Jag är glad, nu är vi två som skrämmer våra motståndare, säger han.
Ibrahimovic missade åtta ligamatcher på grund av lårskadan han ådrog sig borta mot Napoli den 22 november.
Tränaren Stefano Pioli gav honom nyligen ett sex minuter långt inhopp mot Torino, som i dag sparkade tränaren Marco Giampaolo, i ligan. Några dagar senare spelade Ibrahimovic de första 45 minuterna mot samma klubb i cupen.
Roback på bänken
Alexis Saelemaekers fick rött kort med en kvart kvar, men Milan – med Ibrahimovic på planen hela matchen – lyckades hålla tätt.
Emil Roback, 17, i somras värvad från Hammarby, satt på Milans avbytarbänk.
Milan, som saknade flera ordinarie spelare på grund av pandemin, är i fortsatt ligaledning, med 43 poäng, tre före Inter.
Närmast väntar Atalanta hemma på San Siro på lördag. Sedan drabbar Milan och Inter samman i cupen några dagar senare, på onsdag i nästa vecka.
Om Milan kan vinna ligan för första gången på tio år? Ibrahimovics svar till Sky Sport Italia:
– Jag tror på Zlatan.