After a relatively quiet opening spell in terms of clear chances, the game exploded into life six minutes before half-time when Son smashed home from the edge of the box.
And the tie was settled as a contest in the second period with a cool finish from Chadli as we secured a fourth round trip to Colchester United a week on Saturday.
Mauricio Pochettino made eight changes from the side which beat Sunderland at the weekend and four from the first cup tie with Leicester 11 days ago - which had ended 2-2 - with Kyle Walker, Ben Davies, Nabil Bentaleb and Erik Lamela starting the contest, Walker captaining the side.
It may have been the freezing temperatures or the fact the two sides were so familiar with one another having faced off twice last week at White Hart Lane, but either way it was a low-key opening to the contest and it wasn’t until the 13th minute that we saw the first attempt on goal. Davies played in Son down the left, he cut back to Christian Eriksen on the edge of the area but the Dane was well off-target with his side-footed effort.
Ten minutes later we won a corner which Eriksen played low to Walker 25 yards out, he touched it square to Davies but his first-time drive flew over the bar.
The game was following a similar pattern to the previous three between the sides this season, with us enjoying plenty of possession and trying to break City down, while they were looking to hit us on the break. They did win a free-kick on 28 minutes after Ben Chilwell went down 20 yards from goal, Gokhan Inler stepped up and hit a left-foot shot over the wall but straight into the arms of Michel Vorm.
Davies was again off-target from distance following another corner on 31 minutes, while we had a succession of chances moments later. Eriksen’s shot was blocked by Danny Drinkwater, we picked up possession and came again down the left with Davies delivering a great cross which Lamela headed over. Shortly afterwards, Tom Carroll drilled low but wide from 25 yards.
The opener came on 39 minutes and it was no more than we deserved. Lamela passed square to Carroll midway inside the City half, he hit a lovely first-time pass to Son down the right channel on the edge of the area and the South Korean international shifted the ball to his right before smashing a powerful shot which beat Kasper Schmeichel and sailed high into the net.
The home side had to come out more after that and were on the front foot immediately, with Leonardo Ulloa cutting in from the left and attempted to curl into the top corner but his effort was way over the bar. Then Demarai Gray sent over a dangerous cross but Kevin Wimmer was in the right place to clear for a corner which came to nothing.
On the stroke of half-time, another good move saw Son in exactly the same position from where he scored his goal and he tried the same shot again but this time Chilwell blocked.
As they did in the original tie, Leicester introduced Shinji Okazaki at half-time, replacing Drinkwater, but the opening minutes of the second period continued in the same vein with us on the offensive.
However, the first real chance fell to the hosts when Andy King touched the ball wide to Gray on the left-hand side of the area, he cut inside Walker and tried a curling shot which Vorm did well to save, diving to his left. Nathan Dyer blazed the rebound wide.
Lamela then did well to win possession from Marcin Wasilewski following a long clearance and led a break with Eriksen and Son charging forwards to support him, but the Argentine international played a poor pass and Schmeichel gathered the ball.
Harry Kane entered the fray on the hour mark, replacing Lamela, and he was swiftly in the thick of the action. A lovely move involving Eriksen, Chadli and Son ended with the ball at the feet of Kane inside the area but his drive was palmed away by Schmeichel.
But the Danish keeper could do nothing about our second strike on 66 minutes. It was a wonderfully worked goal, Eriksen taking possession from a throw-in midway inside Leicester’s half and finding Kane who in turn squared for Son. The first goalscorer played a delightful defence-splitting pass for Chadli, who stroked the ball under Schmeichel from a tight angle on the left to double our lead.
Leicester were thankful to their keeper moments later as he produced another good stop to deny Kane on another breakaway, Carroll again with the assisting pass, before the hosts introduced Jamie Vardy to bolster their forward line with 16 minutes remaining.
Vorm needed to be quick off his line to smother the ball after Ulloa’s shot was excellently blocked by Wimmer in the 82nd minute and our Dutch goalkeeper was there again in the 90th minute with a fine save to keep out Marc Albrighton's volley at the back post following a dangerous Chilwell cross from Leicester's left.
At the other end, Kane's low shot caused Schmeichel problems at his near post, but Vorm was once again called upon in the third minute of stoppage time as he tipped Ulloa's effort over the crossbar to preserve his clean sheet.
Leicester (4-3-2-1): Schmeichel, Simpson (Albrighton 63), Wasilewski, Benalouane, Chilwell, Dyer (Vardy 74), King, Inler, Drinkwater (Okazaki 46), Gray, Ulloa. Substitutes (not used): Schwarzer, Morgan, Kante, Mahrez.
Spurs (4-2-3-1): Vorm, Walker, Dier, Wimmer, Davies, Carroll, Bentaleb, Chadli (Onomah 73), Eriksen, Lamela (Kane 60), Son (Alli 84). Substitutes (not used): Lloris, Trippier, Vertonghen, Winks.
Goals: Spurs – Son 39, Chadli 66.
Yellow cards: Spurs – Davies. Leicester - Albrighton.
Referee: Anthony Taylor.