Massimiliano Allegri's men eventually earned passage through the round of 16, and now face a trip to Rome in the competition's quarterfinal stage.
A sensational first-half strike from teenager Stephan El Shaarawy appeared to have sent the hosts through. But Ivan Radovanovic converted a last-gasp free kick to restore parity and ensure there would be a further 30 minutes of action.
However, the Biancoazzurri's brave efforts eventually proved futile as supersub Alexandre Pato netted a 100th-minute winner to secure safe passage to the next round.
Milan boss Massimiliano Allegri elected to go with something of a second string lineup, resting the likes of Pato, Zlatan Ibrahimovic, Robinho, Thiago Silva and Ignazio Abate, while handing starts to recent loan signing Alexander Merkel, as well as Filippo Inzaghi and El Shaarawy.
And after a slow first quarter of an hour in which the hosts held significant territorial control without threatening, Inzaghi should have given his side the lead when he headed Luca Antonini's teasing cross wide from just six yards.
Almost immediately, Novara struck back at the other end, with Simone Pesce forcing a smart save from Marco Amelia with a powerful shot from distance.
However, Milan would eventually take the lead its play merited in the 24th minute when El Shaarawy drifted inside Paolo Dellafiore and unleashed a stunning, swerving strike from 22 yards which crashed into the net past Novara goalkeeper Alberto Fontana.
Italy Under-21 international El Shaarawy was proving to be a constant thorn in Novara’s side, and he was only denied a second goal by superb goalkeeping from Fontana eight minutes before the break.
After scampering clear down the left, the effulgent 19-year-old breezed inside and unleashed a rising drive from 10 yards, but the Biancoazzurri custodian was equal to the effort, thrusting up an arm to somehow deflect the ball over the crossbar.
Milan re-assumed control after the break, with El Shaarawy remaining a hugely influential figure. However, the hosts’ attacking moves would, time and again, break down in and around the final third.
And on the rare occasions everything did open up, Urby Emanuelson, who was occupying the trequartista role, proved wasteful.
On the hour mark, the Dutchman dragged a woeful shot well wide of Fontana’s left-hand post, to Antonio Nocerino’s visible frustration, then, seven minutes later, he side-footed weakly into Fontana’s arms from close range.
Milan’s failure to put the game to bed was eventually punished in the 89th minute when Radovanovic stepped on to a free kick rolled to him by Pesce and rifled a low shot through a ruck of players and into Amelia’s bottom right-hand corner to send the tie to extra time.
The half hour eventually burst to life in the 100th minute as Milan retook the lead thanks to wonderful linkup play between Brazilian substitutes Robinho and Pato.
Pato fastened onto a magnificent flicked pass from his compatriot before touching the ball over the advancing Fontana and rolling into the net to make the score 2-1 and net what turned out to be the winning goal.
Although taken to extra time, the result bodes well for the Rossoneri as they also face the same opponents in their upcoming Serie A match on Sunday afternoon.The quarterfinal tie between Lazio and Milan will be played on Thursday, Jan. 26, while the Rossoneri meet Novara again for that league fixture in just four days time.