Juve looked set for a third straight away defeat after Ante Rebic’s volley put Milan ahead before the hosts lost Theo Hernandez to a second yellow card after 71 minutes.
The visitors offered little threat despite their man advantage but the late VAR-awarded spot-kick allowed Ronaldo, 35 last week, to make it 35 goals in 35 games for club and country.
The second leg in Turin is on 4 March.
Juve were knocked off top spot in Serie A at the weekend and their boss Maurizio Sarri would have been frustrated to see his side only manage three tame shots on target in a tepid, scrappy game.
But in the last minute, Ronaldo saw his scissor kick blocked by the arm of Davide Calabria, who was looking the other way.
Referee Paolo Valeri did not initially award the penalty but pointed to the spot after going over to review the incident on the pitchside monitor. Ronaldo slotted his kick straight down the middle.
Before the late drama it was another veteran, 42-year-old Gianluigi Buffon, who had been the game’s star performer.
The Juve goalkeeper, who first won this trophy in 1999, made good saves from Rebic and Hernandez before a superb one-handed stop pushed a Zlatan Ibrahimovic effort into the side-netting.
Shortly afterwards Rebic struck to give Milan the advantage, turning in Samu Castillejo’s cross after a spell of pressure.
Hernandez picked up a second booking when he caught Paulo Dybala with 19 minutes left and Ronaldo – who scored in a 10th straight league game at the weekend – then took advantage of the dubious call to level in front of a new Coppa Italia semi-final record attendance of 72,738.
Napoli took a 1-0 lead over Inter in the first semi-final, also played at the San Siro on Tuesday night.