Shawn Matthias collected a goal and two assists and Zack Kassian burned his former team by setting up all four tallies as host Vancouver recorded its fifth win in eight outings.
Brad Richardson had a goal and an assist and David Booth and defenseman Yannick Weber also scored for the Canucks, who welcomed back Daniel Sedin from a nine-game absence due to a hamstring injury. Twin brother Henrik, however, suffered a left leg injury in the second period and did not return.
Tyler Ennis scored his team-leading 19th goal and defenseman Jamie McBain also tallied for the reeling Sabres, who have dropped eight of their last nine. British Columbia native Nathan Lieuwen finished with 32 saves in his second NHL start.
After spotting Buffalo an early two-goal lead, Vancouver leveled the contest as Kassian set up Richardson and Matthias 2:36 apart midway through the first period. Weber's soft wrist shot above the circle along the right-wing boards slipped between the pads of Lieuwen to give Vancouver a 3-2 lead at 1:40 of the second.
Booth provided insurance 2:23 into the third period with a wrist shot from the left circle for his first goal since Dec. 17 - a span of 32 games. Rookie Eddie Lack overcame a rocky start to finish with 16 saves.
GAME NOTEBOOK: Canucks captain Henrik Sedin was honored in a pre-game ceremony for playing his 1,000th NHL game on March 12. ... Vancouver C Ryan Kesler returned from a four-game absence due to a knee injury. ... Buffalo C Cody Hodgson, who was traded for Kassian in February 2012, lost 11-of-16 faceoffs.