Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
gha-lab-e8902eccd3 — Laboratório de pesquisa em segurança: reprodução do CVE-2025-52467 (execução de código no fluxo de trabalho pull_request_target do pgai / exfiltração de GITHUB_TOKEN) — snapshot de timescale/pgai | Kitploit
Ferramentas/GitHubGitHub/pvharmo2/gha-lab-e8902eccd3
Análise de VulnerabilidadesExploraçãoAprendizado e EducaçãoRecursos Curados
GitHubpvharmo2/gha-lab-e8902eccd3

gha-lab-e8902eccd3

Laboratório de pesquisa em segurança: reprodução do CVE-2025-52467 (execução de código no fluxo de trabalho pull_request_target do pgai / exfiltração de GITHUB_TOKEN) — snapshot de timescale/pgai

Ver Repositório
8há 20 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Artefacto de investigação automatizado — não é o projeto upstream.

Este repositório é um laboratório descartável construído por um harness automatizado para uma tese de mestrado na Université Laval sobre a reprodução de vulnerabilidades publicadas em workflows do GitHub Actions. É um snapshot verbatim de timescale/pgai no commit 2a209b058c60823b57e8b7775b10244ff340eb8b (2025-05-14), redistribuído sob a licença desse próprio projeto, cujo ficheiro está incluído inalterado neste snapshot.

O projeto upstream não está envolvido, nunca é alvo, e a vulnerabilidade aqui estudada já é pública. Todos os segredos e variáveis neste repositório são valores fictícios gerados aleatoriamente — nenhuma credencial real está presente. As referências a ações e imagens de runners estão fixadas no que resolveram em 2025-05-14; consulte pinning.md na saída do harness para todas as alterações feitas ao snapshot.

Perguntas ou objeções: [email protected]


pgai pgai

Potencie as suas aplicações RAG e Agentic com PostgreSQL

Exemplo de saída:
Documentação · Junte-se ao Discord do pgai! · Experimente o Timescale gratuitamente! · Changelog

Uma biblioteca Python que transforma o PostgreSQL num motor de recuperação robusto e pronto para produção para aplicações RAG e Agentic.

  • 🔄 Crie e sincronize automaticamente embeddings vetoriais a partir de dados PostgreSQL e documentos S3. Os embeddings são atualizados automaticamente à medida que os dados mudam.

  • 🔍 Pesquisa vetorial e semântica poderosa com pgvector e pgvectorscale.

  • 🛡️ Pronto para produção de imediato: Suporta processamento em lote para geração eficiente de embeddings, com tratamento integrado para falhas de modelo, limites de taxa e picos de latência.

  • 🐘 Funciona com qualquer base de dados PostgreSQL, incluindo Timescale Cloud, Amazon RDS, Supabase e mais.

Arquitetura básica: O sistema consiste numa aplicação que você escreve, numa base de dados PostgreSQL e em workers de vectorização sem estado. A aplicação define uma configuração de vectorização para incorporar dados de fontes como PostgreSQL ou S3. Os workers leem esta configuração, processam a fila de dados em embeddings e texto fragmentado, e escrevem os resultados de volta. A aplicação consulta então estes dados para alimentar RAG e pesquisa semântica.

O principal ponto forte desta arquitetura reside na sua resiliência: as modificações de dados feitas pela aplicação são desacopladas do processo de embedding, garantindo que falhas no serviço de embedding não afetam as operações de dados principais.

Arquitetura Pgai: aplicação, base de dados, worker de vectorização

instalação

Primeiro, instale o pacote pgai.``` pip install pgai

root@kitploit:~
Em seguida, instale os componentes de banco de dados do pgai. Você pode fazer isso pelo terminal usando a CLI ou no código da sua aplicação Python usando o pacote Python pgai.```
# from the cli
pgai install -d <database-url>

# or from the python package, often done as part of your application setup
import pgai
pgai.install(DB_URL)

Início Rápido

Este guia de início rápido demonstra como o pgai Vectorizer possibilita pesquisa semântica e RAG sobre dados do PostgreSQL, criando e sincronizando automaticamente embeddings à medida que os dados mudam.

O principal "ingrediente secreto" do pgai Vectorizer é sua abordagem declarativa para geração de embeddings. Basta definir seu pipeline e deixar o Vectorizer lidar com a complexidade operacional de manter os embeddings sincronizados, mesmo quando os endpoints de embedding não são confiáveis. Você pode definir uma versão simples do pipeline da seguinte forma:```sql CREATE TABLE IF NOT EXISTS wiki ( id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, url TEXT NOT NULL, title TEXT NOT NULL, text TEXT NOT NULL )

SELECT ai.create_vectorizer( 'wiki'::regclass, loading => ai.loading_column(column_name=>'text'), destination => ai.destination_table(target_table=>'wiki_embedding_storage'), embedding => ai.embedding_openai(model=>'text-embedding-ada-002', dimensions=>'1536') )

root@kitploit:~
O vectorizador criará automaticamente embeddings para todas as linhas da
tabela `wiki` e, mais importante, manterá os embeddings sincronizados com os
dados subjacentes à medida que estes mudam.  **Pense nisso quase como declarar um índice** na
tabela `wiki`, mas em vez de o banco de dados gerenciar a estrutura de dados do índice
para você, o Vectorizer gerencia os embeddings.

## Executando o quick start

**Pré-requisitos:**
- Um banco de dados PostgreSQL ([instruções do docker](https://docs.timescale.com/self-hosted/latest/install/installation-docker/)).
- Uma chave de API da OpenAI (usamos openai para embedding no quick start, mas você pode usar [vários provedores](#supported-embedding-models)).

Crie um arquivo `.env` com o seguinte:```
OPENAI_API_KEY=<your-openai-api-key>
DB_URL=<your-database-url>

Podes descarregar o código Python completo e o requirements.txt do exemplo de início rápido e executá-lo no mesmo diretório do ficheiro .env.

Clica aqui para um script bash que executa o início rápido```bash curl -O https://raw.githubusercontent.com/timescale/pgai/main/examples/quickstart/main.py curl -O https://raw.githubusercontent.com/timescale/pgai/main/examples/quickstart/requirements.txt python -m venv venv source venv/bin/activate pip install -r requirements.txt python main.py ```
Clique para expandir o exemplo de saída``` Search results 1: [WikiSearchResult(id=7, url='https://en.wikipedia.org/wiki/Aristotle', title='Aristotle', text='Aristotle (; Aristotélēs, ; 384–322\xa0BC) was an ' 'Ancient Greek philosopher and polymath. His writings ' 'cover a broad range of subjects spanning the natural ' 'sciences, philosophy, linguistics, economics, ' 'politics, psychology and the arts. As the founder of ' 'the Peripatetic school of philosophy in the Lyceum in ' 'Athens, he began the wider Aristotelian tradition that ' 'followed, which set the groundwork for the development ' 'of modern science.\n' '\n' "Little is known about Aristotle's life. He was born in " 'the city of Stagira in northern Greece during the ' 'Classical period. His father, Nicomachus, died when ' 'Aristotle was a child, and he was brought up by a ' "guardian. At 17 or 18 he joined Plato's Academy in " 'Athens and remained there till the age of 37 (). ' 'Shortly after Plato died, Aristotle left Athens and, ' 'at the request of Philip II of Macedon, tutored his ' 'son Alexander the Great beginning in 343 BC. He ' 'established a library in the Lyceum which helped him ' 'to produce many of his hundreds of books on papyru', chunk='Aristotle (; Aristotélēs, ; 384–322\xa0BC) was an ' 'Ancient Greek philosopher and polymath. His writings ' 'cover a broad range of subjects spanning the natural ' 'sciences, philosophy, linguistics, economics, ' 'politics, psychology and the arts. As the founder of ' 'the Peripatetic school of philosophy in the Lyceum in ' 'Athens, he began the wider Aristotelian tradition ' 'that followed, which set the groundwork for the ' 'development of modern science.', distance=0.22242502364217387)] Search results 2: [WikiSearchResult(id=41, url='https://en.wikipedia.org/wiki/pgai', title='pgai', text='pgai is a Python library that turns PostgreSQL into ' 'the retrieval engine behind robust, production-ready ' 'RAG and Agentic applications. It does this by ' 'automatically creating vector embeddings for your data ' 'based on the vectorizer you define.', chunk='pgai is a Python library that turns PostgreSQL into ' 'the retrieval engine behind robust, production-ready ' 'RAG and Agentic applications. It does this by ' 'automatically creating vector embeddings for your ' 'data based on the vectorizer you define.', distance=0.13639101792546204)] RAG response: The main thing pgai does right now is generating vector embeddings for data in PostgreSQL databases based on the vectorizer defined by the user, enabling the creation of robust RAG and Agentic applications. ```

Explicação do código

Instalar os componentes de banco de dados do pgai

O pgai requer algumas tabelas de catálogo e funções para serem instaladas no banco de dados. Isso é feito usando a função pgai.install, que instalará os componentes necessários no esquema ai do banco de dados.```python pgai.install(DB_URL)

root@kitploit:~
### Criar o vectorizer

Isto define o vectorizer, que indica ao sistema como criar os embeddings a partir da coluna `text` na tabela `wiki`. O vectorizer cria uma view `wiki_embedding` que podemos consultar para obter os embeddings (como veremos abaixo).```python
async def create_vectorizer(conn: psycopg.AsyncConnection):
    async with conn.cursor() as cur:    
        await cur.execute("""
            SELECT ai.create_vectorizer(
                'wiki'::regclass,
                if_not_exists => true,
                loading => ai.loading_column(column_name=>'text'),
                embedding => ai.embedding_openai(model=>'text-embedding-ada-002', dimensions=>'1536'),
                destination => ai.destination_table(view_name=>'wiki_embedding')
            )
        """)   
    await conn.commit()

Executar o worker do vectorizer

Neste exemplo, executamos o worker do vectorizer uma vez para criar os embeddings para os dados existentes.```python worker = Worker(DB_URL, once=True) worker.run()

root@kitploit:~
Em uma aplicação real, não chamaríamos o worker manualmente assim toda vez que quisermos criar os embeddings. Em vez disso, executaríamos o worker em segundo plano e ele rodaria continuamente, consultando por trabalho do vectorizer.

Você pode executar o worker em segundo plano a partir da aplicação, da CLI ou do Docker. Consulte a documentação do [vectorizer worker](https://github.com/pvharmo2/gha-lab-e8902eccd3/blob/main/docs/vectorizer/worker.md) para mais detalhes.


### Pesquisar os artigos da wiki usando busca semântica

Esta é a busca semântica padrão do pgvector no PostgreSQL. A busca é realizada na view `wiki_embedding`, que é criada pelo vectorizer e inclui todas as colunas da tabela `wiki` mais a coluna `embedding` e o texto do chunk. Esta função retorna tanto a coluna `text` inteira da tabela `wiki` quanto chunks menores do texto que são mais relevantes para a consulta.```python
@dataclass
class WikiSearchResult:
    id: int
    url: str
    title: str
    text: str
    chunk: str
    distance: float

async def _find_relevant_chunks(client: AsyncOpenAI, query: str, limit: int = 1) -> List[WikiSearchResult]:
    # Generate embedding for the query using OpenAI's API
    response = await client.embeddings.create(
        model="text-embedding-ada-002",
        input=query,
        encoding_format="float",
    )
    
    embedding = np.array(response.data[0].embedding)
    
    # Query the database for the most similar chunks using pgvector's cosine distance operator (<=>)
    async with pool.connection() as conn:
        async with conn.cursor(row_factory=class_row(WikiSearchResult)) as cur:
            await cur.execute("""
                SELECT w.id, w.url, w.title, w.text, w.chunk, w.embedding <=> %s as distance
                FROM wiki_embedding w
                ORDER BY distance
                LIMIT %s
            """, (embedding, limit))
            
            return await cur.fetchall()

Inserir um novo artigo na tabela wiki

Este código é notável pelo que não está fazendo. Esta é uma inserção simples de um novo artigo na tabela wiki. Não precisamos fazer nada diferente para criar os embeddings, o worker do vectorizer cuidará da atualização dos embeddings conforme os dados mudam.```python def insert_article_about_pgai(conn: psycopg.AsyncConnection): async with conn.cursor(row_factory=class_row(WikiSearchResult)) as cur: await cur.execute(""" INSERT INTO wiki (url, title, text) VALUES ('https://en.wikipedia.org/wiki/pgai', 'pgai', 'pgai is a Python library that turns PostgreSQL into the retrieval engine behind robust, production-ready RAG and Agentic applications. It does this by automatically creating vector embeddings for your data based on the vectorizer you define.') """) await conn.commit()

root@kitploit:~
### Executar RAG com o LLM

Este código executa RAG com o LLM. Ele usa a função `_find_relevant_chunks` definida acima para encontrar os trechos de texto mais relevantes da tabela `wiki` e, em seguida, usa o LLM para gerar uma resposta.```python
    query = "What is the main thing pgai does right now?"
    relevant_chunks = await _find_relevant_chunks(client, query)
    context = "\n\n".join(
        f"{chunk.title}:\n{chunk.text}" 
        for chunk in relevant_chunks
    )
    prompt = f"""Question: {query}

Please use the following context to provide an accurate response:   

{context}

Answer:"""

    response = await client.chat.completions.create({
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: prompt }],
    })
    print("RAG response:")
    print(response.choices[0].message.content)

Próximos passos

Procure outros quickstarts:

  • Quickstart com FastAPI e psycopg aqui

Explore mais sobre o vectorizer:

  • Saiba mais sobre o vectorizer e o vectorizer worker
  • Aprofunde-se na referência da API do vectorizer

Recursos

Nossa biblioteca Python pgai permite que você trabalhe com embeddings gerados a partir dos seus dados:

  • Crie e sincronize automaticamente embeddings vetoriais para seus dados usando o vectorizer.
  • Carregue dados de uma coluna da sua tabela ou de um arquivo, bucket s3, etc.
  • Crie múltiplos embeddings para os mesmos dados com diferentes modelos e parâmetros para testes e experimentação.
  • Personalize como seu pipeline de embeddings analisa, divide em chunks, formata e incorpora seus dados.

Você pode usar os embeddings vetoriais para:

  • Realizar busca semântica usando pgvector.
  • Implementar Geração Aumentada por Recuperação (RAG)
  • Realizar busca ANN de alto desempenho e baixo custo em grandes cargas de trabalho vetoriais com pgvectorscale, que complementa o pgvector.

Também oferecemos uma extensão PostgreSQL que pode realizar chamadas de modelos LLM diretamente do SQL. Isso é frequentemente útil para casos de uso como classificação, sumarização e enriquecimento de dados em seus dados existentes.

Um pipeline de vectorizer configurável

O vectorizer foi projetado para ser flexível e personalizável. Cada vectorizer define um pipeline para criar embeddings a partir dos seus dados. O pipeline é definido por uma série de componentes que são aplicados em sequência aos dados:

  • Carregamento: Primeiro, você define a fonte dos dados a serem incorporados. Pode ser os dados armazenados diretamente em uma coluna da tabela de origem ou uma URI referenciada em uma coluna da tabela de origem que aponta para um arquivo, bucket s3, etc.
  • Análise (Parsing): Em seguida, você define a forma como os dados são analisados se for um documento não textual, como um arquivo PDF, HTML ou markdown.
  • Divisão em chunks: Depois, você define a forma como os dados de texto são divididos em chunks.
  • Formatação: Então, para cada chunk, você define a forma como os dados são formatados antes de serem enviados para incorporação. Por exemplo, você pode adicionar o título do documento como a primeira linha do chunk.
  • Incorporação (Embedding): Finalmente, você especifica o provedor de LLM, o modelo e os parâmetros a serem usados ao gerar os embeddings.

Modelos de embedding suportados

Os seguintes modelos são suportados para embedding:

  • Ollama
  • OpenAI
  • Voyage AI
  • Cohere
  • Huggingface
  • Mistral
  • Azure OpenAI
  • AWS Bedrock
  • Vertex AI

O problema está no tratamento de erros

Simplesmente criar embeddings vetoriais é fácil e direto. O desafio é que os LLMs são um tanto imprevisíveis e os endpoints apresentam falhas intermitentes e/ou desempenho degradado. Uma parte crítica para lidar adequadamente com falhas é que suas operações primárias de modificação de dados (INSERT, UPDATE, DELETE) não devem depender da operação de embedding. Caso contrário, sua aplicação ficará fora do ar toda vez que o endpoint estiver lento ou falhar, e a experiência do usuário sofrerá.

Normalmente, você precisaria implementar um pipeline de MLops personalizado para lidar adequadamente com falhas de endpoint. Isso geralmente envolve um sistema de filas como Kafka, workers especializados e outra infraestrutura para gerenciar a fila e repetir solicitações com falha. Isso é muito trabalho e é fácil errar.

Com o pgai, você pode pular tudo isso e focar na construção da sua aplicação, porque o vectorizer está gerenciando os embeddings para você. Incorporamos lógica de fila e repetição para lidar com os vários modos de falha que você pode encontrar. Como fazemos esse trabalho em segundo plano, as operações primárias de modificação de dados não dependem da operação de embedding. É por isso que o pgai está pronto para produção desde o início.

Muitos bancos de dados vetoriais especializados criam embeddings para você. No entanto, eles normalmente falham quando os endpoints de embedding estão fora do ar ou degradados, colocando o fardo do tratamento de erros e das repetições de volta sobre você.

Recursos

Por que construímos isso

  • Vector Databases Are the Wrong Abstraction
  • pgai: Giving PostgreSQL Developers AI Engineering Superpowers

Guias de início rápido

  • O guia de início rápido com Ollama acima
  • Início rápido com OpenAI
  • Início rápido com VoyageAI

Tutoriais sobre o vectorizer pgai

  • How to Automatically Create & Update Embeddings in PostgreSQL—With One SQL Query
  • [vídeo] Auto Create and Sync Vector Embeddings in 1 Line of SQL
  • Which OpenAI Embedding Model Is Best for Your RAG App With Pgvector?
  • Which RAG Chunking and Formatting Strategy Is Best for Your App With Pgvector
  • Parsing All the Data With Open-Source Tools: Unstructured and Pgai

Contribuindo

Aceitamos contribuições para o pgai! Consulte a página Contributing para mais informações.

Participe

O pgai ainda está em um estágio inicial. Agora é um ótimo momento para ajudar a moldar a direção deste projeto; estamos atualmente decidindo prioridades. Dê uma olhada na lista de recursos que estamos pensando em desenvolver. Sinta-se à vontade para comentar, expandir a lista ou participar do fórum Discussions.

Para começar, dê uma olhada em como contribuir e como configurar um ambiente de desenvolvimento/teste.

Sobre a Timescale

A Timescale é uma empresa de banco de dados PostgreSQL. Para saber mais, visite timescale.com.

O Timescale Cloud é uma plataforma em nuvem de alto desempenho, focada em desenvolvedores, que fornece serviços PostgreSQL para as cargas de trabalho mais exigentes de IA, séries temporais, análises e eventos. O Timescale Cloud é ideal para aplicações de produção e fornece alta disponibilidade, backups contínuos, atualizações ao longo do tempo, funções e permissões, e ótima segurança.

Baixar ferramenta