The device went off when the bus, part of a large military convoy, drove over it, she said.
The pro-Pakistan Hizbul Mujahidin group claimed responsibility for the attack in a telephone call to the local Current News Service.
"We have carried out the blast and killed more than 20 soldiers," a spokesman said.
The blast took place on a main highway and military supply route connecting Srinagar with the northern districts of Baramulla and Kupwara, areas which have seen heavy action by military and anti-government forces along the border with Pakistani-administered Kashmir.
The convoy was travelling from Uri to the Indian army's main headquarters in Srinagar.
Witnesses said that the blast ripped through the military bus, turning it on its side, and shattered the windows of six other vehicles.
Imtiyaz Ahmad Bhat, a witness, told the Reuters news agency that a "powerful explosion shook the whole area, many injured were screaming for help".
On Friday more than 30 people, including 10 children, were wounded when a grenade was thrown by suspected separatist fighters near a crowded bus stop in Banihal in the south of the region.
Security agencies have warned that such attacks could increase as local election, due to be held before November, approach. The state government collapsed on July 7 after mass protests over a plan to hand over land to a Hindu pilgrim trust.
India and Pakistan both claim Kashmir and have fought two wars over the Himalayan region. Pakistan denies Indian allegations that it was behind a separatist movement which began attacks directed at New Delhi's rule in 1989.