Staal broke a tie with his 24th goal, beating Carey Price from the right edge of the crease. Brandon Sutter drew the Hurricanes even at 1 when he got credit for his 20th goal early in the second.
Ward stopped 11 shots in the first, 13 in the second, and 10 in the third to win his second straight start after missing 17 games because of a back injury.
Carolina, which has won three of four, is 11th in the Eastern Conference with 75 points, seven behind Montreal.
Marc-Andre Bergeron scored his first goal since Dec. 31 on a power play in the first.