Defender Gabriel Schurrer deflected the ball into his own net as Lyon inflicted the first home European Cup defeat on Sociedad in more than 28 years.
Florent Malouda played a one-two with Juninho Pernambucano and swung in a cross which spun in off Schurrer.
Malouda almost doubled the lead in the first minute of injury-time but his shot rattled the post.
Lyon were the better side, but Valery Karpin almost hit a late equaliser for the hosts as his free-kick hit the bar.
Schurrer's 18th-minute own goal was enough to shatter Sociedad's impressive home record which stretched back to 1975.
Sociedad struggled to keep Lyon's lively forwards at bay, with French international Sidney Govou and Guinean winger Malouda creating a host of problems.
Lyon dominated the first-half, and Mickael Essien came close, forcing a great save from Sander Westerveld.
Nihat Kahveci was the only player to threaten for Sociedad in the opening period, his fierce shot forcing goalkeeper Gregory Coupet to pull off an acrobatic save.
The French side's superiority continued well into the second half.
Westerveld had to tip away a curling free kick from Juninho, then parry a drive by striker Peguy Luyindula.
Juninho made a surging run and sent his shot just over the bar in the 61st minute.
Lyon continued to threaten in the late stages of the game but although they failed to add to their score, they will feel confident of holding out in the second leg for a place in the last eight.
Real Sociedad: Westerveld, Kvarme, Lopez Rekarte, Aranzabal,
Schurrer, Alonso (Aranburu 73), Karpin, Gabilondo (Chun-Soo 63), Alkiza, Nihat (De Paula 79), Kovacevic.
Subs Not Used: Alberto, Jauregi, Prieto, Potillon.
Lyon: Coupet, Deflandre, Muller, Sartre (Berthod 65), Edmilson,
Essien, Diarra, Juninho, Malouda, Govou (Dhorasoo 79), Luyindula.
Subs Not Used: Vercoutre, Elber, Carriere, Gomez, Bergougnoux.
Booked: Berthod, Coupet.
Referee: Massimo De Santis (Italy).