The Blaugrana were nowhere near their best, but emerged from Pamplona with all three points thanks to a second-half double from their Argentine talisman
The Blaugrana were second best for much of the game and fell behind in the 17th minute to a goal from Joseba Llorente.
Their woes continued in the second half as Osasuna kept them on the back foot, while coach Tito Vilanova was sent to the stands in the 73rd minute for protesting to the linesman.
However, a controversial equaliser from Lionel Messi brought them back into the match moments later and Osasuna captain Patxi Punal was sent off for protesting the goal.
The Argentine would pop up once again four minutes later to poke home the winner and give the Catalans a win that they scarcely deserved, after a spirited and purposeful performance from the home side.
Vilanova rested Xavi from the start, with David Villa also taking his place on the bench as Cristian Tello and Alexis Sanchez started up front alongside Lionel Messi.
With sunlight beating down over Estadio El Sadar, Barcelona were slow getting out of the blocks, and had Victor Valdes to thank for denying Alvaro Cejudo from close range inside the opening two minutes.
Andres Iniesta would create danger at the other end, teeing up Tello, who saw his effort touched by Andres Fernandez onto the post.
However, just when it looked like the Blaugrana were beginning to get into their stride, Osasuna would bring them back down to earth with the opener after 17 minutes.
Roland Lamah was the architect, whipping in a dangerous cross from the left that was side-footed in by Llorente, who ghosted in behind Jordi Alba at the far post.
Tello saw a close-range shot saved by Fernandez and Iniesta should have found the target after latching on to Sanchez’s cutback from 12 yards out, but the chances did not mask Barca’s struggles in attack, as they failed to connect with many of their passes.
Their difficulties at the back were even more pronounced, as Osasuna looked dangerous every time they attacked. The home side came very close to a second, as the lively Lamah saw his drive parried by Valdes, and Llorente blocked twice by Gerard Pique from the rebound.
However, Barca had a chance to draw level just before the break. A quickly worked free kick from Cesc Fabregas found Messi in range, but his initial attempt was saved by Fernandez, who also recovered in time to smother Iniesta’s follow-up.
The visitors’ problems continued as the second half unfolded and another defensive lapse almost cost them dear just before the hour mark. Carles Puyol’s sloppy pass was pounced on by Sisi, whose low angler towards the corner was tipped wide by Valdes.
Lamah continued to be a thorn in Barcelona’s side and the Belgian made his presence felt again in the 66th minute, as he drove in from the left and drilled a dangerous shot across the face of goal.
Moments later, Sergio Busquets would almost gift Osasuna a second goal, after he was stripped of possession by Nino just outside the box, who bent his finish onto the post from point blank range.
In the 73rd minute, Vilanova was sent to the stands for arguing with the linesman on the sidelines. However, just when Osasuna were at their most dangerous, a moment of controversy undid all their hard work and brought Barcelona back into the game.
Punal was obstructed by referee Fernandez in the middle, but play was allowed to continue, allowing Barca to deliver into the Osasuna area. The hosts were not able to clear and Sanchez was able to poke to Messi, who stroked home from six yards out.
Osasuna protested an offside call on Sanchez to no avail and Punal was given his marching orders in the confusion. Within four minutes of the restart, matters became even worse for the home side as Barcelona struck again.
A sweeping move from the visitors saw Alba drive a low cross towards Messi inside the area and the Argentine did not hesitate, side-footing past Fernandez to put his side into the lead.
Osasuna could not muster a response and Barca held on to claim three priceless points that they barely warranted.