Acabei de encontrar a seguinte função em dois DBs RDS PostgreSQL 9.3:
--
-- Name: exec(text); Type: FUNCTION; Schema: public; Owner: adam
--
CREATE FUNCTION exec(text) RETURNS text
LANGUAGE plpgsql
AS $_$ BEGIN EXECUTE $1; RETURN $1; END; $_$;
ALTER FUNCTION public.exec(text) OWNER TO adam;
Tenho certeza de que não escrevi esta função e, como exec
parece um risco à segurança (ela simplesmente executa comandos?) Gostaria de saber do que se trata. Pesquisar a assinatura do método não me ajudou.
O que essa função faz?
É algum tipo de risco de segurança?
Qual programa/estrutura pode tê-lo criado?
É uma função totalmente inútil que executa SQL arbitrário. Não é
SECURITY DEFINER
o único risco que eu acho que pode representar é se você permitir que os usuários executem predicados SQL arbitrários ou chamem funções arbitrárias (nesse caso, você provavelmente já está cheio), mas tente impedi-los de executar qualquer comando que desejarem.Como você adivinhou, ele apenas executa a entrada SQL usando os recursos SQL dinâmicos do PL/PgSQL.
Ah, também ocultaria o texto da instrução da
log_statement
análise simples,auto_explain
etc., pois eles só examinam as instruções de nível superior, não as instruções executadas via PL/pgSQL.Pessoalmente, eu o descartaria / renomearia e veria o que reclama.