Zach Maynard was 20-for-35 for 205 yards and two touchdowns, both to Naaman Roosevelt, for the Bulls (3-4, 1-2 Mid-American Conference).
Roosevelt, who had 12 receptions for 100 yards, became Buffalo's all-time career receptions leader with 250 catches.
Patrick Nicely was 17-for-34 for 200 yards with two interceptions for Akron.
The Zips (1-5, 0-3) took a 7-0 lead when guard Mike Ward jumped on a loose ball in the Bulls' end zone. Buffalo tied it with 8:47 left in the first half on a 7-yard scoring pass from Maynard to Roosevelt.
Maynard's 8-yard scoring strike to Roosevelt with 4:34 left in the third gave Buffalo a 14-7 lead.
Alex Allen scored on a 1-yard run to tie it at 14, then Branko Rogovic put Akron ahead 17-14 with a 30-yard field goal.