The home side dominated much of the Group C clash at the Stadion Petrovski and, while they avoided a third consecutive scoreless European outing courtesy of Jose Rondon's late strike, Son's double had already done the damage.
Andre Villas-Boas' side had failed to score in the UEFA Champions League since their opening group win over Benfica in September - a run that included a 2-0 reversal in Leverkusen - and two Son goals in five second-half minutes were enough for Leverkusen.
Hulk and Aleksandr Kerzhakov both came close to opening the scoring for the home side, but it was Son who proved the match-winner as he curled home the opener in the 68th minute following some slick passing.
Son coolly slid home a second soon after and, while Rondon sprung the offside trap a minute from time, Leverkusen would not be denied and will top the group going into the final two games, as Zenit's trip to Monaco in matchweek six now takes on added importance.
After a high-tempo start, it was the hosts who came close to opening the scoring in the 13th minute as Hulk's free-kick from the right clattered against Bernd Leno's post.
Leverkusen's Karim Bellarabi then saw his scuffed effort deflected wide after a neat throughball from Stefan Kiessling, although it was the Russian side who looked the more likely.
Kerzhakov was next to threaten for Zenit when he fired his one-on-one straight at Leno after 21 minutes.
The striker spurned another golden opportunity soon after when his heavy touch helped him get round Leno, but also left him with too much to do in terms of finding the target.
Having failed to make their dominance count inside the opening half hour, Zenit were almost made to pay by Kiessling when he dribbled into the area before seeing a shot blocked by Nicolas Lombaerts.
Julian Brandt, a replacement for injured midfielder Kyriakos Papadopoulos, was replaced by Josip Drmic seven minutes after the break as Roger Schmidt looked to freshen up his attacking options.
While Zenit continued to press - Danny and Hulk almost combining to break through the Leverkusen defence - Son's quick-fire double ended any hopes the hosts may have had.
The forward scored his fourth Champions League goal of the campaign with a delightful curled finish after strong play from Bellarabi and Hakan Calhanoglu.
Kiessling and Lars Bender were the architects for Son's second, linking up well before the former created the opportunity for the South Korea international to convert clinically.
Zenit were given hope of salvaing a point courtesy of Rondon's effort, but again came up short against their German opponents.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.