Young off-spinner Afif Hossain claimed two wickets for nine to help Bangladesh limit Afghanistan to 138-7 in Saturday's tri-nation Twenty20 international in Chittagong.
Hazratullah Zazai took 47 off 35 balls in a 75-run opening stand with Rahmanullah Gurbaz before Afif's double strike in the tenth over swung the match to the hosts.
Shafiqullah was unbeaten on 23 off 17 balls after a blitz through the visitors' middle order.
Mohammad Saifuddin, Shafiul Islam, Shakib Al Hasan and Mustafizur Rahman all claimed a wicket each for Bangladesh.
Both teams have already qualified over Zimbabwe for next week's final in Dhaka after each winning two of three matches in the tournament.