Barca had conceded just one goal in eight league games this season before the visit to the Santiago Bernabeu, but two clinical finishes from Benzema and Valverde saw them two goals down at the interval.
Xavi’s side pulled one back with seven minutes remaining through Ferran Torres, but the hosts restored their two-goal advantage in stoppage time courtesy of Rodrygo’s penalty.
The result marked Barca’s first league defeat of the campaign, with victory for Los Blancos moving them three points clear of their great rivals at the top of the table.
Madrid went ahead in the 12th minute when Benzema fired home from 12 yards via a deflection from Sergi Roberto after Marc-Andre ter Stegen had raced off his line to deny Vinicius Junior.
Barca were presented with a golden opportunity to restore parity in the 25th minute, yet a stretching Robert Lewandowski somehow managed to scoop the ball over the crossbar from just a few yards out following Raphinha’s cross.
Xavi’s men were punished for that miss 10 minutes before the interval when Valverde whipped into Ter Stegen’s bottom-right corner from 20 yards.
Benzema thought he had scored a wonderful second shortly after half-time, but his curled effort from 20 yards was ruled out for offside.
Substitute Torres reduced the deficit with a simple finish at the back post after superb work from Ansu Fati, yet Rodrygo wrapped the win up for Madrid from the spot after he had been tripped by Eric Garcia – the decision given following a VAR review.
Madrid managed just four shots on target, but that proved enough to score three goals against Barca and seal an eighth win in nine LaLiga games this season.
Carlo Ancelotti’s side have now won six of their past seven matches against Barca in all competitions – more than they achieved in the previous 18 meetings.
The France international has now been involved in 21 goals in 39 matches against Barca in all competitions (12 goals and nine assists) – a record only surpassed by Lionel Messi in the 21st century (40 – 26 goals and 14 assists).