The Jutarnji List daily quoted officials of the Croatian bus company Cazmatrans as saying that the 21-year-old migrant got under the bus travelling from Belgrade to Zagreb on Tuesday.
It said he risked his life for five hours holding on to the axle with his arms and legs.
"We heard a loud noise under the bus... We called one of the bus drivers and when he heard the unusual sounds he stopped the bus," one of the passengers was quoted by the paper as saying.
Croatian police in a statement said they found the 21- year-old man at a roadside rest area after being called by the bus driver.
More From This Section
They said the migrant received medical attention but was not seriously injured. Police said they were checking the circumstances of his entry into Croatia.
Croatia, a European Union member, lies on a route that was used by hundreds of thousands of migrants travelling through the Balkans to western and northern Europe until authorities moved to stop them in 2016.