Jake Friend, who scored the match-sealing try in the 73rd minute, was also among the Roosters' best alongside Jared Waerea-Hargreaves and Aidan Guerra, whose 46th-minute try swung momentum strongly the home side's way after they led 12-10 at the break.
Brett Morris scored a 14th-minute try, then Joel Thompson put the visitors ahead in the 24th minute before Nene Macdonald touched down out wide in the 34th minute to put them in the lead.
Benji Marshall turned back the clock with a fantastic individual stepping effort in the 70th minute and threw a great pass for a try in the dying minutes to Josh Dugan, who was the Dragons' best.
The Roosters achieved the win with just 42 per cent of the ball.
The defeat leaves the Dragons losing touch with the top eight with five rounds to play.
Waerea-Hargreaves was put on report for a high shot on Mike Cooper in the 69th minute.
- AAP