Running back Noel Devine played sparingly after tweaking an ankle and the Mountaineers (7-2, 3-1 Big East) were outgained 301-273, but improved to 6-0 at home. Devine was limited to 56 yards on 13 carries to surpass 1,000 yards for the second straight season.
Louisville (3-6, 0-4) couldn't take advantage of Darius Ashley's 164 yards rushing and fell to 0-5 on the road. Redshirt freshman Will Stein went 14-of-26 in his first road start but was sacked five times.
Cardinals kicker Chris Philpott made field goals of 37, 44 and 29 yards.
Ashley, playing in place of Victor Anderson who missed his second straight game due to injury, became the third rusher to surpass 100 yards against the Mountaineers this season.
Devine has been the go-to guy when the Mountaineers needed him all season. But when Devine went out late in the first half, his teammates did enough to keep Louisville at bay.
Jock Sanders gained 29 yards on the first drive of the second half and freshman Tavon Austin capped it with a 9-yard touchdown run for a 14-6 lead.
Louisville's Cory Goettsche shanked two straight punts in the third quarter and one of them led to a West Virginia field goal. After Goettsche's second short punt, Brown couldn't handle a high snap and Louisville's L.D. Scott recovered at the West Virginia 42.
But a holding call erased a 10-yard TD pass from Stein to Doug Beaumont early in the fourth and the Cardinals settled for a short field goal to trail 17-9.
Louisville had one final chance to tie the game. Stein completed two straight passes and ran nine yards to the West Virginia 42. But he was sacked by Julian Miller on consecutive plays and threw two straight completions in the final minute to end the threat.
The teams combined for 15 punts, including six on their first seven possessions combined.
Late in the first quarter, Chaz Thompson stepped in front of Brad Starks in the end zone and intercepted Brown, who also overthrew a wide-open Alric Arnett in the end zone in the period.
Louisville finally got going late in the second quarter on Trent Guy's career-best 53-yard run to the West Virginia 15, but holding penalty forced the Cardinals to kick another field goal.
That's when West Virginia's offense also came alive. Devine went 20 yards around right end and Arnett went 29 yards on a pass reception to the Louisville 10. On third-and-goal from the 8, Brown hit Sanders with a screen pass and he went untouched into the end zone. Brown, who hurt his right leg in the fourth quarter but sat out only one play, finished 9-of-17 for 94 yards.
With the second ticking down in the half, Guy returned the ensuing kickoff to the Louisville 45. Stein hit two straight passes, Philpott kicked his career-best 44-yard field goal and the Cardinals trailed 7-6 at halftime.