Cabrera's solo shot in the fourth cut into a 2-0 Yankees lead, and after Jhonny Peralta tied it with an RBI double later in the frame, Cabrera sent home Andy Dirks and Austin Jackson with the go-ahead runs in the fifth.
Dirks provided run-producing hits in the sixth and eighth innings, which the Tigers would need when closer Jose Valverde (22nd save) allowed the Yankees to make it close with two runs in the ninth.
The second-place Tigers, who came into the contest trailing the American League Central-leading Chicago White Sox by 1 1/2 games, held on for their sixth straight win.
Rick Porcello (9-6) earned the victory, yielding three runs on eight hits over 6 2/3 innings.
Yankees starter Phil Hughes (11-9) was tagged for four runs on eight hits in a 4 1/3-inning effort.
Selena Gomez drops F-bomb, walks off stage during Jingle Ball performance
Exploding whale video goes viral on Internet