Vinsten tog Warriors 12 poäng bort från botten klubb Bristol, som kommer att förvisas tillbaka till mästerskapet om de förlorar till ledare Waspers på söndag.
Badet ledde 10-6 på halvtid, med hjälp av ytter Matt Banahans försök.
Men Josh Adams och Wynand Olivier gick båda över för värdarna och f.d. Bath-låset Will Spencer avslutade segern.
George Ford sparkade en sen straff för att tjäna femte plats Bath en förlorande bonus punkt, men med två spel kvar att spela de är fyra poäng bakom Leicester, som slog Newcastle på Welford Road.
Krigare var bra värde för sin femte hemmaliga seger för säsongen, med deras utmärkta rekord på Sixways sannolikt att vara tillräckligt för att hålla dem i toppflyget.
Bath hade visat sig inställd för sin första Premiership bort vinna sedan 30 Oktober när, mot loppet av spel, Jonathan Joseph matade Banahan för det enda försöket av den första perioden.
Men två straff från Ryan Mills - den andra en enorm spark från väl inne i sin egen hälft - höll värdarna i kontakt på halvvägs.
Englands Ben Te'o och andra center Jackson Willison skapade utmärkt Adams försök att ersätta Olivier satte Worcester framför för första gången, innan Spencer avrundade en lång förtrollning av Worcester tryck genom att röra ner mot sin gamla klubb.
Worcester chef för rugby Gary Gold: " Bristol har två hemmamatcher av tre kvar, så under inga omständigheter kommer jag att sitta här och säga att vi är säkra. De slog Bath hemma och körde Exeter nära Sandy Park.
"Om vi kan ta oss igenom denna kamp, då kommer jag definitivt att titta för att chatta till klubben för att se vad planerna är för nästa säsong.
"Jag är upprymd och väldigt stolt över killarna. De stannade i hela 80 minuter mot en kvalitet Bath team."
Badchef för rugby Todd Blackadder: " Det är en stor besvikelse. Vi är upp och ner, upp och ner.
"Våra (försvarets) utgångar var verkligen dåliga. Vi gav tillbaka bollen till Worcester, som spelade riktigt bra, och under den andra halvan, dödade otvingade fel oss.
"Vi visste vad som stod på spel idag, vilket gör det ännu mer nedslående, men vi kommer inte att ge upp hoppet. Det finns fortfarande för mycket att spela för och mycket kan hända."
Worcester: Pennell; Humphreys, Willison, Te'o, Adams; Mills, Hougaard; Bower, Taufete'e, Alo, O'Callaghan (kapt), Spencer, Vui, Lewis, Mama.
Ersättningar: Singleton, Grant, Milasinovich, Potgieter, Fa'osliva, Baldwin, Lamb, Olivier.
Bath: Watson; Rokoduguni, Joseph, Tapuai, Banahan; Ford (medkapteln), Fotuali'i; Catt, Batty, Palma-Newport, Ewels, Stooke, Ellis, Louw (medkapteln), Faletau.
Ersättningar: Charles, Obano, Knight, Denton, Z Mercer, Cook, Priestland, T Homer.
För de senaste rugby facket nyheter följa @bbcrugbyunion på Twitter.
Worcester Warriors besegrade Bath på Sixways för att nästan garantera sin Premiership överlevnad och buckla besökarnas förhoppningar om en topp-fyra finish.