Kentucky got off three more shots, including two in the final 11 seconds, but none connected.
Utah shot a blistering 62.5% (10 of 16) from the floor in the second half and was 23 of 42 (54.8%) for the game, including 53.3% (8 of 15) from 3-point range.
Tyrese Maxey led Kentucky with 18 points, and Hagans added 16.
Maxey had a chance to tie it but was called for an offensive foul when he drove the lane and barreled into Battin, giving the Utes the ball with 22.7 seconds left.
Jones hit 1 of 2 free throws to give Utah a three-point lead.
Maxey missed a 3-pointer, Kentucky scrambled for the rebound, and Immanuel Quickley clanked a 3 off the rim as time ran out.
The Utes opened on a 10-4 run as Gach hit four of his first five shots. Utah made seven of its first nine from the floor to take an 18-9 lead midway through the first half.
Kentucky struggled to find a rhythm early, hitting just four of its first 14 attempts. The Wildcats were just 13 of 31 from the floor in the first half. They closed the half hitting 6 of 9 to cut Utah’s lead to 35-31 at halftime.
Kentucky: The Wildcats had made at least one 3-pointer in each first half of their nine games. They were 0 for 7 against Utah, contributing to their dismal shooting display over the first 20 minutes.
Utah: Gach came into the game hitting a career 30.3% from 3-point range and just 27% this season. He found his touch against the Wildcats, hitting 3 of 5, all in the first half.
While Kentucky will likely slip from its spot in the poll, Utah could sneak into next week’s AP Top 25 if it can knock off No. 20 San Diego State on Saturday.
Kentucky: Plays No. 5 Ohio State in the CBS Sports Classic in Las Vegas
Utah: Plays No. 20 San Diego State in the Basketball Hall of Fame Classic in Los Angeles