A further 32 people were injured, nine of them seriously, after a canyon wall plunged into the water and onto motorboats on Furnas lake in Capitolio, Minas Gerais state, on Saturday.
Videos posted on social media showed a cluster of small boats near the cliff face when the rock smashed into the water, landing on two of the vessels. Onlookers could be heard screaming as other boats close to the scene sped off to escape.
Minas Gerais Fire Department commander Edgard Estevo said divers were searching for up to 20 people missing following the disaster, but some of those feared lost were located by phone.
Two boats were hit directly by the rocks and 24 people rescued from them alive, fire department spokesman Pedro Aihara said. Seven bodies have been recovered.
The people hurt in the accident had broken bones and one was in serious condition in hospital with head and facial injuries, authorities said. Some 23 others were treated for light injuries.
Furnas Lake, known as the “sea of Minas”, is a popular tourist attraction in the area round 418km (260 miles) north of Sao Paulo.
Heavy rain has fallen on Minas Gerais over the past two weeks, which state officials believe may have loosened the rock.
A video posted by Conexão GeoClima, a Brazilian scientific research organisation, showed tourists basking under the spray from a waterfall before the rocks fell.
It said in a tweet: “Minutes before the accident with a rock fall in Capitolio, Minas Gerais, a head of water was recorded in the Furnas Canyon waterfall. Note the sudden volume in the waterfall.”
Mr Estevo said the accident occurred between the towns of Sao Jose da Barra and Capitolio, from which the boats had launched earlier that day.
The governor of Minas Gerais, Romeu Zema, has reportedly sent messages of solidarity with the victims on social media.
The Brazilian navy has confirmed it will investigate the cause of the accident.