Attackers drove an ambulance laden with explosives past a police checkpoint in a secure zone, home to government offices and foreign embassies.
The target is believed to have been an interior ministry building, but many people were hit while walking by.
The Taliban have said they carried out the attack, the deadliest for months.
A week ago, Taliban militants killed 22 people in a luxury Kabul hotel.
Witnesses say the area – also home to offices of the European Union, a hospital and a shopping zone known as Chicken Street – was crowded with people when the bomb exploded on Saturday at about 12:15 local time (08:45 GMT).
Nasrat Rahimi, deputy spokesperson for the Interior Ministry, said the attacker got through a security checkpoint after telling police he was taking a patient to nearby Jamhuriat hospital.
He detonated the bomb at a second checkpoint, said Mr Rahimi.
The BBC’s Zia Shahreyar, speaking from the scene, says it is not easy to get through the checkpoints. Cars are searched and drivers’ identities checked.
He adds that questions will be asked about how the attacker got through.
The International Committee of the Red Cross said the use of an ambulance was “harrowing”.
The Afghan government has condemned the bombing as a crime against humanity, and accused Pakistan of providing support to the attackers.
The Taliban control large swathes of Afghanistan and parts of neighbouring Pakistan.
Pakistan denies supporting militants that carry out attacks in Afghanistan. This month, the US cut its security aid to Pakistan, saying it had failed to take action against terrorist networks on its soil. (Courtesy BBC)