The India discard utilised the helpful conditions well from the end opposite to the pavilion, by making the ball jump and turn from a good length spot, to trigger the hosts' collapse from a healthy-looking 129 for one to 273 for eight.
Joshi, who last played for the country three years ago, claimed five for 100, including a superb eight-over post-lunch spell in which he took three for 22, as Mumbai lost their wayafter being given a flying start by opener Vinayak Mane (67) and one-down Vinit Indulkar (47).
Mane and Indulkar put on 102 runs for the second wicket after the early fall of Test discard Wasim Jaffer (7) at 27 in the pre-lunch session.
But Joshi and rookie medium pacer Vinay Kumar struck a blow each to send back the two batsmen in the space of six balls and at the same score soon after the break.
The double strike broke the dominance of Mumbai, who won the toss and chose to bat first, as the home team lost wickets at regular intervals thereafter.
Barring left hander Nishit Shetty, who played a breezy knock of 65 with six fours in 121 balls, the rest of the Mumbai middle and lower order failed to prosper.
Brief scores: Mumbai 273 for 8 (Vinayak Mane 67, Vinit Indulkar 47, Nishit Shetty 65, Vinayak Samant batting 17, Nilesh Kulkarni batting 0; Vinay Kumar 2 for 55, Sunil Joshi 5for 100) v Karnataka.