Marcelo headed the only goal in the 68th minute of a largely drab affair at VEB Arena, giving Bruno Genesio's side its first victory of any kind since they beat Villarreal last month.
Winless in its last six Ligue 1 outings, the visitor had appeared more than happy to return to France with nothing more than a clean sheet.
But they are now in the driving seat to advance and, having only conceded four goals in the competition to date, will be confident of finishing the job next week.
It should have captain Nabil Fekir back in time for that match after the star midfielder missed the trip to Russia with a knee complaint.
CSKA commanded the bulk of the territory throughout a muted first 15 minutes and almost made their superiority count, but Ahmed Musa was unable to beat a well-positioned Anthony Lopes at his near post.
Musa's loose touch had scuppered an earlier opening while Lyon were similarly wasteful with their occasional counter-attacks, Bertrand Traore and Houssem Aouar both guilty of rushed attempts.
Lopes was again alert in the 35th minute to parry Aleksandr Golovin's dipping drive in what proved a rare moment of alarm in an otherwise laboured first half.
The away side displayed little desire to increase the tempo after the restart, although Memphis Depay did force Igor Akinfeev into an acrobatic save with a curling free-kick on the hour.
The goalkeeper was less assured for the game's decisive moment. Beaten by the flight of Depay's corner, Akinfeev could only watch as Marcelo rose high and nodded home at the far post.
Kenny Tete next sliced wastefully wide but the miss mattered little as, despite a late penalty area scramble, the Russians failed to truly test Lopes.