The Tigers had squandered a three-run lead in the ninth as closer Fernando Rodney left after walking the bases loaded in the ninth with no outs.
Cabrera, who had been hitless in his last 12 at-bats, led off the 10th with a shot to left-center off White Sox reliever Scott Linebrink (2-4). It was Cabrera's 11th homer of the season.
"I've never been concerned about him ever," Willis said. "When you bat .340, that's not a slump. He's mentally tougher. I don't think people give him enough credit for that. He's mentally intelligent and mentally tough and with all of that, he has the strength of a [Albert] Pujols. He showed that tonight."
Willis and Cabrera were members of the 2003 World Champion Florida Marlins.
The home run was the first hit White Sox pitching allowed against Cabrera in the first three games of the series.
"We tried to run it on him like we did last night and it got enough of the plate where he was able to get enough of it to get it over the fence," said Linebrink. "It wasn't a bad pitch but when you face the same guys a second time around and they get to see you more and more and they kind of know what you're going to do so I don't know if he was looking for it [pitch] or not but he put a pretty good swing on it."
Trailing 6-3 in the ninth, Rodney walked the first three batters he faced. Tigers reliever Brandon Lyon came in and struck out Jermaine Dye then he walked Jim Thome to force in a run. Paul Konerko followed with a double down the line in left that tied the game. Pinch-runner DeWayne Wise, the potential winning run, was thrown out at the plate on a relay throw by shortstop Adam Everett.
"I'd rather lose like that every day. If we play like this a good percent of the time, a lot of good things are going to happen. We battled back. We never sit back. When they scored the three runs, maybe a couple days ago, we were done. I love the way we played today," said White Sox manager Ozzie Guillen.
Brandon Inge homered for the Tigers for its fourth win in five games.
White Sox starter Mark Buehrle got into trouble in the seventh. He walked the first two Tigers hitters in the inning, then Gerald Laird moved the runners over on a sacrifice bunt. White Sox reliever Octavio Dotel came in and got Everett swinging for the second out of the inning, but he walked Curtis Granderson to load the bases and Placido Polanco followed by emptying the bases with a double over the head of center fielder Brian Anderson to give the Tigers a 6-3 lead.
Anderson hit a two-run homer for the White Sox, who are 3-7 on their current 12-game homestand, the longest of the season.
The White Sox and the Tigers had a bench-clearing incident in the bottom of the fourth inning. Pierzynski bailed out of the batter's box when he took a high and tight pitch from Willis. Later in the at-bat, Pierzynski grounded out, when jogging to the dugout he had a few words for Willis. Willis shouted back and Laird intervened and yelled at Pierzynski then both dugouts and bullpens emptied. The incident resulted in no physical activity or ejections.
Pierzynski and Willis downplayed the incident after the game and called it a misunderstanding.
"I just said 'Hey' to Dontrelle and he said 'Hey' and the next thing I knew the benches were empty and all hell was breaking loose. I got no problem with Dontrelle and I got no problem with anyone on that team," Pierzynski said.
Buehrle allowed five runs and four hits and set a season-high with four walks.
Willis scattered five hits and five walks, giving up only three runs.
Before the game, the White Sox placed RHP Bartolo Colon on the 15-day disabled list with inflammation in his left knee and purchased the contract of left-hander Aaron Poreda from Double-A Birmingham. Poreda was the White Sox's first-round draft pick in 2007. Although he will work from the bullpen, Poreda was 5-4 with a 2.38 ERA in 11 starts with Birmingham.