The Egypt international has hit the ground running since arriving on loan from Chelsea during the transfer window and netted a brace to hand Fiorentina the advantage heading into the second leg in Florence next month.
Salah opened the scoring in the 11th minute when, following a period of Juve dominance, he broke clear to send a left-footed effort beyond goalkeeper Marco Storari.
Fernando Llorente pulled Juve level with a headed effort, but Salah was on target again after the break – again 11 minutes into the half – to condemn the hosts to their first defeat in normal time since October.
Salah has now netted six goals in seven appearances in all competitions, having made just four starts.
Only four players kept their place in the Juventus starting XI following a 1-1 Serie A draw at Roma on Monday, and one of those men, Arturo Vidal, proved to be a nuisance for the Fiorentina defence from the off - blasting over with little more than a minute on the clock, before side-footing wide of the right-hand post moments later.
Fiorentina also made seven changes from their last league outing and, after Jasmin Kurtic drilled wide from the visitors' first chance, Salah shook off Simone Padoin as he surged forwards to guide a shot past Storari from the left side of the six-yard box.
That lead lasted just 13 minutes, though, as Llorente rose highest to head in a Simone Pepe cross off the left-hand upright – just his second goal of 2015.
Matias Fernandez stung the palms of Storari from 25 yards out on the half-hour mark, and Fiorentina should have re-taken the lead soon after when Jose Maria Basanta sent a close-range header against the post after Mario Gomez had scuffed an effort.
Vidal ended the half as he had started it, causing problems for the visiting defence, but was unable to find the target as he headed narrowly wide.
Fiorentina applied the pressure at the beginning of the second half, with Micah Richards testing Storari at his near post, before Salah again forced his way through the home defence and applied a smart finish to put his side back in front.
Juve appeared to wake up with half an hour to play, but struggled to turn possession into meaningful goalscoring opportunities.
In fact, it was Fiorentina substitute Josip Ilicic who next came close to finding the net when he drilled wide in the 71st minute, before Roberto Pereyra squandered a glorious opportunity to restore parity by glancing off-target from a central position with 10 minutes left to play.
The visitors held out for an important win in their bid to win this tournament for the first time since 2001, while Juve - who have not won the cup for 20 years - will need to up their game for the return leg in April.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.