Brazil captain Neymar was subjected to some ferocious fouls from Uruguay as the clash between the South American rivals boiled over at Arsenal’s Emirates Stadium.
But the Paris Saint-Germain striker had the last laugh, netting from the spot late in the second half after Diego Laxalt was harshly ruled to have fouled Danilo.
Brazil are now unbeaten in their last 10 meetings with Uruguay, who haven’t defeated the five-time world champions since 2001.
Brazil, building towards hosting the Copa America next year, take on Cameroon in another friendly in Milton Keynes on Tuesday.
It will be their last match of 2018, having recorded five successive friendly victories since losing in the World Cup quarter-finals against Belgium.
“It was a typical South American derby. We have respect for Uruguay. They have dangerous players,” Brazil boss Tite said.
“We managed to control them. This is our third game now without conceding a goal.”
Uruguay manager Oscar Tabarez added: “Neymar was playing with freedom. We weren’t controlling him very well.
“But I thought our young team matched Brazil. It’s a shame it comes down to a controversial situation.”
Even on a dank, misty north London evening that was a million miles from the sun-soaked beaches of Rio, Brazil’s global popularity ensured a large crowd braved the elements to see their star-studded line-up.
Neymar was the headline act as the Maracana came to the Holloway Road.
His every touch brought cheers of approval from the crowd and it wasn’t long before he conjured the Selecao’s first chance.
Tripped by Rodrigo Bentancur after a flamboyant run, Neymar picked himself up to take the resulting free-kick and drilled a low shot that forced a good save from Martin Campana.
Neymar thought he had opened the scoring when he slotted home from Filipe Luis’s cross, but his close-range effort was ruled out for offside.
Trying his luck from long range soon after, Neymar whistled a fierce strike just over Campana’s crossbar.
Uruguay were hardly short of star power themselves and the two-time World Cup winners came close to taking the lead in the 23rd minute.
Seizing on Brazil’s careless loss of possession, Barcelona forward Luis Suarez unleashed a dipping shot that was turned over by Alisson Becker.
– Steely streak –
Uruguay’s Lucas Torreira was on home turf and the Arsenal midfielder showed the steely streak that has endeared him to Gunners fans when he earned a booking for clattering into Neymar.
That crunching tackle was typical of the robust approach that has remained Uruguay’s trademark for decades.
There was little love lost between the sides and referee Craig Pawson dished out five bookings in the first half alone.
Uruguay’s no-hold-barred style succeeded in knocking Brazil out of their stride.
Brazil nearly fell behind just before the interval as Alisson was forced to repel Edinson Cavani’s close-range strike from a Suarez cross.
Suarez went close himself, blasting a low free-kick that forced Alisson to save at full stretch after the interval.
Neymar was growing increasingly irritated by the Uruguayan tackling, shaking his head in frustration after being clipped by Mathias Suarez.
But he almost found the perfect response with a mazy run and shot that tested Alisson.
Neymar finally got his revenge for the rough treatment in the 76th minute.
When Uruguay’s Laxalt dived in on Danilo, the Brazilian launched into a theatrical fall that convinced Pawson to give a dubious penalty.
Neymar grabbed the ball and stepped up to send Campana the wrong way from the spot.