The 11-0 vote with four abstentions came after the US agreed not to veto the measure, following weeks of talks.
Washington had received assurances that no US members of any peacekeeping operation in Sudan would be prosecuted.
A UN report two months ago said attacks on civilians in Darfur could amount to crimes against humanity.
The report said such cases should be tried at the court in The Hague.