Having opened the scoring with his first goal of the season 16 minutes in, Son, one of 10 changes and making his 150th Spurs appearance, doubled his tally with a composed finish early in the second half to set Tottenham on their way to a second victory at London Stadium in the space of 12 days.
Son's goals – his first since March – were Tottenham's only opportunities of note amid a barrage of West Ham attacks, though, and the hosts' pressure paid off when Lucas Perez headed in with 19 minutes remaining.
However, West Ham's hopes of a comeback were dashed inside four minutes, Fernando Llorente tucking home from close range to secure progress into the last eight.
Son wasted little time in opening his account for the campaign, picking out the top corner after latching onto a loose ball on the edge of the area.
West Ham rallied quickly and Tottenham had Paulo Gazzaniga to thank when he pulled off a smart stop low to his right to deny Javier Hernandez an equaliser on the stroke of half-time.
Michail Antonio looked set to restore parity shortly after the restart, but the forward failed to beat Gazzaniga after outmuscling Juan Foyth.
Manuel Pellegrini's side was soon punished for its wastefulness, Son pouncing on Arthur Masuaku's error before coolly rounding Adrian.
Perez's header threatened to make things interesting late on, but West Ham's defence was exposed again when Llorente reacted quickest to Christian Eriksen's corner to wrap up the victory.