Walter Mazzari's side were not at their best and struggled to see off the Sicilians but did enough to join Juve on 49 points before the champions visit Chievo Verona on Sunday (1130 GMT).
Catania stay seventh on 35 points after missing a chance to move above AC Milan into fifth, the second Europa League spot.
Hamsik gave nervy Napoli the lead from close range after half an hour, starting the move that led to him tapping home Juan Zuniga's mis-hit shot.
Cannavaro doubled their lead a minute before halftime, the Napoli captain breaking Catania's offside trap along with three other players before netting his first goal of the season from Hamsik's drilled low cross.
Torino and Sampdoria played out a 0-0 draw in the early kickoff with the hosts having the best of the play although neither side created many chances.
Torino extended their unbeaten run to seven games and moved up a place to 11th on 28 points while Delio Rossi's Sampdoria stay 13th with 25 points, seven points clear of the drop zone.