Osasuna produced a stunning first-half display to shock Barcelona and hand Real Madrid a huge advantage in the La Liga title race.
With a Champions League fixture at Bayer Leverkusen coming up on Tuesday, Pep Guardiola opted to start with Xavi, Andres Iniesta and Cesc Fabregas all on the bench.
The Barcelona boss looked on as his side went 2-0 down in 22 minutes to a Dejan Lekic double.
The Catalonians dominated possession in the first half, but they could not deal with their opponents' direct approach in the icy conditions.
Guardiola replaced Pedro and Carlos Puyol with Cristian Tello and Isaac Cuenca at the break and his team began the second half brilliantly.
When Cuenca crossed from the right for Alexis Sanchez to hammer home on 51 minutes, a turnaround looked very likely.
Five minutes later, Victor Valdes undid his teammates' good work as the goalkeeper's short pass was intercepted and provided Raul Garcia with a simple finish to regain Osasuna's two-goal advantage.
Tello set up a dramatic finish on 73 minutes with a drilled effort after good work from Fabregas.
Controversy struck ten minutes later, as Sanchez thought he had levelled the scores only for his goal to be ruled out for offside. Replays later showed the Chilean was onside.
Fabregas had a chance in the fourth minute of stoppage time, but his header was well blocked by Andres.
Barcelona have now failed to win seven of their 21 La Liga games this season.