The two teams were tied 1-1 at full-time.
Thailand dominated the first 15 minutes but lost momentum after captain Chanathip Songkrasin had to leave the field with an injury.
Malaysia took the lead through La’Vere Corbin Ong in the 32nd minute of the first half, but Thailand’s Pansa Hemviboon pulled off the equaliser in injury time, forcing a penalty shootout.
The hero for Malaysia was their goalkeeper Ahmad Syihan Hazmi Mohamed, who saved the kick from Thailand’s Supachok Sarachat, leading to Malaysia winning the shootout 5-3.
In the final on Sunday, Malaysia face Tajikistan who beat Trinidad and Tobago in the other semi-final, while Thailand will play Trinidad and Tobago for third place.
The Sunday matches, start from 5pm and will be broadcast live via channel 32 and AIS Play.