Sergio Aguero missed a first-half penalty and Harry Kane was forced off injured before Son's strike settled the first European match at the new Tottenham Hotspur Stadium on Wednesday (NZDT).
City had won all of the past three meetings with Spurs but, without Bernardo Silva or Kevin De Bruyne in the starting line-up, they seemed to lack a lot of the spark that has kept them on course for an unprecedented quadruple this season.
Mauricio Pochettino's side was thwarted by Ederson for much of the match, but the Brazil goalkeeper allowed Son's strike to slide beneath him and leave City trailing ahead of the return leg.
Eleven minutes in, Danny Rose was penalised after a VAR review for blocking Raheem Sterling's shot with his arm, but Aguero's spot-kick was comfortably saved by Hugo Lloris.
The incident seemed to galvanise Spurs, with Kane seeing a shot well stopped by Ederson, who also denied Rose just before the break.
City was not quite at its slickest but Aguero did flash a shot just past the right-hand post, as it continued to look a threat on the counter-attack.
Sterling was denied by Lloris shortly after half-time as the game became more frantic, but the atmosphere was rather quelled an hour in, when Kane had to be helped down the tunnel after apparently damaging his ankle in a challenge with Fabian Delph.
City suddenly looked in the ascendancy, but it was Spurs who found the breakthrough 12 minutes from time. Son just kept Christian Eriksen's pass from going out for a goal-kick, skipped past Delph's challenge and saw a left-foot shot squirm beneath Ederson's body.