The home side had the first meaningful chance of the contest on 13 minutes when Sergej Milinkovic-Savic played a through-ball to Balde Keita, who made a good run to get inside Juve keeper Neto, only to fluff his lines at the crucial moment and send the ball over the crossbar.
The visitors were left to rue an opportunity lost early in the second half when Zaza played through on the left to Alvaro Morata, who showed good pace before sending an effort into the hands of Berisha. Zaza was well-placed for the follow-up but could only send it into the side-netting.
Goal-line technology was required as the ball finally went into the net on 66 minutes amid a goalmouth scramble. Zaza's initial effort cannoned off the left post and fell to Lichtsteiner, who sent his follow-up an inch over the line before being palmed out.
Juve were in the ascendancy and had multiple chances to put the game to bed in the dying moments, with Zaza and Dybala combining to good effect, but could not find their way past an alert Berisha.
Massimiliano Allegri's men will now go on to face Inter Milan in the semi-finals next week.