Cedric Benson's 23-yard touchdown run around left end with 9:14 left cut the Steelers' lead to 20-15.
And after the Steelers failed in an attempt to run out the clock, the Bengals regained possession at their own 29 with 5:14 remaining. They converted two fourth-down plays and scored the winning touchdown on a 4-yard Carson Palmer pass to Andre Caldwell with 18 seconds left. Palmer threw to Brian Leonard for a 2-point conversion and the final 3-point margin of victory.
The Steelers outgained the Bengals by 100 yards, 373-273, and could not take advantage of a 13-0 first-half lead.
The Steelers drove to the 1-yard line on their first possession and settled for a 19-yard Jeff Reed field goal.
At that point, the Steelers had held the Bengals to minus 10 yards of total offense, but the Bengals began to rally on their final drive of the half when Shayne Graham kicked a 34-yard field goal.
The Bengals cut the lead to 13-9 early in the third quarter when Johnathan Joseph intercepted Roethlisberger and returned it 30 yards for a touchdown. The snap sailed over the holder's head on the extra-point attempt.
The Steelers pushed the lead back to 20-9 when Roethlisberger sneaked 1-yard for a touchdown. But conservative playcalling in the fourth quarter and a leaky defense allowed the Bengals to beat the Steelers at home for the first time since 2001.
With 93 yards on 25 carries, Parker had his most productive game of the season, but gained only 24 yards on 12 carries in the second half.
Rookie Mike Wallace caught 7 passes for 102 yards to lead Steelers receivers.