CSKA took a 32nd-minute lead courtesy of former Manchester United winger Zoran Tosic, but Sergio Aguero quickly equalised and then put the Premier League club in front before the interval at the Arena Khimki.
Aguero, who scored twice in the 3-1 weekend win at West Ham United, picked up where he left off to give Manuel Pellegrini's side a second victory in Group D that leaves them well-placed, along with Bayern Munich, to progress to the competition's knockout stages.
That, of course, is something City have never managed to do before despite their huge outlay on players in recent seasons, but their attacking quality shone through here on a poor pitch in cold conditions and in an unsavoury atmosphere.
Torrential rains last month seriously damaged pitches in the Moscow region to the extent that Leonid Slutski's side had to play their last home group game against Viktoria Pilsen hundreds of kilometres away in St Petersburg.
The pitch at their temporary Khimki Arena home was passed fit for the visit of City, but it was far from ideal, while British television claimed that the visitors' Ivorian midfielder Yaya Toure was subjected to monkey chants from spectators within the stadium.
That could lead to further problems for CSKA, who have not won, or even scored a goal, in any of their last five games in the Russian Premier League and now face an uphill battle to qualify for the last 16 after this result.
City boss Pellegrini brought Jesus Navas in for Samir Nasri, while Pablo Zabaleta and Aleksandar Kolarov came back into the defence. However, that defence was again missing Vincent Kompany and their soft centre was exposed when the hosts took the lead just after the half-hour mark.
A long ball downfield was headed on by Keisuke Honda to Tosic, and the Serbian winger, who had an unsuccessful spell with Manchester United earlier in his career, lobbed the outrushing Joe Hart to open the scoring.
City, wearing all white, had created the best chances before that, with Toure squandering a glorious chance from a third-minute David Silva corner, but they responded to falling behind brilliantly, drawing level barely two minutes later.
Sergei Ignashevich failed to clear a low Silva cross from the left, and Aguero took full advantage, allowing himself a touch before prodding past the exposed Igor Akinfeev.
The game became more and more open after that, and the visitors struck again to take the lead three minutes before the break, Aguero getting in front of Kirill Nababkin this time to head home a delightful cross from fellow forward Alvaro Negredo.
Akinfeev saved well from a Silva free-kick right on the half-time whistle, while Negredo had an effort disallowed for handball just after the restart.
After that, CSKA pressed forward in search of an equaliser and were unlucky on more than one occasion late on, notably when a stunning strike on the half-volley from substitute Ahmed Musa was harshly ruled out by the Romanian referee for a high boot by Pontus Wernbloom on Toure in the build-up.
Hart, who has come in for widespread criticism for his form in the opening weeks of the season, then produced a stunning save from Honda in the third minute of injury time as City held on.