Senators passed the budget put forward by the governing coalition of the anti-establishment Five Star Movement (M5S) and the anti-immigration League by 167 votes to 78, with three abstentions.
It was passed by a vote of confidence after midnight that avoided debate of around 700 amendments, provoking acrimonious scenes in the Senate with the opposition complaining about the lack of debate.
The budget is expected to go to the lower house after Christmas and before a New Year deadline.
In a historic first, in October the European Commission rejected Italy's big-spending budget, which promised a universal basic income and scrapped pension reform.
In a deal reached on Wednesday, Italy agreed to reduce the cost of both of its landmark measures, and is now committed to not adding to its colossal two-trillion euro debt load next year.
The EU and Italy negotiated intensely with both sides worried that a protracted feud would alarm the markets and ignite a debt crisis in the eurozone's third biggest economy.
Without the compromise, Italy would have ultimately faced a fine of up to 0.2 percent of the nation's GDP after a long and rancorous process with its eurozone partners.
The talks centred on the so-called structural deficit, which includes all public spending minus debt payments.
Italy's first budget was set to blow through commitments made by the previous government, and require Rome raising even more debt.
Last week's deal anticipates that this will now be balanced, with the overall deficit target lowered to 2.04 percent of GDP.
Italy's public debt is a big problem and now sits at a huge 2.3 trillion euros, or 131 percent of Italy's GDP — way above the 60 percent EU ceiling.