Theodore stopped Jochen Hecht on a short-handed breakaway midway through the third period and made another pad save on Hecht later in the period to help Montreal extend its winning streak to three games -- tying a season high set from Oct. 11-16.
The Canadiens also tied their longest unbeaten streak of the season at five, and have at least one point in six straight games (4-0-1-1).
Alexei Zhitnik scored for Buffalo, which ended a three-game unbeaten streak. The Sabres lost for just the second time in eight games (4-2-2) following a seven-game losing streak.
Canadiens defenseman Stephane Quintal played his 1,000th career regular-season game.
Quintal was honored prior to the game. He was presented with a silver stick by Hall of Famer Henri Richard, who Quintal joined as one of seven players to reach the milestone in a Montreal uniform.
The Canadiens, who hadn't won consecutive games in more than two months prior to their current streak, took a 2-0 lead 11:28 in on their way to outshooting Buffalo 20-9 in the first period.
Dagenais opened the scoring 6:07 in, scoring on a rebound after goalie Martin Biron couldn't control Craig Rivet's shot. Dagenais has six goals in 19 games since he was recalled from Hamilton of the AHL on Nov. 24.
Biron once again had trouble controlling a loose puck on Koivu's goal at 11:28. Canadiens rookie Michael Ryder flipped a shot toward the net from the blue line and Koivu drove in to bat the bouncing puck past Biron for his seventh of the season.
Zhitnik scored 4:01 into the third with a slap shot from the point over Theodore's left arm into the right side of the net.
Theodore, who came within 4:50 of his first shutout since a 3-0 win over Buffalo Nov. 8, stuck out his left pad to deny Hecht, who came in on a short-handed breakaway just short of the midway point of the third.
Ribeiro scored into an empty net with 34.6 seconds remaining.
|Pierre Dagenais (6) ASST: Richard Zednik (9), Craig Rivet (7)|
1 - 0 MTL
|Saku Koivu (7) ASST: Michael Ryder (18)|
2 - 0 MTL
|Alexei Zhitnik (2) ASST: Derek Roy (3), Maxim Afinogenov (6)|
2 - 1 MTL
|EN - Mike Ribeiro (8) ASST: Sheldon Souray (13), Richard Zednik (10)|
3 - 1 MTL
|Andrew Peters Fighting against Darren Langdon|
|Darren Langdon Fighting against Andrew Peters|
|Ales Kotalik Interference against Michael Ryder|
|Saku Koivu Tripping against Curtis Brown|
|Saku Koivu Hooking - Obstruction|
|Chad Kilger Hi-sticking against Andrew Peters|
|Francis Bouillon Slashing|
|Brian Campbell Cross checking against Mike Ribeiro|