"We were just too careless with the ball," Seattle coach Mike Holmgren said. "That's pretty much the game in my opinion."
Edgerrin James topped 100 yards rushing for the second game in a row and Matt Leinart threw touchdown passes of 56 and 5 yards to lead the Cardinals (4-9) to their third victory in four games.
The last of Seattle's three lost fumbles led to Leinart's 5-yard scoring pass to Larry Fitzgerald for the go-ahead score on the first play of the fourth quarter.
After Neil Rackers' 40-yard field goal with 3½ minutes to go to put Arizona up by six points, Seattle (8-5) drove from its 17 to the Cardinals 15.
But on third-and-12 from the 17, ex-Seahawk Chike Okeafor sacked Matt Hasselbeck for an 8-yard loss.
On fourth down, Hasselbeck threw to Deion Branch, but the receiver was tackled by Adrian Wilson at the Arizona 6, less than a yard shy of the first down.
It was the last of several big plays by the Arizona safety.
"Big tackle -- Adrian, fumble recovery -- Adrian, break up on the pass -- Adrian," Cardinals coach Dennis Green said. "That's the kind of game he had and the kind of game he has every week."
Green called Okeafor's play "the pass rush of the year for us."
"He went up against maybe the best lineman in the game -- Seattle tackle Walter Jones -- and made a great move," Green said.
Seattle had won four of five and, with San Francisco's loss to Green Bay, could have wrapped up the division crown. Instead, the Cardinals have won two in a row for the first time this season.
The Seahawks may well have lost a fourth fumble had Hasselbeck not made a head-first dive to recover it.
"We had some opportunities and it came down to the last play of the game basically," Hasselbeck said. "It's hard to overcome a few and it's very hard to overcome a bunch of fumbles. That's just kind of where it was today."
James, who had no 100-yard efforts in his first 11 games with the Cardinals, gained 115 yards on 26 carries to become the first Arizona back to have consecutive 100-yard games since Marcel Shipp in 2003.
"Edge is just running the ball great," Leinart said. "He's finding holes, he's finding seams, he's dragging guys, making guys miss. When we're putting all this together as an offense, it's tough to stop us."
Leinart completed 21 of 34 for 232 yards, including a 56-yard touchdown pass to Bryant Johnson on Arizona's first play from scrimmage. He was intercepted once but not sacked in another good showing by the Cardinals' improving offensive line.
"As the quarterback is growing and everybody gets used to playing with each other, that's what's going to happen," James said. "You're going to see that week in and week out because a team can't just key in on one thing."
"You play a young quarterback and it's very simple," Seattle defensive end Bryce Fisher said. "If you knock him down, he'll find a way to lose. If you don't knock him down, he'll look like he's on the way to the Pro Bowl."
Hasselbeck, in his third game back from injury, completed 20 of 28 for 243 yards and three touchdowns with no picks, but he fumbled the ball away once and was sacked three times. Shaun Alexander gained 76 yards in 22 carries and lost a fumble.
Down 14-0 in the first quarter, the Seahawks rallied and took the lead for the only time in the third quarter.
Taking over at its 44 after Rackers' 53-yard field-goal try was wide left, Seattle needed 11 plays to go 57 yards, with Hasselbeck rolling right on third down and throwing 2 yards to Darrell Jackson for the score to go up 21-17 with 5:05 left in the period.
But Seattle turned it over again when Karlos Dansby stripped the ball from Mack Strong and Chris Cooper recovered at the Seattle 36. James' 17-yard run set up Leinart's short scoring pass to Fitzgerald on the first play of the fourth quarter, and Arizona regained the lead 24-21.
Notes: Green gave the game ball to offensive tackle Reggie Wells, who played despite a temperature of 103 degrees when he woke up. ... Rackers is 1 for 6 from 50 or beyond this season after going 6 for 7 last year. ... Seattle defensive tackle Craig Terrill sprained his right knee in the first half and did not return. Jackson went out with a toe injury on the Seahawks' last drive.