Darren Ambrose scored his 10th goal of the season to leave Gordon Strachan still waiting for his first point since being appointed Middlesbrough boss.
Crystal Palace's top-scorer struck in the 64th minute as he showed great composure when Neil Danns headed Alan Lee's cross into his path, flicking the ball up with his right foot before steering it past the advancing Brad Jones.
Boro's best chance of an equaliser came in the 75th minute, on-loan Birmingham forward Marcus Bent flicked the ball over the top of the home defence to send Gary O'Neil clean through but his delicate lobbed finish was clawed away by Speroni.
Ambrose went close with a free-kick after just three minutes, his 25-yard effort flashing just wide of Jones' right post.
Speroni was forced into his first important stop of the afternoon on 15 minutes. Sean St Ledger's pass found Leroy Lita in the box, but Jose Fonte nicked the ball off the striker's foot, the Palace shot-stopper was forced to dive to his right to prevent an own goal.
Palace had another great chance on 32 minutes as Danny Butterfield drove the ball in from the right and Lee sent his header just past the upright.
Boro made a positive start to the second half and Lita squandered a great chance in the 55th minute.
They broke from a Palace corner and the visitors had a four-on-one advantage, but the former Reading striker greedily elected to shoot across the face of goal from a tight angle, much to the annoyance of his team-mates.
It proved a costly error of judgement as Ambrose continued his fine scoring form, coolly firing the ball in from ten yards, his fourth goal in as many matches.
David Wheater's 74th-minute header was scrambled off the line as Strachan's side pressed for an equaliser and Speroni, cheered off the pitch at the final whistle, produced another vital save as he kept out Jonathan Franks' low shot.