Hammers captain Mark Noble's first goal of the season came via the penalty spot and ensured the visitors held the half-time advantage.
Palace dominated after the break, but just as it looked like a leveller would elude the Eagles — James McArthur missed a glorious chance — Zaha's heavily deflected effort secured a valuable point.
Roy Hodgson's men are now unbeaten in four games, while West Ham has failed to win any of its past five matches in all competitions.
In a lively start to the contest, Vicente Guaita saved efforts from Ryan Fredericks and Robert Snodgrass as West Ham threatened on the counter-attack, while Lukasz Fabianski denied McArthur at the other end.
It was the visitors who struck first, Noble sending Guaita the wrong way with a 27th-minute spot-kick after the goalkeeper clattered into Michail Antonio in the penalty area.
Fabianski was at full stretch to keep out Christian Benteke soon after, and the hosts went into the break behind.
McArthur somehow failed to convert a glorious Palace chance eight minutes after the restart, hitting the post from five yards after beating the offside trap in one of the misses of the season.
Patrick van Aanholt, who created that chance, sent a superb volley just over prior to the introduction of Michy Batshuayi from the bench, the striker replacing Benteke after an hour.
Batshuayi fired off target from another glorious Palace chance created by Van Aanholt, but the equaliser finally came 14 minutes from time.
A fortunate one-two between Zaha and McArthur led to the forward's shot from six yards taking a massive deflection off Issa Diop to beat Fabianski at his near post.