The visitors remain third in League One after a disappointing performance but squandered the point Kevin van Veen's second-half finish appeared to have earned until Tony Watt's late penalty.
That was after Johnnie Jackson's first-half volley had given the 14th-placed hosts the lead.
As the team pursuing the division's top two visiting another which had lost five of their past six fixtures, Scunthorpe played with little conviction on an evening when kick-off was held up for 15 minutes by delays and cancellations on public transport.
It was in the 33rd minute when Charlton went ahead. Ricky Holmes sent a right-wing corner into the crowded penalty box, and from there Jackson impressively stretched and volleyed with his weaker right foot beyond goalkeeper Luke Daniels.
An error from Declan Rudd, in the 75th minute when Charlton were once again looking comfortable, led to Scunthorpe's equaliser. The goalkeeper made an unorthodox effort at catching a high ball with Paddy Madden attempting to head and appeared to have succeeded until spilling to Van Veen, who took his time before finishing into a near-open goal.
As the game entered stoppage time, from an unconvincing attack Jorge Teixeira was brought down in the area by Murray Wallace, and from substitute Watt calmly struck inside the post to score his first goal since returning to his parent club in January, and first since August 27.
Match report supplied by the Press Association.
Charlton delivered a blow to Scunthorpe's hopes of promotion as a home win secured their first victory in nine.