Diego Simeone's side were heading for another defeat against the LaLiga champions with 10 minutes left at the King Abdullah Stadium, but goals from Alvaro Morata and Angel Correa turned the semi-final tie around.
The 3-2 victory was Atletico's first win over Barcelona since April 13, 2016 and set up a derby showdown against Real Madrid on Sunday.
Atletico started brightly but failed to trouble Barcelona's second-choice goalkeeper Neto and it was his opposite number who was called into action first.
He was needed just before the break too, thwarting Griezmann against his former club as it remained goalless at half-time.
Simeone made a switch at the interval with captain Koke introduced for Hector Herrera and it proved inspired.
Just a minute into the second period and Joao Felix found Correa, who teed up Koke to open the scoring.
It was short-lived joy for Atletico, however, with Barcelona levelling the scores five minutes later through their skipper Messi.
The Argentinian worked some space and, despite the close proximity of two opponents, fired home.
Valverde's side were firmly on top now and thought they had taken the lead on the hour mark, but Messi's effort was ruled out by VAR for handball.
Atletico were struggling and their pain increased two minutes later when, despite Oblak denying Suarez's header, ex-team-mate Griezmann was on hand to head home.
Simeone reacted by introducing Vitolo and Marcos Llorente – the latter replacing Koke, who was unable to continue.
VAR disallowed another Barca goal with 17 minutes to go as Gerald Pique saw a header ruled out for Arturo Vidal being offside.
This proved crucial as Atletico earned a lifeline with 10 minutes left when Neto rushed out and brought down Correa inside the area.
A penalty was awarded and former Chelsea striker Morata made no mistake from 12 yards to make it 2-2.
VAR was needed minutes later to look at another potential spot kick and Atletico's remonstrations fell on deaf ears with Pique not adjudged to have handled the ball deliberately.
Barcelona were on the ropes, though, and Valverde watched his defence react slowly to Correa in the 86th minute, with the Argentinian taking full advantage to fire beyond Neto.
Atletico almost added another not long after and despite four minutes of stoppage time, it finished 3-2 meaning the two invited teams for this new-look tournament – Real having knocked out Copa del Rey winners Valencia on Wednesday – will meet in Sunday's final.