Brazil 1-0 South Africa
An 88th-minute free-kick from Daniel Alves sent an unconvincing Brazil into the Confederations Cup final and left hosts South Africa heartbroken.
Alves came on late in the game and powered a strike into the far corner after Aaron Mokoena had conceded the set piece with a foul on Ramires.
Mokoena had earlier sent a far post header from close range over.
Steven Pienaar also came close for the hosts when his 25-yard shot was palmed wide by keeper Julio Cesar.
Brazil had struggled to produce their fluent passing game and, until the winner from Alves, gave South Africa the scent of creating a similar upset to the other semi-final which saw the United States beat Spain.
A mixture of Brazil’s own lethargy and South Africa’s industry and passion saw the South American team fail to create any concerted pressure on the hosts.
When they did produce a threat, Ramires had a shot easily saved while the forward’s control let him down when Kaka tried to put him through.
South Africa should have punished Brazil for a lacklustre display but Mokoena put a free header over from six yards.
A Siphiwe Tshabalala left-foot free-kick was blocked by keeper Cesar before Brazil briefly raised themselves from their stupor to almost punish South Africa.
Mokoena should have done better than to put this header high
Andre Santos chested down a ball and his half-volley was saved, while Kaka cut inside and curled an 18-yard shot just wide.
South Africa midfielder Pienaar’s energy and determination is vital to his side and he would have added the vital ingredient of goal if a full-stretch Cesar had not tipped his long range strike wide.
Cesar again saved his side when Teko Modise’s deflected strike looked set to spin into goal only for the keeper to palm the effort wide.
The vuvuzela’s were getting louder with each minute as the potential for a huge upset grew stronger as South Africa’s work-rate stifled Brazil.
But Alves and Brazil had the final say as a display more of a battling nature than samba style booked the South American side’s place in Sunday’s final against the United States.
Brazil: Julio Cesar, Maicon, Lucio, Luisao, Andre Santos (Dani Alves 82), Silva, Felipe Melo, Ramires, Kaka, Robinho, Luis Fabiano (Kleberson 90).
Subs Not Used: Victor, Kleber, Elano, Miranda, Josue, Julio Baptista, Alexandre Pato, Nilmar, Gomes.
Booked: Felipe Melo, Andre Santos, Dani Alves.
Goals: Dani Alves 88.
South Africa: Khune, Gaxa, Booth, Mokoena, Masilela, Pienaar (Van Heerden 90), Dikgacoi, Mhlongo, Modise (Mashego 90), Tshabalala (Mphela 90), Parker.
Subs Not Used: Fernandez, Davids, Mdledle, Fanteni, Moon, Khumalo, Gould, Baloyi.
Ref: Massimo Busacca (Switzerland).