The Hurricanes won for the second night in a row following a three-game losing streak.
McGinn, a 24-year-old left winger, has 10 goals this season, including three in the first seven games of a season-long eight-game homestand. He also posted a two-goal game Nov. 11 at home against the Chicago Blackhawks.
With the score tied 1-1, McGinn came down the slot to collect a pass from Elias Lindholm -- who also assisted on the first goal -- and score the go-ahead goal. Lindholm battled to gain control of the puck behind the net.
Carolina goalie Cam Ward made 29 saves. He needed only seven saves in the third period.
Jeff Skinner also scored for the Hurricanes, with his tally providing a two-goal gap with 6:43 remaining.
Tyson Barrie scored for the Avalanche.
Goalie Semyon Varlamov stopped 32 shots for Colorado, which is 0-2 on a three-game road trip that ends Sunday at Buffalo.
Barrie opened the scoring with 3:09 remaining in the first period with his fifth goal. It was his first goal in six games since returning from an injury that caused him to miss a month's worth of games until late January.
Eighteen seconds later, McGinn responded with his first goal.
Neither team scored in the second period, but both teams had 23 shots entering the third period.
Shortly after McGinn's second goal, Carolina went on a power play, but Victor Rask was denied by Varlamov's save to keep it a one-goal margin until Skinner's goal came off a rebound after the Avalanche returned to even strength.
Ward won for the first time in the team's last five games as he was 0-1-1 plus two games in which he didn't play.
Carolina improved to 4-2-1 on the homestand, which concludes Tuesday night against the Los Angeles Kings.
--Field Level Media