Fernando Alonso took Ferrari's first win of 2011 with a stunning drive at a thrilling British Grand Prix.
The Spaniard took the lead following a pit-stop problem for Red Bull's Sebastian Vettel but the Ferrari had genuine race-winning pace.
Vettel was left to fend off team-mate Mark Webber, who was told to hold position by team boss Christian Horner.
Lewis Hamilton finished fourth, holding off Ferrari's Felipe Massa in an exciting last-lap duel.
"This isn't a gift to Ferrari," said BBC F1 co-commentator David Coulthard. "They've got to the lead of this race by merit."
Jenson Button retired following a problem at his final pit-stop, when he set off to rejoin the race without a wheel nut on his right front wheel and he had to stop in the pit exit.
Vettel's race also turned on a pit error. The German took the lead at the start from Webber, who began from pole, as the drivers had to cope with tricky conditions on a track that was wet over half its length but dry over the other.
The Red Bulls appeared to be in control early on in the mixed conditions, with Vettel leading Webber, and Hamilton taking third from Alonso on lap 15 with a brilliant move at the fast Copse corner.
Silverstone win 'nice surprise' for Fernando Alonso
But as the track dried, the race turned on its head.
Alonso started to pump in fastest laps, closing on Hamilton and re-passing him on lap 24, and then on the Red Bulls.
He and Vettel came in on the same lap, 27, for their penultimate stops, and a delay fitting the left-rear wheel to the Red Bull enabled Alonso to pass Vettel in the pits and take the lead.
Vettel rejoined behind Hamilton and was unable to overtake him on the track as Alonso extended his lead with another run of impressive fastest laps, building it to 10 seconds by the time the Red Bull made its final pit stop.
The German managed to jump Hamilton, who came in on the next lap, but although Vettel was now second behind Alonso, the Ferrari continued to pull away to victory.
Vettel admitted that Ferrari had deserved their victory: "I think you have to accept fair and square Ferrari beat us today.
"There has been a bit of a trend over the last couple of races, they have been very strong on race days, so it shows us we need to keep pushing and improving the car."
He added: "It would have been a tight race because Ferrari had very good pace. It was not just us being unlucky and finishing second because of a mistake. Fernando was very competitive."
A delighted Alonso hailed his Ferrari colleagues as he spoke of his victory.
“This is the big thing about Ferrari, the passion, the victory and the love for victory”
"It is a special event for every driver competing in F1, we know the history of this race, a special grand prix and I had the privilege to drive (this morning) the Froilan (Gonzalez) car that was the first Ferrari win in F1," he said.
"Today we won in the same circuit with the same passion, the same group of people who work for this fantastic team. This is the big thing about Ferrari, the passion, the victory and the love for victory."
Vettel was left to fend off Webber, who closed right up to the German in the final couple of laps and made a couple of attempts to pass before being told by Horner: "Mark, you have to maintain the gap."
"I'm not fine with it, no," Webber said after the race. "[If] Fernando retires on the last lap, we're battling for victory.
"Of course I ignored the team and I was battling to the end. I was trying to do my best with the amount of conversation on the radio."
Hamilton and Massa tussle
Red Bull team principal Christian Horner said he understood Webber's frustration but added: "We cannot give away a load of points. We did not want to see our drivers in the fence at some time in the last two laps, which is how it would have ended up.
"Mark is not out of the championship race but we could not afford to risk losing points. Mark should be fine with that, he is a team player. Second and third is a very strong result."
Vettel now has an 80-point lead over Webber in the championship, with Alonso moving up to third place, 92 points behind the leader.
Hamilton and Button are tied on points in fourth and fifth places, three points behind the Spaniard.
Hamilton lost third place to Webber with six laps to go and slipped back into the clutches of Massa.
ANDREW BENSON'S BLOG
“It would be wrong to put all Ferrari's progress down to the change in the rules”
The two men battled side by side through the final corner, and Massa actually finished the race off the track as Hamilton fought back hard to maintain fourth place.
Hamilton had powered through to second place in the early stages, showing his usual impressive pace on the damp track, and pulled off a stunning overtaking move on Alonso on the way.
But as the track dried the McLaren became less competitive, a situation exacerbated by the team needing him to slow down to save fuel.
Their pre-race calculations had been thrown out by the faster-than-expected pace on the drying track.
Mercedes' Nico Rosberg was sixth, from Sauber's Sergio Perez, Renault's Nick Heidfeld, Mercedes' Michael Schumacher and Toro Rosso's Jaime Alguersuari.
McLaren and Sauber were fined by motorsport's governing body the FIA following the race, both found guilty of unsafe pit-stop releases.
McLaren were fined 5,000 euros (£4,433) for the problem with Button's car, while Sauber were fined 20,000 euros (£17,773) after the team released Kamui Kobayashi into the path of Williams' Pastor Maldonado.