SINGAPORE—A crowd of about 400 foreign workers, angered by a fatal road accident, set fire to vehicles and attacked police and emergency services workers late Sunday in Singapore's ethnic Indian district, injuring at least 18 people in a rare riot in the city-state.

Police and eyewitnesses say the riot, the first major outburst of public violence here in more than four decades, started at about 9:23 p.m. local time (1323 GMT) after a bus hit and killed an unnamed 33-year-old Indian man in the Little India neighborhood, prompting...