The Bluebirds were not at their best and the home side were unlucky to slump to a sixth defeat in their last eight matches.
Paul Hart's team have won just one of their last 13 games and are in dire danger of dropping into League One.
Palace made the worst possible start as they conceded in the fourth minute.
Peter Whittingham's corner was cutely flicked on by Stephen McPhail at the near post and Gabor Gyepes stabbed the ball in from close range.
But the Eagles responded well to the setback and Clint Hill's header from Darren Ambrose's free-kick came back off the crossbar in the 18th minute with City keeper David Marshall beaten.
Marshall made a smart save at his near post to keep out a strike from Ambrose and Palace's top-scorer also produced a deft lob which dropped just over the bar.
Cardiff almost snatched a second against the run of play when Michael Chopra lifted the ball into the path of Kelvin Etuhu but Eagles keeper Julian Speroni made an instinctive save to keep out his shot.
Ambrose squandered a good chance in the 47th minute when Sean Scannell's low cross fell into his path at the back post but he could only send his shot harmlessly wide.
And just three minutes later, Palace looked like they should have had a penalty as Stern John was pulled over by Tony Capaldi in the penalty area but referee Carl Boyeson waved away their appeals.
The Eagles did equalise in the 58th minute when Hill powered his way onto Ambrose's corner to head in from six yards out.
But Cardiff, despite being on the back foot for long spells in the match, went back in front on 67 minutes.
Mark Kennedy's free-kick was headed down by Chopra and Burke chested the ball inside of McCarthy before slamming a right-foot volley beyond Speroni.
Palace kept pushing for an equaliser and they managed to create little in the closing stages as a Scannell shot which deflected wide was the closest they came.