AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 276671
Accepted
ChrisJ
ChrisJ
Asked: 2020-10-07 23:35:31 +0800 CST2020-10-07 23:35:31 +0800 CST 2020-10-07 23:35:31 +0800 CST

Quais são as implicações de segurança dos privilégios necessários para a conta Bluemedora Postgres?

  • 772

Blue Medora é um serviço para encaminhar métricas de monitoramento do Postgres para o Google Cloud Monitoring.

Como parte de suas instruções de configuração, eles oferecem um script SQL para configurar um usuário com privilégios mínimos a ser usado para fazer login na conta. (colado abaixo para referência)

Se a conta bluemedora fosse comprometida, que informação poderia vazar ou o que mais poderia fazer?

(obviamente substituindo tmppasswordno script é um dado)

Uma óbvia é que ele pode extrair todas as estatísticas sobre as quais relata, incluindo consultas de relatórios que estão sendo executadas, o que pode levar ao vazamento de PII se estiver incluído nessas consultas.

Com base nas informações presentes, um invasor pode descobrir os nomes dos usuários e superusuários do banco de dados, todas as tabelas sendo usadas e com as consultas provavelmente uma boa parte das estruturas das tabelas. Que poderia então ser usado para criar um ataque direcionado.

Existem outras formas mais diretas de acessar os dados armazenados nas tabelas com essa conta ou escalar privilégios?

Aqui está o roteiro

CREATE SCHEMA bluemedora;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE OR REPLACE FUNCTION bluemedora.pg_stat_statements() RETURNS SETOF pg_stat_statements AS
$$
SELECT * FROM public.pg_stat_statements;
$$ LANGUAGE sql VOLATILE SECURITY DEFINER;

CREATE OR REPLACE FUNCTION public.explain_this (
      l_query text,
      out explain json
    )
RETURNS SETOF json AS
$$
BEGIN
  RETURN QUERY EXECUTE 'explain (format json) ' || l_query;
END;
$$
LANGUAGE 'plpgsql'
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY DEFINER
COST 100 ROWS 1000;

CREATE USER bluemedora WITH PASSWORD 'tmppassword';
GRANT SELECT ON pg_database TO bluemedora;
GRANT SELECT ON pg_stat_bgwriter TO bluemedora;
GRANT SELECT ON pg_stat_database TO bluemedora;
GRANT SELECT ON pg_stat_user_indexes TO bluemedora;
GRANT SELECT ON pg_stat_user_tables TO bluemedora;
GRANT SELECT ON pg_statio_all_sequences TO bluemedora;
GRANT SELECT ON pg_statio_user_indexes TO bluemedora;
GRANT SELECT ON pg_statio_user_tables TO bluemedora;
GRANT SELECT ON pg_tables TO bluemedora;
GRANT SELECT ON pg_tablespace TO bluemedora;
GRANT SELECT ON pg_user TO bluemedora;
GRANT SELECT ON pg_stat_replication TO bluemedora;
GRANT SELECT ON pg_stat_database_conflicts TO bluemedora;
GRANT SELECT ON pg_trigger TO bluemedora;
GRANT SELECT ON pg_stat_activity TO bluemedora;
GRANT SELECT ON pg_stat_statements TO bluemedora;
GRANT USAGE ON SCHEMA bluemedora TO bluemedora;
GRANT EXECUTE ON FUNCTION public.explain_this(l_query text, out explain text) TO bluemedora;
postgresql security
  • 1 1 respostas
  • 211 Views

1 respostas

  • Voted
  1. Best Answer
    jjanes
    2020-10-08T10:02:14+08:002020-10-08T10:02:14+08:00

    O grande problema de segurança aqui é que ele não revoga a execução em suas funções criadas de PUBLIC, o que significa que outros usuários além do bluemedora podem usá-las, o que evidentemente não é o pretendido. Para pg_stat_statement isso não é realmente um problema, pois está localizado em um esquema ao qual ninguém mais deve ter acesso, mas para explain_this está em esquema público e com direitos de execução PUBLIC. E por que o explain_this é criado em público em primeiro lugar? Se há uma razão para distribuir as funções em dois esquemas, não sei qual é. Parece que talvez o explain_this foi adicionado ao script por alguém que não sabia o que estava fazendo.

    A concessão de SELECT em todas essas tabelas de catálogo é desnecessária na maioria das instalações, pois aquelas já possuem SELECT concedido para PUBLIC. No entanto, não há garantia de que este script será executado na "maioria das instalações", portanto, é razoável conceder explicitamente essas permissões em vez de depender de alguém que não tenha alterado os padrões. O mais preocupante para mim seria a falta de qualificação de esquema nessas bolsas.

    Com base nas informações presentes, um invasor pode descobrir os nomes dos usuários e superusuários do banco de dados, todas as tabelas sendo usadas e com as consultas provavelmente uma boa parte das estruturas das tabelas. Que poderia então ser usado para criar um ataque direcionado.

    Todas essas coisas, exceto o texto da consulta, serão verdadeiras para quase qualquer usuário comprometido, mesmo sem permissões especiais concedidas. Você está preocupado com ataques de engenharia social?

    • 1

relate perguntas

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Protegendo senhas de banco de dados

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve