The game was filled with late-inning dramatics, with Seattle tying it in the ninth and both teams scoring a run in the 10th before the Indians produced the winning run off Mark Lowe (1-2).
Cleveland won its second straight after losing three in a row. Seattle has dropped six out of eight.
The Mariners took the lead in the 10th on a leadoff homer by Richie Sexson, but the Indians loaded the bases in the bottom half and tied it when J.J. Putz walked Grady Sizemore to force in Jamey Carroll.
After Masahide Kobayashi (2-0) shut down the Mariners in the 11th, Lowe walked Jhonny Peralta and gave up a double to Travis Hafner. Carroll was then hit by a pitch to load the bases and Sean Green relieved Lowe.
Cabrera ended it with a single that drove in Jason Michaels, who had run for Peralta.
Workers accuse National Zoo of animal mismanagement
Wisconsin business offering 'therapeutic cuddling' forced to close