The US Senate has approved a $95bn (£75bn) foreign aid package after months of political wrangling, but it faces an uphill battle in the House.
While Senate Democrats were in favour of passing the bill, Republicans were divided and previously voted it down.
The package has $60bn for Ukraine, $14bn for Israel’s war against Hamas and $10bn for humanitarian aid in conflict zones, including in Gaza.
But the House of Representatives Speaker suggested he might block it.
The package, which includes more than $8bn for Taiwan and other Indo-Pacific allies, passed the Democratic-controlled Senate by 70 to 29 in a predawn vote on Tuesday.
Twenty-two Republicans, including Senate Minority Leader Mitch McConnell, joined the other side of the aisle to approve the legislation.
The bipartisan support came despite former President Donald Trump’s criticism of the bill for its lack of funding to secure the US-Mexico border.
Speaking on Tuesday afternoon from the White House, President Joe Biden urged House Republicans to pass the measure.
Mr McConnell, a Kentucky senator, said in a statement following the vote: “Today, on the value of American leadership and strength, history will record that the Senate did not blink.”
Ukraine’s leader said he was “grateful” to senators.
The war has broadly reached a stalemate, despite Russian attempts to advance in the eastern Donbas region and Ukrainian attacks in the south.
Officials in Kyiv want more military aid, especially new air defences, after President Vladimir Putin pledged to “intensify” the assault.
But conservative Republicans have objected to sending billions overseas without first tackling the migrant crisis on the southern US frontier.
He was one of several Republican opponents who gave speeches in a bid to slow down passage of the measure.
Some left-wing lawmakers, including Democrat Jeff Merkley of Oregon and independent Bernie Sanders of Vermont, also voted against the bill, citing concerns about supporting Israel’s bombing of Gaza.
The aid bill is a stripped-down version of a $118bn package that Senate Republicans voted down last week.
Republicans had initially demanded any foreign aid be tied to more security measures at the southern border.
But after Mr Trump came out against the border provisions, Republicans were divided on the package.
Some lawmakers suggested border measures could be added back into the current version of the legislation.
Republican House Speaker Mike Johnson suggested in a statement on Monday night the new bill would not pass the Republican-controlled lower chamber of Congress without such provisions.
“House Republicans were crystal clear from the very beginning of discussions that any so-called national security supplemental legislation must recognise that national security begins at our own border,” he said.
The Louisiana congressman said lawmakers “should have gone back to the drawing board” with the legislation to focus on border security.
Mr Johnson and the House Republican leadership will have to decide whether to bring the package to a vote in that chamber, attempt to amend it and send it back to the Senate, or to ignore it entirely.
That last option could prompt those House Republicans who support Ukraine military assistance to join Democrats in filing a discharge petition.
This is a rare parliamentary procedure that would circumvent Mr Johnson and force a vote.