Svetoslav Todorov came off the bench to secure three points for Charlton.
He had only been on the pitch briefly before he took advantage of slack defending to beat the advancing Julian Speroni with 16 minutes left.
Charlton keeper Nicky Weaver kept Palace at bay, saving James Scowcroft's header and saving well from Besian Idrizaj late on.
Keeper Speroni did well to deny Charlton substitute Izale McLeod a second in injury time.
Crystal Palace boss Peter Taylor:
"I don't think we deserved to lose, everyone has given their all but we messed up for the goal big time.
"If the goalkeeper (Julian Speroni) comes out and calls for it he has to claim it. I don't expect us to concede goals like that.
"But people make mistakes and they have to bounce back. Julian has been as safe as houses for us."
Charlton boss Alan Pardew:
"We've done a job today. We didn't open up and play like we would at home but it was important to get our first away win.
"We don't deserve massive plaudits but we've done a good job.
"I enjoy coming back here, I always get a nice reception and the fans are brilliant. It's been a great day."
Crystal Palace: Speroni, Lawrence, Hudson, Cort, Craig, Soares, Fletcher (Martin 79), Kennedy, Hughes (Ifill 57), Scowcroft, Morrison (Idrizaj 71).
Subs Not Used: Flinders, Fonte.
Booked: Scowcroft.
Charlton: Weaver, Mills, Fortune, McCarthy, Powell, Jerome Thomas (Todorov 67), Ambrose, Zheng, Semedo (Racon 72), Reid, Iwelumo (McLeod 90).
Subs Not Used: Randolph, Sam.
Booked: Ambrose.
Goals: Todorov 74.
Att: 18,556
Ref: Nigel Miller (Durham).
Bookmark with:
What are these?