Aru (Astana) attacked a select group of riders which included race leader Alberto Contador (Tinkoff-Saxo) to finish ahead of Ryder Hesjedal (Garmin-Cannondale) and Rigoberto Uran (Etixx-QuickStep).
Contador retained the race lead but Aru swapped places with Astana team-mate Mikel Landa to move into second place overall at 4min 37sec. Landa rounded out the top three at 5min 15sec. Those three riders are expected to finish in that order in Milan.
"I kept an eye on my closest rival, Mikel Landa. You have to take a tactical decision in the end," Contador said.
"Landa and Aru could have taken turns to attack all the way up the final climb. Obviously, I'd like to win a stage, but it is hard: the final group is always small and I don't have team-mates with me because they work hard early in the stage, so the result today is perfect for me."
Stage 19 travelled 236km from Gravellona Toce to Cervinia and featured three Category 1 climbs in the final 100km.
The break containing Giovanni Visconti (Movistar), Vasil Kirijenka (Sky), Esteban Chaves (Orica-GreenEDGE), Pavel Kosjetkov (Katusha), Marek Rutkiewicz (CCC-Sprandi-Polkowice), Diego Ulissi (Lampre-Merida), Nick van der Lijke (LottoNL-Jumbo) plus AG2R pair Carlos Betancur and Matteo Montaguti were kept on a tight leash even when it split on the Col de St. Barthélemy.
On the next climb, the Col de St. Pantaléon, Visconti left Kosjetkov, Kirijenka and Chaves to go it alone with the time gap reducing as a result of Astana’s efforts in the chase.
A third battle was also occurring on the road. The contest for the mountains classification was tight with Steven Kruijswijk (LottoNL-Jumbo) and Benat Intxausti (Movistar) only a single point apart on the classification.
At the end of the day it was Intxausti who pulled on the blue jersey after he outclassed Kruijswijk on two occasions.
With Visconti captured, the final 10km to the summit at Cervinia became animated with Contador, Landa and Aru, Hesjedal, Konig and Kruijswijk all in the mix for the stage victory.
Hesjedal went first and was chased and dropped by Aru as Contador sat in to cover second placed Landa as Konig and Kruijswijk played passenger.
Uran bridged from a third group to join the party and rode through to third place on the road but was unable to carry his effort further.
The final three kilometres stayed steady but with a high work rate as Aru drove to the summit finish with Hesjeadl, Uran and the Contador group in tow.
"If you ask anyone which they would prefer, a stage win or the Maglia Rosa, they'll say the Maglia Rosa, so I'm very, very happy because I've got through another very hard day," Contador said.
"Tomorrow the stage is really nice, with a very hard climb, perhaps harder than the climbs today. My job will be to withstand the attacks, and it might even be a day when I attack, you never know."
Stage 19: 236km, Gravellona Toce to Cervinia
1 Fabio Aru (ITA) Astana 6hr 24min 13sec
2 Ryder Hesjedal (CAN) Cannondale-Garmin 0:00:28
3 Rigoberto Uran (COL) Etixx-QuickStep 0:01:10
4 Tanel Kangert (EST) Astana 0:01:18
5 Steven Kruijswijk (NED) LottoNL-Jumbo
6 Alberto Contador (ESP) Tinkoff-Saxo
7 Mikel Landa (ESP) Astana
8 Leopold Konig (CZE) Sky 0:01:21
9 Mikel Nieve (ESP) Sky 0:01:24
10 Alexandre Geniez (FRA) FDJ 0:02:24
1 Alberto Contador (ESP) Tinkoff-Saxo 78hr 48min 40sec
2 Fabio Aru (ITA) Astana 0:04:37
3 Mikel Landa (ESP) Astana 0:05:15
4 Andrey Amador (CRC) Movistar 0:08:10
5 Leopold Konig (CZE) Sky 0:10:47
6 Yury Trofimov (RUS) Katusha 0:11:11
7 Ryder Hesjedal (CAN) Cannondale-Garmin 0:12:05
8 Damiano Caruso (ITA) BMC 0:12:14
9 Steven Kruijswijk (NED) LottoNL-Jumbo 0:12:53
10 Alexandre Geniez (FRA) FDJ 0:15:07