Neil Doak’s side were looking to make it five league wins on the bounce to climb to second in the table as they eye a spot in the Belfast final.
But it was the 10th-placed Dragons, who seven days earlier had been stunned by bottom club Zebre, who took the spoils thanks to tries by hooker Rhys Buckley, scrum-half Jonathan Evans and full-back Carl Meyer.
Ulster had to settle for the consolation of a losing bonus thanks to a late score by Ross Adair, adding to Craig Gilroy’s brace.
NEWPORT GWENT D’GONS: G. Jones, Prydie, Dixon, A. Smith, Amos, D. Jones, J. Evans, Stankovich, T. Thomas, Harris, Coombs, Hill, J. Thomas, Benjamin, Crosswell.
Replacements: Hewitt for A. Smith (50), L. Jones for J. Evans (76), Price for Stankovich (52), Buckley for T. Thomas (46), Fairbrother for Harris (75), Screech for Coombs (75), Matthews for Benjamin (69).
ULSTER: Gilroy, Scholes, D. Cave, Stanley, Allen, Humphreys, Pienaar, Black, Herring, Herbst, Tuohy, van der Merwe, Henderson, C. Ross, Williams.
Replacements: Adair for Scholes (71), Arnold for Stanley (52), P. Marshall for Humphreys (62), B. Ross for Herbst (63), Stevenson for Tuohy (62), Diack for Henderson (52), Warwick for C. Ross (57).
Referee: John Lacey (Ireland).