Sounds like you need a workflow running on change of status, which checks if status is now "Approved" and re-assigns the Campaign. In the scenario as described you would simply re-assign the Campaign back to the user who created it.
Being more flexible, you could add a custom lookup field / relationship to the Campaign entity. When a Campaign is assigned or status changes, check if status is now "Waiting approval". If so, store the "Last modified by" user in the custom field. Then when you do the reassign back again, do it to this user, not the created by user.