Mohammad Azim, a police officer at the scene, said dozens of people were killed, including civilians, though neither the defence nor interior ministries had yet given an official toll.
"For 10 or 15 seconds, it was like an atom bomb - fire, smoke and dust everywhere," Azim said.
An Afghan army medical official said at least 27 people were killed.
Sulahdin, an army officer at the scene who goes by one name, said there were more than 50 people on the bus at the time of the explosion.
Police at the scene initially said it was a suicide bomb attack, but one official said it could have been caused by a large land mine.
Earlier reports had said the bus was carrying Afghan police.
There was no immediate claim of responsibility for the attack but similar ones have been blamed on the Taliban.
Though most Taliban attacks occur in remote areas in the south and east of Afghanistan, there have been a series of strikes inside Kabul this year.