Salt Lake created a 1-1 draw with 15 minutes remaining when Luis Gil scored while his team was playing a man down. Philadelphia then regained the lead a minute later on a goal from Conor Casey.
The Union let the victory get away, however, when Raymond Gaddis was called for a handball inside the penalty area. Morales converted to run Salt Lake's unbeaten streak to seven games.
Salt Lake (10-5-4) moved two points in front of Dallas for the lead in the Western Conference, although Dallas has two games in hand.
Philadelphia (7-5-6) is tied for third in the East with Kansas City, which played to a 1-1 tie with Vancouver on Wednesday.