The Cardinals trailed 10-0, giving up two quick scoring drives. They took a 17-13 after a 94-yard touchdown drive.
But the 49ers have answered with a 78-yard drive of their own.
Jerick McKinnon’s 5-yard touchdown catch from Jimmy Garoppolo with 8:38 remaining has the 49ers back on top 20-17. It was McKinnon’s first touchdown since 2017.
Quarterback Kyler Murray ran 22 yards to the end zone to give the Cardinals their first lead with 10:26 remaining in the fourth quarter. He leads Arizona with 84 rushing yards on nine carries, and he has completed 22 of 35 passes for 182 yards with a touchdown and an interception.
The Cardinals got plenty of help from the 49ers defense on the go-ahead drive.
49ers cornerback K’Waun Williams was called for defensive holding on DeAndre Hopkins on third-and-three on a Murray incompletion at the Arizona 6-yard line.
On a second-and-21 play, Kerry Hyder was called for a questionable unnecessary roughness penalty. Murray slid feet first and Hyder when over the top of Murray, barely grazing him. Fox rules analyst Dean Blandino second-guessed the penalty.
On a second-and-11 play, Murray threw incomplete to Christian Kirk. Emmanuel Moseley was called for pass interference, giving the Cardinals 13 yards.