Pular para o conteúdo
Todos os conceitos

Scripts de instalação (postinstall)

Um pacote pode declarar um script que o instalador roda sozinho na instalação, com as suas permissões.

Além do código que você importa, um pacote pode trazer scripts de ciclo de vida: comandos que o instalador executa em certos momentos. O mais usado é o postinstall, que roda logo depois que o pacote é instalado, automaticamente, sem você chamar nada, com as permissões do usuário que rodou o install. Isso existe para tarefas legítimas (compilar um módulo nativo, por exemplo), mas é também a porta preferida do código malicioso: basta você instalar o pacote.

Num pacote malicioso, o postinstall costuma ler segredos (variáveis de ambiente como NPM_TOKEN, o arquivo ~/.npmrc, chaves de CI) e mandar para um servidor do atacante. Você consegue ver isso sem rodar nada: abra o package.json, procure o campo scripts, e leia como texto o arquivo que o postinstall chama. Nunca execute para descobrir o que faz.

Exemplo: o package.json de env-helper tem "postinstall": "node scripts/collect.js". Lendo collect.js, vê-se que ele junta NPM_TOKEN e ~/.npmrc e faz um POST para collect.pkg-metrics.test/ingest. A defesa: instalar com --ignore-scripts (o npm ci --ignore-scripts não roda esses hooks) e revisar toda dependência nova antes de adicioná-la. Em Python, o equivalente histórico é o código no setup.py, que roda na instalação a partir do código-fonte.

1 npm install 2 postinstall roda sozinho com as suas permissões 3 servidor do atacante dispara POST segredos: NPM_TOKEN, ~/.npmrc
O npm install dispara o postinstall do pacote, que roda sozinho, com as suas permissões, e pode mandar segredos para fora.

Aparece nestes desafios