They're three games up on Miami and Boston, with the Celtics visiting Thursday.
The Bulls led by 13 at the half and 22 in the third, only to see Phoenix whittle it to two in the fourth quarter, before pulling out their 16th win in 18 games.
Rose hit just 6 of 15 shots, but converted several big ones down the stretch, and the Bulls had too much balance and too much at stake to lose to a team that's out of the playoff race.
Joakim Noah added 12 points, including eight in the third quarter, but had just four rebounds after missing three games with a sprained right ankle.
"Offensively, I thought pretty good," coach Tom Thibodeau said. "Defensively, I thought his timing wasn't quite there."
It didn't help that he was on Channing Frye and had to guard the perimeter. He also missed 30 games earlier in the season because of a thumb injury and hasn't played much with Carlos Boozer, the Bulls' top free-agent acquisition.
"I'm concerned that he hasn't been able to get in a rhythm because he's missed so much time," Thibodeau said.
The problem is the Bulls don't have much of that, with the playoffs approaching.
"I'm just trying to be the best I can be," Noah said. "My rebounding is a little down right now. I'll work as hard as I can to get it back to where it used to be."
Boozer scored 12 points after sitting out Monday's practice with an illness, and Ronnie Brewer and Taj Gibson scored 10 each off the bench.
Vince Carter scored 23 points, but the Suns lost for the sixth time in seven games. Grant Hill and Frye scored 13 each, and Steve Nash had 16 assists after missing two games with flulike symptoms. He said he felt fine, although felt cramps in the fourth quarter.
"When you get down 20 in the second half you've got to be perfect, and we were almost perfect," Hill said.
The Suns made it interesting, particularly when Carter converted a four-point play with just over seven minutes remaining. That cut Chicago's lead to 89-85 and Hill made it a two-point game two minutes later when he drove for a layup.
The Bulls looked as if they were in good shape when Rose got fouled converting a floater with just under two minutes left, fans chanting "MVP! MVP!" as he hit the free throw to make it 94-89. But the Suns weren't finished. Frye answered with a 3 to make it a two-point game.
After a shot-clock violation by the Suns with 51.3 seconds left, Rose made a long jumper off the dribble to boost Chicago's lead to 96-92.
Carter then drove for a layup to pull the Suns within two with 26.7 seconds left. With a chance to make it a two-possession game, Chicago's Kyle Korver missed the first free throw before converting the second to make it 97-94 with 13.1 seconds remaining, but the Suns got thrown off on the final sequence.
They wanted Frye to get a 3-pointer up top. Instead, the play broke down.
Nash drove the lane in the closing seconds and passed to Marcin Gortat, who missed a short jumper. And Carter missed the tip-in as the buzzer sounded, the Bulls escaping with a wild win.
"It just wasn't a very good possession," Suns coach Alvin Gentry said.
Kobe Bryant vs. Rose in the NBA finals? Gentry could see the Lakers and Bulls meeting for the championship. "I wouldn't be surprised if those two teams [Lakers and Bulls] played in the finals," he said. ... The Bulls are 19-5 with Boozer and Noah playing. ... The Bulls honored incoming Hall of Famers Dennis Rodman, Artis Gilmore and Tex Winter with a video tribute during a first-quarter timeout. They are part of the class announced on Monday.