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.
News that makes sense
Your trusted source for staying up-to-date with the world around you. Get free daily news updates and analysis, straight to your inbox.
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)
