Cortese (Ajo KTM) finished second but extended his points advantage over Vinales to 29 after the latter fell at the final turn.
It was the Avintia FTR-Honda rider who had made the early move in the race, breaking free of a pack of nine riders and forcing Cortese and Salom (RW Kalex-KTM) to take up the chase.
By the half-way mark the three had moved clear of a chasing group of five riders, swapping positions regularly as the race headed into the final stages.
Going into the last lap there was less than half a second to choose between the trio, with Cortese heading Vinales and Salom.
That all changed down the back straight, when Vinales got an excellent tow and dived down the inside - only to find Salom had done the same to him and jumped from third to first in an excellent move.
Cortese tried to respond but ran slightly wide hounding Salom and Vinales dived back down the inside, with the trio remaining locked together until the final turn when Vinales ran wide and lost the front of his bike.
Salom hung on to claim his first win in Moto3, 0.056s ahead of Cortese, while Aspar's Jonas Folger inherited third, just over two seconds down the road.
Miguel Oliviera (Monlau Honda), Romano Fenati (Italia FMI FTR-Honda), Zulfahmi Khairuddin (Ajo KTM) and Alex Rins (Monlau Honda) all finished within eight seconds of the lead, having been part of the earlier nine-bike battle for first.