It was the home side who made the early running and they took the lead after just seven minutes when Markel Susaeta found the net with a cool finish from close range.
Bilbao were then reduced to ten men after 21 minutes when Javi Martinez was sent off for violent conduct in the area, before Zaragoza equalised from the consequent penalty, with Leonardo Ponzio finding the corner of the net.
Zaragoza might have gone ahead after 27 minutes when Maurizio Lanzaro found himself unmarked in the area, but he headed wide.
Chances were few and far between in the second period but Zaragoza were also reduced to ten men after 70 minutes when Lanzaro was dismissed for a second bookable offence.
There was to be a winner, however, and it was Bilbao who secured all three points after 87 minutes when Gaizka Toquero slotted home at the far post.
Bilbao will look to continue their winning run when they face Getafe on 8 January, while Zaragoza travel to Racing Santander.