Sabathia (6-4) -- who hadn't won since April 27 before a strong outing Friday against Boston -- allowed seven hits, walked one and struck out nine against Cleveland Wednesday.
Hafner hit a two-out home run in the first after Robinson Cano reached on an error. Lyle Overbay singled to open the second and, after a strikeout, Jayson Nix doubled. Chris Stewart singled in Overbay and Gardner cleared the bases with his sixth home run of the season.
Cleveland starter Corey Kluber (3-4) allowed all six runs (four earned) and seven hits. He walked one and struck out eight.
Jason Kipnis, with a third consecutive single off Sabathia, drove in the first Indians' run in the sixth and Nick Swisher got another home on a fielder's choice. Gomes hit a two-run home run the next inning for the other runs.