Ulster's Jared Payne marked his first start for the province since October by scoring a first-half try, but Les Kiss's side failed to claim a bonus point against Treviso in atrocious conditions at the Kingspan Stadium.
Victory earned the hosts a fourth win in a row, but the failure to claim a bonus point saw the province remain in fifth place in the Guinness PRO12.
Ulster, who still have a game in hand on their rivals, also scored tries in the second half through Sean Reidy and Charles Piutau, but Treviso dug in and finished strongly with a try from former Ulster squad member Teofilo Paulo.
A high error count, not helped by the dreadful conditions, denied Ulster the all-important five points.
The first chance fell to the Italians, but Tito Tebaldi was wide with his second-minute penalty and Ulster then had to scramble to stop Tommaso Iannone after the home side were deceived by the bounce of the ball.
Although Ulster then managed to settle, the conditions hardly helped them, with Andrew Trimble losing possession twice and Ruan Pienaar kicking the ball dead from a 14th-minute penalty which he attempted to put into the corner.
But shortly after Kiss' side had marched a scrum into the Treviso 22, they eventually made a few penalties pay after 21 minutes when Stuart Olding's pass put Payne through at the posts. Pienaar landed the conversion.
But the home side failed to score again in the opening half, despite coming close on a number of occasions, their best chance when Marcell Coetzee knocked on near the Treviso line.
The second half was only six minutes old when flanker Francesco Minto was yellow carded for a non-arm tackle, but the 14-man Italians then resisted from a close-in Ulster scrum, with Tebaldi helping win a turnover.
Six minutes later Ulster did work their way across the Treviso line again when, following a scrum, Payne again broke the line before Reidy drove over.
Pienaar's conversion took it to 14-0 and, three minutes later, a great break from Olding ended with Payne knocking on.
Just before the hour, Olding's cross-kick fell nicely for Piutau, who latched on to it and made the corner for Ulster's third score of the night. Pienaar was unsuccessful with the difficult conversion.
Ulster could now sense the bonus point, but Treviso refused to wilt only a last-ditch tackle from replacement Peter Browne prevented Romulo Acosta dotting down from a close-in drive.
And Treviso did get their try when former Ulster player Paulo dived over in the 70th minute. Ian McKinley converted and that score took all the momentum away from the home side.