The accident occurred Wednesday as the bus was travelling along a highway in the southern region of Arequipa, 1,000 km south of the capital Lima, Xinhua reported.
The bus departed from Orocampa town in Castilla province with 48 passengers onboard. It was on its way to the state capital Arequipa City, 150 km away.
Most of the passengers were reportedly going to take part in Holy Week festivities.
The accident occurred on the highway linking Arequipa and Puno, when the bus skidded off the road and plunged more than 100 metres into a ravine, an attorney said.
Authorities said the death toll could rise as rescuers continue to work through the wreckage, with the effort hampered by the steep terrain.
Commander Raul Acosta, the national police chief of the emergency unit in Arequipa, said firefighters and civilians worked together to rescue the injured.
The cause of the accident has not been determined.
An estimated 3,500 people die each year in traffic accidents in Peru.