Around 100 passengers were plucked to safety after their vessel keeled over in heavy seas en route to a remote island.
"The wind suddenly picked up and the boat was forced to stop when the bow started taking in water. Passengers ran to the side just before it tipped over," student Donel Mendiola told DZMM radio.
"Some of us swam, but I saw some old people who were apparently already dead," Mendiola added.
ABS-CBN aired footage of rescuers wheeling injured survivors into a hospital. Four body bags were also seen being laid out on the floor.
The "Mercraft 3" tipped over between the remote island of Polillo and Real town, about 70 kilometres east of Manila, shortly before noon (0400 GMT), the coastguard said.
"We have rescued more than 100 people," Chief Inspector Mark Amat, the police chief of nearby Infanta town, said.
Amat declined to discuss the reported deaths.
The coastguard said the ferry was carrying 251 passengers and crew when it left the port of Real for Polillo, a 2.5-hour trip.
"We have heard (there were) casualties, but we’re still validating," coastguard spokesman Armand Balilo told a news conference in Manila, adding that rescue helicopters and vessels were heading to the site.
"We believe the weather was a big factor" in the accident, he said, adding nearby boats had already rescued some of those on board.
Balilo said the ferry left Real as Tropical Storm Tembin loomed over the southern Philippines, nearly a thousand kilometres away.
The vessel, which is licensed to carry up to 286 people, was allowed to sail as there were no storm warnings at or around Real or Polillo, he said.
The government had advised Filipinos planning to return to their home provinces for Christmas to do so earlier than usual to avoid heavy weather forecast to hit ahead of the holidays.
The Philippines, an archipelago of more than 7,000 islands on the Pacific typhoon belt, is plagued by poor sea transport, with badly regulated boats and ships providing the backbone of a system prone to overcrowding and accidents.
The latest incident occurred 30 years after another Philippine ferry, the "Dona Paz", collided with an oil tanker in a pre-Christmas accident that claimed more than 4,000 lives in the world’s worst peacetime disaster at sea.
More recently, the wooden ferry "Kim Nirvana" capsized shortly after departure off the city of Ormoc in the central Philippines in 2015, killing 61 people.
The accident was thought to have been due to overcrowding. As well as passengers, the boat had also been transporting sacks of cement, rice and fertiliser which would have weighed as much as 7.5 tonnes.
In 2013, at least 71 were killed when the "Saint Thomas Aquinas" ferry sank after colliding with a cargo ship near Cebu port in the central Philippines.
The ship was carrying 830 passengers and crew. VNS