The Uruguayan found the net twice in the second half to give the Bianconeri a huge advantage heading into the second leg to be played in Turin in six weeks' time
Caceres, in his first game back at Juve on loan from Sevilla, fired the Bianconeri ahead on 53 minutes, but Stephan El Shaarawy levelled matters just nine minutes later to restore parity. Caceres' lofted effort in the closing stages proved the decider though, sending the tie to Turin with Juve in the box seat.
The visitors set the pace for much of the first half, taking the game to Milan with their usual fluid style, but after Marco Borriello failed to make the most of two good positions, El Shaarawy got himself into some space deep in Juve territory in one of the first moments of real threat. However, the young forward’s shot from near the byeline flashed just across the face of goal with no Milan team-mate around to tap in the loose ball.
A Juventus attack at pace down the left almost led to a goal at the other end, but after originally slipping, Marcelo Estigarribia leapt back up only to fire just wide of the far post. Moments later Emanuele Giaccherini drifted into space and sent a deflected effort looping towards the top corner of Marco Amelia’s net, but the Milan keeper scrambled across to push the ball over.
Further half chances came and went in the first half as Juve failed to turn their superiority into a half-time lead. But it would take them less than eight minutes to break the deadlock after the restart.
After a surging run forward by Simone Padoin ended in a collision with Thiago Silva, the ball broke for Borriello, whose shot was parried away by Amelia but only into the path of Caceres, who tapped home unchallenged to give his side a deserved lead.
The Rossoneri soon got onto level terms, though. A fantastic left-footed cross on the run from Luca Antonini found Massimo Ambrosini at the far post, and the skipper's cool header back into the centre made it easy for El Shaarawy to side-foot home.
Moments later, the home side thought they'd taken the lead when Zlatan Ibrahimovic beat Marco Storari from eight yards, but the Swede was adjudged to have deliberately handled the ball as it came to him from Mark van Bommel's deflected shot.
Mirko Vucinic passed up a good chance to put Juve back in front after Ambrosini lost the ball to Fabio Quagliarella, and then the Montenegrin failed to make enough space to get a shot away as he was crowded out in the Milan box.
However, the Bianconeri weren't to be denied, as wing-back Caceres bagged a second goal seven minutes from time, lifting a side-foot shot across Amelia into the far corner of the net after Ambrosini failed to clear Giaccherini's searching pass.
The result makes Juventus big favourites to progress ahead of the second leg at Juventus Stadium on March 21, with their unbeaten run in all competitions this season having been stretched to 24 games.