Specifically, it's the xf_data_registry table with data_key = options. That caches all of the options including the censored words. The source data is in the xf_option table with option_id = censorWords.
Unfortunately I don't know enough SQL to cast the blob into text so I can add my profanity list and insert it back in in blob format. I guess it would be quicker to add the words one at a time. It might make me a bit more discriminating in my choice of swear and slur words.