Atalanta, who earned a 2-2 draw against Serie A leaders Juventus at Bergamo in December, pulled off another surprise result, ensuring Juve would not win the competition for a fifth season running.
Castagne caught out Joao Cancelo and drilled home from the edge of the box to put the hosts ahead, with Zapata lashing in the second moments later.
Furious Juventus coach Massimiliano Allegri was sent off after throwing his jacket onto the pitch after the second goal. The Old Lady were not stirred into action, however, and failed to record a single shot on target in the first half.
Zapata pounced for his second in the final stages, taking his tally to 17 goals in his last 10 games across all competitions.
(Reporting by Rik Sharma; Editing by Toby Davis)
