Sergio Busquets gave the Primera Division champions the lead just before half-time - moments after Sociedad had had a decent penalty shout turned down when Carlos Vela appeared to be tugged down by Javier Mascherano. Inigo Martinez could not hide his frustration and was dismissed for dissent.
And the 10 men did not help themselves after the interval as Gorka Elustondo blasted an attempted clearance at helpless Sociedad goalkeeper Zubikarai, who inadvertently diverted the ball into his own net.
The result put Gerardo Martino's men in pole position to reach the final, most likely against arch rivals Real Madrid after Carlo Ancelotti's side downed city rivals Atletico 3-0 in the first leg of the other semi-final.
Sociedad gave Barca an early scare when Vela capitalised on some sloppy defending by Mascherano and fed Antoine Griezmann, who forced a decent save from Jose Pinto within two minutes.
At the other end, Zubikarai was called into his first serious action 10 minutes later to smother a close-range Cesc Fabregas effort around the post. The resulting corner was worked back to Fabregas, who saw his blast parried away to Alexis Sanchez only for the Chilean to find the side-netting from the rebound.
Lionel Messi had a couple of further sights of goal for Barca as the half wore on, firstly just failing to connect with Fabregas' whipped cross and then unleashing a fierce long-range effort which rattled the frame of the goal.
The game's turning point arrived shortly before half-time, though.
Vela latched onto a long ball and got a shot away, despite seemingly being hauled down by Mascherano, only to see his attempt kept out by the outstretched right leg of Pinto.
Appeals for a penalty fell on deaf ears, and moments later Barca were ahead when Busquets rounded off a scrappy move with a left-footed finish into the bottom-right corner.
Martinez was sent off for dissent after continuing his protests over the lack of spot-kick award for a little too long.
Barca doubled their lead in comedy fashion just before the hour mark. Fabregas' fine through-ball found Alexis and, although his left-footed shot struck the post and fell to what seemed the relative safety of Elustondo, the Sociedad defender blasted his attempted clearance at goalkeeper Zubikarai.
Zubikarai was helpless to prevent the ball diverting into the net via his chest, giving Martino's men a deserved second goal.
The hosts continued to push forwards looking to give themselves an even more substantial cushion heading into next Wednesday's second leg in San Sebastian - Pedro's shot flew narrowly over while Messi stretched for a left-footed volley which Zubikarai did well to save - but the third goal was not forthcoming.