The ruling comes nearly two months after the vote, in which 92% of Iraqi Kurds supported secession.
Following the ballot, Iraq’s government seized disputed territory, including the oil-rich province of Kirkuk.
The head of Iraq’s autonomous Kurdistan Regional Government, Nechirvan Barzani, called the ruling “unilateral”, but said he would not challenge it.
The top court also decided to annul “all the consequences and results of the referendum”, a statement said.
Iraqi Prime Minister Haider al-Abadi welcomed the ruling, saying his government “refused to have anything to do with” the vote.
An offer by the Kurdish government to “freeze” the referendum results was rejected by Mr Abadi, who demanded its annulment by the Kurds.
Three weeks after the vote Iraqi forces began a takeover of disputed areas controlled by Kurds since 2014 that are claimed by both sides.
The Iraqi government also said it was preparing to take control of Iraqi Kurdistan’s only border crossings with Turkey and Syria.
The Kurdish setbacks also led regional President Massoud Barzani to step down. In a bitter TV address announcing his resignation earlier this month, he defended the controversial referendum he had called.