Zack Kassian assisted on all four goals -- also setting up Brad Richardson, Shawn Matthias and Yannick Weber as the Canucks picked up a second straight win for the first time since Jan. 21.
Eddie Lack faced only 18 shots and didn't give up a goal in the last 16:31 after letting pucks from Tyler Ennis and Jamie McBain get through early on.
Nathan Lieuwen gave up all four goals in net for Buffalo, which put another one in the wrong column after stopping a seven-game losing streak Thursday in a win over Edmonton.
The Canucks moved within three points of idle Phoenix for the last wild card spot in the Western Conference.
The better news? They got Daniel Sedin and Ryan Kesler back from injuries. Sedin (hamstring) played for the first time in 10 games and was on the ice for just under 18 minutes and Kesler (knee) played more than 22 minutes after being out four games.
But Alexandre Burrows missed the game for Vancouver after leaving Wednesday's 2-0 win over Nashville when he was slashed on the left hand.