It was not immediately clear what caused the accident as authorities said they were looking into several possibilities, including a technical malfunction.
Authorities did not mention terrorism as a possible cause.
"Nine people are currently in the city's clinics... four people died on the spot," the Moscow city hall said in a statement on the website.
Police were also giving the figure of four killed, revised down from previous statements which said the accident caused five deaths.
Footage broadcast on national television showed the bus driving onto the pavement and then down the stairs of the underpass, running over several pedestrians before coming to a stop.
Moscow police said in a statement they were looking into two possible causes -- the driver losing control of the vehicle and a technical problem with the bus.
"The driver of the bus began movement and then changed his trajectory, which resulted in the bus going down into the pedestrian underpass," the statement said.
"The driver has been detained. Police employees are working with him," the statement said.
"According to the driver, the bus was parked and suddenly began to move by itself," said a statement by the Russian Investigative Committee, which probes major crimes.
"Despite his attempts to stop the bus, the breaking system did not work and the bus continued moving," it said.
Investigators said they were questioning witnesses and plan to examine vehicle documentation and order medical examination of the driver.
The accident happened around 3 pm (1200 GMT) near Moscow's Slavyansky Boulevard metro station, a prestigious residential area near one of the capital's main avenues.
Sirens were blaring around the metro station, with authorities preparing to pull the bus out of the underpass, an AFP correspondent at the scene said.
The underpass and surrounding area were cordoned off and several black body bags could be seen on the pavement, partially covered with falling snow.
The emergencies ministry said helicopters had been dispatched to the scene to help evacuate the victims.
"There are dead and wounded," tweeted Moscow mayor Sergei Sobyanin. "We are providing emergency aid," he said, offering condolences to families of the victims.
Sobyanin also visited the scene, telling journalists he had ordered a full inspection of the entire Moscow bus fleet.