Bayern, who trailed 2-1 following last week’s opening leg in Germany, looked capable of inflicting this season’s latest European comeback when Joshua Kimmich scored early and James Rodriguez levelled shortly after the hour.
But Benzema’s double in between, the first a header, the second a simple finish following a dreadful error from Bayern goalkeeper Sven Ulreich, proved enough as Real hung on for a 2-2 draw, and a 4-3 win on aggregate.
Benzema’s two goals here were another feather in the cap for coach Zinedine Zidane, who had decided to start the French striker, despite only one goal in his previous 12 games.
It was another brave call from Real’s coach, who now stands on the brink of history himself, with Carlo Ancelotti and Bob Paisley the only other managers to have ever won Europe’s premier competition three times.
Liverpool or Roma will certainly offer a stern test in Kiev later this month but, having now seen off Bayern, the German champions, Paris Saint-Germain, the French champions, and Juventus, who sit top of Serie A, the feeling is that a 13th European success is now Real’s to lose.
Zidane sprung a surprise by dropping Casemiro to the bench and bringing the more mobile Mateo Kovacic into midfield while Lucas Vazquez played in the unfamiliar role of right back.
It meant no place again in the starting line-up for Gareth Bale, who was named as a substitute for the fifth time in six knock-out matches.
Bayern, meanwhile, were without a host of star players, with Javi Martinez, Arturo Vidal, Arjen Robben, Jerome Boateng, Kingsley Coman and Manuel Neuer all injured. Martinez was fit enough to make the bench.
Kimmich had given Bayern the lead after 28 minutes at the Allianz Arena and here he did it in three, slamming home after Sergio Ramos poked Corentin Tolisso’s cross straight to his feet.
Real were rattled, their fans tetchy, and if Bayern had held on for longer the pressure might have told. Instead, the home side were level by the 11th minute, Benzema peeling free of David Alaba at the back post and heading in.
Marcelo and Toni Kroos both weaved their way into Bayern’s six-yard box, but failed to pick a final pass, while at the other end, Vazquez was enduring a torrid time at right back.
After another ball was threaded inside the winger’s left shoulder, Robert Lewandowski unleashed and James should have scored but was unable to adjust his body to the follow-up.
A breathless opening 45 minutes ended with Bayern wanting a penalty as the ball struck Marcelo on the arm but referee Cuneyt Cakir waved away the appeals.
Real were certainly the more relieved to hear the half-time whistle but they were given a gift shortly after the restart.
Tolisso’s backpass was misjudged and underhit but Ulreich still had the chance to clear. Instead, the keeper got his feet in a tangle and ended up in a heap on the floor, presenting Benzema with an open net.
The game looked finished but Bayern came again and after 10 minutes of desperate Real defending, it was no surprise when they scored. James chased down his own rebound before beating Keylor Navas at the near post. The on-loan Colombian chose not to celebrate against his parent club.
Bayern had 27 minutes to find a third and there were a handful of near misses. Thomas Muller was denied by Navas and Mats Hummels headed agonisingly wide in injury time, but Real held on for their fourth final in five years.
Download our app and read this and other great stories on the move. Available for Android and iOS.