Terms weren't disclosed, but a source told ESPN's Jesse Rogers that the contract is worth $6 million.
Uehara had better offers from other teams but chose to take less to join the Cubs, according to the source.
Uehara, who will turn 42 in April, was the fourth-oldest player to throw a pitch in the big leagues in 2016 after Bartolo Colon, Joe Nathan and R.A. Dickey. He has pitched for the Baltimore Orioles (2009-11), Texas Rangers (2011-12) and Boston Red Sox (2013-16) after playing for 10 years for the Yomiuri Giants in Japan.
In 2016, he made 50 appearances and posted a 3.45 ERA. He also recorded 12.1 strikeouts per nine innings, his highest total since 2013, when he finished seventh in the Cy Young Award voting and threw the clinching pitch for the Red Sox in their World Series win over the St. Louis Cardinals.
Though he throws from the right side, Uehara has a reverse split that's very effective against left-handed batters, holding them to a career .183 average. The Cubs need someone in the bullpen against lefties after losing left-hander Aroldis Chapman and likely Travis Wood. Lefty swingman Mike Montgomery could be moving to the rotation.
The Cubs will now have pitchers who were on the mound for the final out in three of the past four World Series: Uehara, Wade Davis and Montgomery.
Uehara missed seven weeks from July 19 through Sept. 7 with a strained right pectoral muscle, an injury that is far less common for pitchers than shoulder problems. But upon his return, he closed out the regular season by throwing 11 consecutive scoreless innings (12 strikeouts, two walks).
The Red Sox did not make a qualifying offer to Uehara, who made $9 million in 2016, the second season of a two-year, $18 million contract extension signed during the exclusive negotiating period for free agents in 2014.
ESPN Red Sox reporter Scott Lauber contributed to this report.