Mauricio Pinilla gave the home side the lead in the 56th minute, scoring against his former club, and Daniele Dessena doubled their advantage in the 81st minute.
However, a penalty from Abel Hernandez a minute later gave Palermo hope and the home team had to survive a late onslaught from the Rosaneri before earning the points in front of just a few thousand fans.
Pinilla looked particularly motivated against his former club and he brought a fine save out of Emiliano Viviano in the eighth minute.
Cagliari lost Andrea Cossu to injury shortly afterwards with Victor Ibarbo taking his place - a move that proved to be a blessing in disguise.
Ibarbo brought life to the Cagliari attack, warming the very few fans inside the Stadio Sant Elia each time he touched the ball.
His header in the 22nd minute was saved on the line by Viviano, who also saved the follow-up.
Just before half time, Dessena went close to giving Cagliari the lead, but he was unable to reach Daniele Conti's cross and Federico Balzaretti lifted the ball clear at the far post.
Ibarbo made a telling contribution as Cagliari went ahead in the 56th minute, using his pace to receive a return pass and beat Viviano to the ball, squaring it for Pinilla to slide in and score into the open goal from point-blank range.
Palermo's response was to bring Hernandez on and this also proved to be an inspired substitution.
He nearly beat Michael Agazzi with a low header in the 78th minute before Cagliari lifted the growing pressure with a second goal.
Pinilla's free-kick was only parried by Viviano and Dessena was the quickest to react as he beat the Palermo goalkeeper to his left.
Their joy was short lived, though, as Hernandez's shot was handled in the area by Gabriele Perico at the other end and the Palermo forward stepped up to beat Agazzi from the penalty spot.
Palermo threw everybody forwards, including Viviano for a late corner, but they were unable to find an equaliser.