The new determination by the Government Accountability Office, or GAO, comes as the Senate is set to take up the articles of impeachment against Trump, which were delivered from the House on Wednesday.
Last June, Trump placed a hold on $214 million of security assistance from the Pentagon for Ukraine, as it battles Russian-led separatists in its eastern provinces. The White House Office of Management and Budget, or OMB, told Congress, which had passed the budget law appropriating those funds, that they were being withheld to ensure they weren't spent "in a manner that could conflict with the President’s foreign policy."
But GAO said that the executive branch can't use that kind of policy reason to withhold funds appropriated by Congress.
"OMB violated the [law] when it withheld" the Ukraine assistance "for policy reasons," the report concludes.
Trump has always maintained he's done nothing illegal. A spokesperson for OMB said the agency disagreed with the GAO findings.
"We disagree with GAO's opinion," the spokesperson, Rachel Semmel, said in a statement. "OMB uses its apportionment authority to ensure taxpayer dollars are properly spent consistent with the President's priorities and with the law."
The GAO is an independent, nonpartisan watchdog agency that investigates the federal government on behalf of Congress, taking up requests on behalf of both Republicans and Democrats.
House Speaker Nancy Pelosi told reporters the GAO decision "reinforces again the need for documents and eyewitnesses in the Senate" impeachment trial.
"This bombshell legal opinion from the independent Government Accountability Office demonstrates, without a doubt, that the Trump Administration illegally withheld security assistance from Ukraine," said Sen. Chris Van Hollen, D-Md., who originally requested the GAO investigation. "This violation of the law reflects a contempt for the Constitution and was a key part of his corrupt scheme to abuse the power of the presidency for his personal political purposes."
Trump had placed a hold on a total of $391 million of security assistance to Ukraine and has provided various reasons for doing so -- including that he was concerned the money would be well-spent and not used for corruption or that European allies have not contributed enough to Ukraine's security. The European Union has provided more than €15 billion in loans and grants to Ukraine, according to the bloc, with an additional €134 million in humanitarian assistance for the ongoing conflict.
The other portion of the $391 million came from the State Department, and the GAO is still investigating whether its funds were withheld for legitimate reasons, but said that the department and OMB have failed to comply with their investigation.
The GAO issued its decision as chief Pentagon spokesperson Jonathan Hoffman took the podium at a press briefing. He said while he had "not had a chance to look at it or talk to our lawyers in the building" he is "sure we'll be looking at it."
He also for the first time said that Ukraine had now received all of the aid appropriated to it for fiscal year 2019, including a portion that was not distributed before the fiscal year ran out at the end of September.
Asked if the Defense Department was looking to do anything differently given it was "such a mess" getting the aid to Ukraine, Hoffman told reporters he "would not characterize it as a mess."
"I believed that we were able to get the aid out the door as we were intended to, so I would not characterize it as a mess," he said. "We were able to get – as Congress requested and as we were instructed to do – the aid went out the door and went to Ukraine and is being available to the Ukrainian people in their own defensive efforts."
ABC News's Benjamin Siegel and Elizabeth McLaughlin contributed to this report.