UEFA Champions League: Leverkusen 3 Benfica 1
A confident first-half performance saw the hosts hit a post through Lars Bender before taking the lead after 34 minutes when the Korean's shot was spilled into the path of Stefan Kiessling, who finished from close range.
An accomplished performance from Son was rewarded just before half-time when he was picked out by Karim Bellarabi to lash home.
Hakan Calhanoglu was next to be denied by the woodwork after the interval, but quickly made amends from the penalty spot just a minute after Eduardo Salvio had pulled one back for the visitors.
The result leaves Leverkusen one point behind Zenit and Monaco in Group G, while Benfica's chances of progressing to the last 16 now hang in the balance, without a point from two games.
After a blistering start to their campaign, a recent goal drought had seen Leverkusen find the net just twice in their last four games coming into this contest, but boss Roger Schmidt will have been pleased by the way his team performed at the BayArena.
Benfica goalkeeper Julio Cesar, playing his first Champions League game since March 2012 saw his goal under siege early on as Bellarabi fired a 25-yard drive wide and Son brought a save out of the Brazilian in the first five minutes.
The veteran keeper was beaten just before the 15-minute mark, but Bender's effort came back of the post.
However, the hosts did break the deadlock with 25 minutes on the clock when a sweeping attacking move saw Julio Cesar parry Son's initial shot straight to Kiessling, who gladly tucked away the rebound with a simple finish.
Son managed to get on the scoresheet himself nine minutes later after some terrific work from Bender allowed Bellarabi to find space down the right-hand side, before picking out the Korean, who smashed a curling effort into the net
The near-total dominance of the home side was briefly disrupted on 40 minutes, when Enzo Perez fired over, but they were lucky not to fall further behind on the stroke of half-time as the impressive Son curled his shot wide.
Calhanoglu missed a golden opportunity to add a third shortly after the break, but inexplicably poked his effort against the post from two yards out.
And the hosts were soon punished for their wastefulness inside 62 minutes when Salvio was allowed to turn and fire home inside the area to reduce the arrears against the run of play.
However, Leverkusen restored their two-goal cushion just 60 seconds later, when Jardel brought Kiessling down in the box, allowing Calhanoglu to make up for his earlier miss by stroking home the resulting penalty and cap off Leverkusen's first win over the Portuguese outfit.