The fast bowler was brilliantly supported by left-arm spinners Mohammad Rafique (3-35) and Abdur Razzak (3-38) on a day when Bangladesh kept the pressure on India, who won the toss, right from the opening over.
Opener Sourav Ganguly top-scored for India with a solid 66, but even he too was not allowed to score freely by the Bangladeshi seamers and spinners. He hit just four fours in his 129-ball knock.
Only Yuvraj Singh played with freedom in his team's below-par batting performance, smashing a 58-ball 47. He shared an 85-run stand for the fifth wicket with Ganguly.
"It was a good toss to lose," smiled Bangladesh skipper Habibul Bashar.
"When I saw the wicket this morning I thought it was a 250-wicket, it looked a good batting track but our new bowlers did very well.
"Then our spinners did a fantastic job. There wasn't a lot of turn but they put the ball in the right place."
Bangladesh, seeking a win against either India or Sri Lanka to boost chances of qualifying for the next round, bowled with great discipline with the new ball and fielded enthusiastically to seize the initiative.
First-timers Bermuda, the other side in Group B, lost their opening match by 243 runs against Sri Lanka.
Mortaza and left-arm seamer Syed Rasel did not allow India to score freely in their opening spells, while Razzak and Rafique continued the good job to reduce the opposition to 72-4.
A little went right for India after winning the toss as they failed to cope with Mortaza and Rasel on a pitch which offered both bounce and movement.
Bangladesh, who had won just one of their previous 14 matches against India, looked a different team as Mortaza and Rasel kept non-stop pressure on the Indian batting line-up.
Mortaza troubled the top-order batsmen with his bounce and movement, sparking celebrations in his second over when he dismissed out-of-form opener Virender Sehwag.
Sehwag, with just one half-century in his last 13 matches, had made only two when he looked back in horror to see his middle stump out of the ground after inside-edging a Mortaza delivery.
Mortaza was to jolt India again when he had Robin Uthappa (nine) caught by Aftaf Ahmed at point. He was instrumental in keeping the batsmen silent with Rasel, who bowled his quota of 10 overs in one disciplined spell.
Razzak and Rafique saw to it that India continued to struggle for runs, removing batting stars Sachin Tendulkar and skipper Rahul Dravid cheaply.
Tendulkar (seven) was caught behind, the ball hitting the pads before going to wicket-keeper Mushfiqur Rahim. Dravid (14) was trapped leg-before by Rafique.
Both the teams observed a minute's silence before the match in memory of Bangladeshi cricketer Manjural Islam, who died in a road accident near Dhaka on Friday.
India 191 all out in 49.3 overs (Sourav Ganguly 66, Yuvraj Singh 47; Mortaza 4 for 38, Mohd Rafique 3 for 35, Abdur Razzak 3 for 38) Vs Bangladesh.