Dillon Dube scored in his third consecutive game, and Dan Vladar made 19 saves for the Flames (25-19-11), who have lost four of five (1-2-2), including 2-1 at Detroit on Feb. 9.
"We've been a roller coaster all year," Calgary defenseman Chris Tanev said. "Good one game, [stink] the next. Good one game, [stink] the next. That's on the leaders in here. That's me. My fault.
"It's a must-win game. We needed to win the game, and we lost to the same team twice in a week. We need to be better everywhere."
Fabbri gave the Red Wings a 2-1 lead at 2:27 of the second period with a wrist shot that went short side from the right face-off circle on a power play before Dube tied it 2-2 at 9:03, scoring glove side on a partial breakaway.
Kubalik restored Detroit's lead at 15:21 with a one-timer on a cross-slot pass from Larkin to make it 3-2, and Bertuzzi tapped in a pass from Fabbri on a power play to extend it to 4-2 at 18:43.
"We finally kind of have the lines the way we kind of want them," Perron said. "Everything's starting to click, everyone's starting to find their role. It's a good feeling to string wins together right now. I think the challenge as we go here is to keep pushing. We don't want to stop here."