Dan Parks finished the evening with a personal haul of eight points and pulled the strings in the first half as Connacht jumped above Treviso and Edinburgh into eighth in the standings.
It was a tight match until Duffy's late try - the weather contributing to a high error count for both sides, with try-scoring chances at a premium.
Treviso were limited to just a solitary Alberto Di Bernardo penalty in the second half - their seventh successive loss to an Irish side.
Parks opened the scoring five minutes in, splitting the posts with a well-struck penalty after some Treviso indiscipline at the breakdown.
He doubled his tally with another penalty ten minutes later, before playing a starring role in Connacht's opening try just before the half-hour mark.
A perfectly-weighted chip ahead from the former Scotland international was caught by Tiernan O'Halloran, who sprinted down the line before releasing centre Poolman to cross the whitewash. Park added the conversion to put Connacht 13-0 ahead.
The treacherous conditions showed no signs of letting up as the half continued, with the error count continuing through until half-time.
Scoring opportunities remained at a premium after the break - a Park break on 45 minutes coming to nothing as Connacht looked to strike a killer blow.
Connacht were trying to free up Fetu'u Vainikolo on the wing but the Tongan twice knocked on when given space to run.
Treviso got their first points on the board after an hour, Di Bernardo finding the target as the Italians began to grow in confidence.
Trailing by ten points, it was Treviso who looked the better of the two sides as they enjoyed a sustained spell of error-free possession.
And they had a chance to move within a losing bonus point as Connacht collapsed a scrum - but Di Bernardo's kick 12 minutes from time struck the post, before Duffy's late try.
|Connacht Rugby Score Card|
|Benetton Treviso Score Card|
|Alberto di Bernardo||1||3|