Gennaro Gattuso had compared the derby to a World Cup final in the build-up to Wednesday's match at San Siro and his side delivered despite sitting eight places below Inter in Serie A and having lost three of their last five in all comeptitions.
Milan's preparations were disturbed by having to make a late change in goal as Marco Storari was injured in the warm-up, so Antonio Donnarumma deputised for younger brother Gianluigi, who was ruled out with a groin problem.
And Donnarumma was spared scoring an unfortunate own goal on his Milan debut when a video assistant referee (VAR) referral saw Inter have a potential opener ruled out for offside after 24 minutes.
Joao Mario and Giacomo Bonaventura missed great second-half chances to win the tie, while Suso clipped the crossbar with just 12 minutes of normal time to play.
Inter had won the last derby 3-2 after Mauro Icardi's hat-trick, but Milan got the decisive goal in the 104th minute when substitute Cutrone brilliantly turned in a gorgeous Suso pass to set up a meeting with Lazio in the final four.
Suso, who scored in the last meeting between the sides, hit a free-kick into the wall in a low-tempo start to the match.
Samir Handanovic had to make a fine save in the 18th minute, the goalkeeper tipping over a Bonaventura header that was dipping under the crossbar.
Inter appeared to have scored with their first meaningful attack, Ivan Perisic's effort deflecting in off Donnarumma, but a VAR referral saw the goal ruled out as Andrea Ranocchia was offside.
Handanovic denied Suso after Franck Kessie freed the midfielder with a backheel, before an isolated Icardi flicked an improvised header wide at the other end.
Milan had a penalty claim rejected early in the second half when Nikola Kalinic – whose injury 15 minutes from the end of regulation time resulted in Cutrone's introduction – appeared to be pushed in the back by Joao Cancelo.
Donnarumma had looked nervous but he made a terrific block to keep out Joao Mario's close-range strike in the 58th minute, then Bonaventura nodded wide with the goal gaping after Handanovic pushed a Suso cross directly to him.
Suso thought he had won it for Milan in the 78th minute but his curling effort bounced on top of the crossbar after a deflection, with Perisic then lashing over for Inter.
Donnarumma spilled a speculative Perisic effort with four minutes of the initial 90 to go, but he reacted well to prevent Antonio Candreva from turning in the loose ball.
And, shortly before the interval in extra-time, Milan finally broke the deadlock.
Cutrone, the 19-year-old academy product, timed his run perfectly to meet Suso's pinpoint pass and beat Handanovic with a first-time finish.
Despite heavy Inter pressure, Milan held on to boost Gattuso's position in front of watching president Li Yonghong and finally bring something to cheer for the Rossoneri faithful.
Key Opta stats:
- Patrick Cutrone has scored nine goals this season, more than any other Milan player.
- Inter have gone to extra time in four of their last five Coppa Italia games.
- Mauro Icardi had only four touches in the first half, at least eight less than any other player on the pitch.
- Milan have hit the woodwork 11 times in this season in all competitions.